D3DXSHADER フラグ
次のフラグは、シェーダーの解析、コンパイル、アセンブルに使用されます。
- パーサー フラグ
- コンパイラ フラグ
- アセンブラー フラグ
- 解説
パーサー フラグ
時間解析フラグは、エフェクト コンパイラを使用する場合に、エフェクトのコンパイル前にエフェクト システムによってのみ使用されます。たとえば、コンパイラ オブジェクトを D3DXSHADER_PACKMATRIX_COLUMNMAJOR で作成し、次にそのコンパイラ オブジェクトを異なるコンパイラ フラグを繰り返し使用して特化されたコードを作成します。
#define | 説明 |
---|---|
D3DXSHADER_PACKMATRIX_COLUMNMAJOR | 明示的に指定されている場合を除いては、行列はシェーダーとのやり取りの際に、列を優先させた順序で (1 つの列の各ベクトルで) パックされます。通常はこの方が効率的です。内積処理を使用したベクトル行の乗算が実行できるからです。 |
D3DXSHADER_PACKMATRIX_ROWMAJOR | 明示的に指定されている場合を除いては、行列はシェーダーとのやり取りの際に、行を優先させた順序で (1 つの行の各ベクトルで) パックされます。 |
エフェクト システムは次の関数を呼び出す場合に、パーサー フラグ を使用します。
- D3DXCompileShader
- D3DXCompileShaderFromFile
- D3DXCompileShaderFromResource
- ID3DXEffectCompiler::CompileEffect
コンパイラ フラグ
DirectX 10 HLSL コンパイラは、現在デフォルトのコンパイラです。詳細については、「エフェクト コンパイラ ツール」を参照してください。
次の表は、Direct3D 9 および Direct3D 10 で利用できるフラグについてまとめたものです。
#define | fxc スイッチ | 説明 | Direct3D 9 | Direct3D 10 |
---|---|---|---|---|
D3DXSHADER_AVOID_FLOW_CONTROL | /Gfa | これは、フロー制御命令を使用しないようにコンパイラに指示します。 | 可 | 可 |
D3DXSHADER_DEBUG | /Zi | シェーダー コンパイル処理中に、デバッグ ファイル名、行番号、型およびシンボル情報を挿入します。 | 可 | 可 |
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY | /Gec | ps_1_x シェーダーを ps_2_0 としてコンパイルします。ps_1_x ターゲットを指定するエフェクトは、代わりに ps_2_0 ターゲットにコンパイルされます。これは、DirectX 10 に付属するシェーダー コンパイラのバージョンでサポートされている最小のシェーダー バージョンが ps_2.0 であるからです。ハイレベルのコンパイル ターゲットでは、このフラグは何の効果も及ぼしません。 | 不可 | 可 |
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT | なし | コンパイラで、ピクセル シェーダーに対して、次の利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。 | 可 | 可 |
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT | なし | コンパイラで、頂点シェーダーに対して、次に利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。 | 可 | 可 |
D3DXSHADER_IEEE_STRICTNESS | /Gis | 最適化を無効にすると、コンパイルされたシェーダープログラムの出力が DirectX 9 シェーダー コンパイラでコンパイルされたプログラムの出力と異なることがあります。これは、浮動小数点の演算で精度にわずかなエラーが発生するためです。 | 不可 | 可 |
D3DXSHADER_NO_PRESHADER | /Op | プリシェーダーを無効にします。コンパイラはホスト CPU で評価の静的な式を引き出しません。また、コンパイラはスタンドアロン関数をコンパイルするときにどの式も上昇させません。 | 可 | 可 |
D3DXSHADER_OPTIMIZATION_LEVEL0 | /O0 | 最も低い最適化レベルです。遅いコードが生成されますが、コードの生成は迅速に行われます。これは、シェーダーの開発サイクルが何度も反復される場合に有効です。 | 不可 | 可 |
D3DXSHADER_OPTIMIZATION_LEVEL1 | /O1 | 2 番目に低い最適化レベルです。 | 不可 | 可 |
D3DXSHADER_OPTIMIZATION_LEVEL2 | /O2 | 2 番目に高い最適化レベルです。 | 不可 | 可 |
D3DXSHADER_OPTIMIZATION_LEVEL3 | /O3 | 最も高い最適化レベルです。可能なかぎり最適なコードが生成されますが、コード生成には非常に時間がかかります。これは、パフォーマンスが最も重要となるアプリケーションの最終ビルドに有効です。 | 不可 | 可 |
D3DXSHADER_PARTIALPRECISION | /Gpp | 結果のシェーダー内のすべての計算が部分精度で実行されるようにします。このフラグによって、一部のハードウェアではシェーダーの評価が高速化されます。 | 可 | 可 |
D3DXSHADER_PREFER_FLOW_CONTROL | /Gfp | これは、フロー制御命令を使用するすようにコンパイラに指示します。 | 可 | 可 |
D3DXSHADER_SKIPOPTIMIZATION | /Od | コード生成中に最適化手順をスキップするようにコンパイラに指示します。コード内の問題を取り除く際にコンパイラの問題が疑われる場合以外は、このオプションの使用はお勧めしません。 | 可 | 可 |
D3DXSHADER_SKIPVALIDATION | /Vd | 既知の機能や制約に対して生成されたコードの検証を行いません。このオプションは、動作することがわかっているシェーダー (つまり、このオプションなしで以前にコンパイルされているシェーダー) をコンパイルする場合にのみ使用することをお勧めします。シェーダーは常に、デバイスに設定される前にランタイムによって検証されます。 | 可 | 可 |
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL | /LD | オリジナルの Direct3D 9 HLSL コンパイラの使用を有効にします。OCT2006_d3dx9_31_x86.cab または OCT2006_d3dx9_31_x64.cab は、アプリケーションの再頒布可能パッケージの一部として含める必要があります。ps_2_0 への昇格フラグを使用せずに ps_1_x シェーダーをコンパイルするには、このフラグが必要です。ID3DXEffectCompiler インターフェイスの取得時にこのフラグを指定すると、このオブジェクトを介した次の ID3DXEffectCompiler::CompileEffect および ID3DXEffectCompiler::CompileShader の呼び出しで、レガシー コンパイラが使用されます。 | 可 | 不可 |
エフェクト システムは次の関数を呼び出す場合に、コンパイラ フラグ を使用します。
- D3DXCompileShader (または D3DXCompileShaderFromFile または D3DXCompileShaderFromResource)
- ID3DXEffectCompiler::CompileEffect (または ID3DXEffectCompiler::CompileShader)
さらに、D3DXCreateEffect (または D3DXCreateEffectFromFile または D3DXCreateEffectFromResource) を呼び出すことによってエフェクトを作成する場合、コンパイラ フラグを使用することができます。
- コンパイルされていない .fx ファイルを渡す場合、エフェクト システムはコンパイル中にフラグの入力パラメーターを使用します。
- コンパイルされたエフェクトに渡す場合、エフェクト システムはコンパイラ フラグを無視します。それらはエフェクトを呼び出す必要がないからです。
アセンブラー フラグ
エフェクト システムによって使用されるアセンブラー フラグは、シェーダーとエフェクト アセンブリ コードを最適化します。
#define | 説明 |
---|---|
D3DXSHADER_DEBUG | シェーダー コンパイル処理中に、デバッグ ファイル名、行番号、型およびシンボル情報を挿入します。 |
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT | コンパイラで、ピクセル シェーダーに対して、次の利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。 |
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT | コンパイラで、頂点シェーダーに対して、次に利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。 |
D3DXSHADER_SKIPVALIDATION | 既知の機能や制約に対して生成されたコードの検証を行いません。このオプションは、動作することがわかっているシェーダー (つまり、このオプションなしで以前にコンパイルされているシェーダー) をコンパイルする場合にのみ使用することをお勧めします。シェーダーは常に、デバイスに設定される前にランタイムによって検証されます。 |
エフェクト システムは次の関数を呼び出す場合に、アセンブラー フラグ を使用します。
解説
不適切な API に コンパイラ フラグ または アセンブラー フラグ を適用すると、シェーダー検証は失敗します。関数から返される Direct3D エラー コードの値を (DirectX エラー ルックアップ ツールで) 確認し、このエラーを分析します。
ヘッダー | d3dx9shader.h |