D3DXSHADER 旗標

D3DXSHADER旗標用於剖析、編譯或組合著色器。

剖析器旗標

只有在建立效果編譯器之前,效果系統才會使用剖析時間旗標 () 。 例如,您可以建立具有 D3DXSHADER_PACKMATRIX_COLUMNMAJOR的編譯器物件,然後以不同的編譯器旗標重複使用該編譯器物件來產生特製化程式碼。

常數 描述
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
除非明確指定,否則矩陣會以資料行主要順序封裝, (每個向量在傳遞至著色器時,每個向量都會在單一資料行中) 。 這通常更有效率,因為它允許使用一系列點產品來執行向量矩陣乘法。
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
除非明確指定,否則矩陣會以資料列主要順序封裝, (每個向量都會在傳送至著色器或從著色器傳入或傳出單一資料列) 。

編譯器旗標

DirectX 10 HLSL 編譯器現在是預設編譯器。 如需詳細資訊,請參閱 Effect-Compiler Tool

下表詳細說明 Direct3D 9 和 Direct3D 10 中可用的旗標。 旗標的值是相等的 fxc 選項。

常數/值 描述
D3DXSHADER_AVOID_FLOW_CONTROL
/Gfa
這是編譯器的提示,以避免使用流程式控制制指令。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_DEBUG
/ZI
在著色器編譯期間插入偵錯檔名、行號和類型和符號資訊。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
/Gec
將 ps_1_x著色器編譯為ps_2_0。 指定ps_1_x目標的效果會改為編譯成ps_2_0目標,因為這是 DirectX 10 隨附的著色器編譯器版本所支援的最低著色器版本。 當搭配較高層級編譯目標使用時,此旗標不會有任何作用。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
N/A
強制編譯器針對圖元著色器的下一個最高可用軟體目標進行編譯。 此旗標也會關閉優化,並開啟偵錯。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
N/A
強制編譯器針對頂點著色器的下一個最高可用軟體目標進行編譯。 此旗標也會關閉優化,並開啟偵錯。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_IEEE_STRICTNESS
/Gis
停用可能導致編譯著色器程式的輸出與使用 DirectX 9 著色器編譯器編譯的程式輸出不同的優化,因為浮點數數學的精確度很小。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_NO_PRESHADER
/Op
停用前置詞。 編譯器不會提取靜態運算式來評估主機 CPU。 此外,編譯器不會在編譯獨立函式時修改任何運算式。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_OPTIMIZATION_LEVEL0
/O0
最低優化層級。 可能會產生較慢的程式碼,但會更快速地執行此動作。 這在高度反復的著色器開發週期中可能很有用。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_OPTIMIZATION_LEVEL1
/O1
第二個最低優化層級。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
第二個最高優化層級。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_OPTIMIZATION_LEVEL3
/O3
最高優化層級。 將產生最佳的可能程式碼,但可能需要很長的時間才能這麼做。 這對於效能是最重要的因素之應用程式的最終組建很有用。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_PARTIALPRECISION
/Gpp
強制產生著色器中的所有計算以部分精確度發生。 這可能會導致在某些硬體上更快速地評估著色器。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_PREFER_FLOW_CONTROL
/Gfp
這是編譯器偏好使用流程式控制制指令的提示。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_SKIPOPTIMIZATION
/Od
指示編譯器在程式碼產生期間略過優化步驟。 除非您嘗試在程式碼中找出問題,而且您懷疑編譯器,否則不建議使用此選項。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_SKIPVALIDATION
/Vd
請勿根據已知功能和條件約束來驗證產生的程式碼。 只有在編譯已知可運作的著色器 (時,才建議使用此選項,也就是在沒有此選項之前編譯的著色器) 。 著色器一律會由執行時間驗證,再將其設定為裝置。
Direct3D 9 - 是
Direct3D 10 - 是
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
/LD
啟用原始 Direct3D 9 HLSL 編譯器的使用。 OCT2006_d3dx9_31_x86.cab或OCT2006_d3dx9_31_x64.cab必須包含在應用程式重做的一部分。 此旗標需要編譯ps_1_x著色器,而不需使用升級旗標來ps_2_0。 取得 ID3DXEffectCompiler 介面時指定這個旗標會導致透過這個物件對 CompileEffectCompileShader 進行後續呼叫,以使用舊版編譯器。
Direct3D 9 - 是
Direct3D 10 - 否

組合器旗標

效果系統會使用組合器旗標來優化著色器和效果元件程式碼。

常數 描述
D3DXSHADER_DEBUG
在著色器編譯期間插入偵錯檔名、行號和類型和符號資訊。
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
強制編譯器針對圖元著色器的下一個最高可用軟體目標進行編譯。 此旗標也會關閉優化,並開啟偵錯。
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
強制編譯器針對頂點著色器的下一個最高可用軟體目標進行編譯。 此旗標也會關閉優化,並開啟偵錯。
D3DXSHADER_SKIPVALIDATION
請勿根據已知功能和條件約束來驗證產生的程式碼。 只有在編譯已知可運作的著色器 (時,才建議使用此選項,也就是在沒有此選項之前編譯的著色器) 。 著色器一律會由執行時間驗證,再將其設定為裝置。

備註

效果系統會在下列函式呼叫時使用 剖析器旗標

效果系統會在下列函式呼叫時使用 編譯器旗標

此外,您可以在建立效果時使用編譯器旗標,方法是呼叫D3DXCreateEffect (或D3DXCreateEffectFromFile 或 D3DXCreateEffectFromResource) 。

  • 如果您傳入未編譯的 .fx 檔案,效果系統會在編譯期間使用旗標輸入參數。
  • 如果您傳入編譯的效果,效果系統會忽略編譯器旗標,因為它們不需要載入效果。

效果系統會在下列函式呼叫時使用 組合器旗標

編譯器旗 標或 組合器旗 標套用至不正確的 API 將會失敗著色器驗證。 使用 DirectX 錯誤查閱工具 (DXErr.exe) 檢查函式的 Direct3D 錯誤碼傳回值,以協助追蹤此錯誤。 您可以從 DirectX SDK 取得DXErr.exe並瞭解。 如需 DirectX SDK 的相關資訊,請參閱 DirectX SDK 在哪裡?

規格需求

需求
標頭
D3dx9shader.h

另請參閱

D3DX 常數