Share via


D3DXSHADER フラグ

次のフラグは、シェーダーの解析、コンパイル、アセンブルに使用されます。

  • パーサー フラグ
  • コンパイラ フラグ
  • アセンブラー フラグ
  • 解説 

パーサー フラグ

時間解析フラグは、エフェクト コンパイラを使用する場合に、エフェクトのコンパイル前にエフェクト システムによってのみ使用されます。たとえば、コンパイラ オブジェクトを D3DXSHADER_PACKMATRIX_COLUMNMAJOR で作成し、次にそのコンパイラ オブジェクトを異なるコンパイラ フラグを繰り返し使用して特化されたコードを作成します。

#define 説明
D3DXSHADER_PACKMATRIX_COLUMNMAJOR 明示的に指定されている場合を除いては、行列はシェーダーとのやり取りの際に、列を優先させた順序で (1 つの列の各ベクトルで) パックされます。通常はこの方が効率的です。内積処理を使用したベクトル行の乗算が実行できるからです。
D3DXSHADER_PACKMATRIX_ROWMAJOR 明示的に指定されている場合を除いては、行列はシェーダーとのやり取りの際に、行を優先させた順序で (1 つの行の各ベクトルで) パックされます。

エフェクト システムは次の関数を呼び出す場合に、パーサー フラグ を使用します。

コンパイラ フラグ

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 の呼び出しで、レガシー コンパイラが使用されます。 不可

エフェクト システムは次の関数を呼び出す場合に、コンパイラ フラグ を使用します。

さらに、D3DXCreateEffect (または D3DXCreateEffectFromFile または D3DXCreateEffectFromResource) を呼び出すことによってエフェクトを作成する場合、コンパイラ フラグを使用することができます。

  • コンパイルされていない .fx ファイルを渡す場合、エフェクト システムはコンパイル中にフラグの入力パラメーターを使用します。
  • コンパイルされたエフェクトに渡す場合、エフェクト システムはコンパイラ フラグを無視します。それらはエフェクトを呼び出す必要がないからです。

アセンブラー フラグ

エフェクト システムによって使用されるアセンブラー フラグは、シェーダーとエフェクト アセンブリ コードを最適化します。

#define 説明
D3DXSHADER_DEBUG シェーダー コンパイル処理中に、デバッグ ファイル名、行番号、型およびシンボル情報を挿入します。
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT コンパイラで、ピクセル シェーダーに対して、次の利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT コンパイラで、頂点シェーダーに対して、次に利用可能なソフトウェア ターゲットがコンパイルされるようにします。このフラグは、最適化をオフにし、デバッグをオンにします。
D3DXSHADER_SKIPVALIDATION 既知の機能や制約に対して生成されたコードの検証を行いません。このオプションは、動作することがわかっているシェーダー (つまり、このオプションなしで以前にコンパイルされているシェーダー) をコンパイルする場合にのみ使用することをお勧めします。シェーダーは常に、デバイスに設定される前にランタイムによって検証されます。

エフェクト システムは次の関数を呼び出す場合に、アセンブラー フラグ を使用します。

解説 

不適切な API に コンパイラ フラグ または アセンブラー フラグ を適用すると、シェーダー検証は失敗します。関数から返される Direct3D エラー コードの値を (DirectX エラー ルックアップ ツールで) 確認し、このエラーを分析します。

ヘッダー d3dx9shader.h