D3DXSHADER フラグ

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

パーサー フラグ

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

定数 説明
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
明示的に指定しない限り、マトリックスはシェーダーとの間で渡されるときに列メジャー順にパックされます (各ベクターは 1 つの列に配置されます)。 これは一般的に、一連のドット積を使用してベクター行列乗算を実行できるため、より効率的です。
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
明示的に指定しない限り、マトリックスは、シェーダーの送受信時に行メジャー順にパックされます (各ベクターは 1 つの行に配置されます)。

コンパイラ フラグ

DirectX 10 HLSL コンパイラが既定のコンパイラになりました。 詳細については、 エフェクト コンパイラ ツール に関するページを参照してください。

次の表では、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としてコンパイルします。 DirectX 10 に付属するシェーダー コンパイラのバージョンでサポートされている最小シェーダー バージョンであるため、ps_1_xターゲットを指定する効果は、代わりにps_2_0ターゲットにコンパイルされます。 このフラグは、より高いレベルのコンパイル ターゲットで使用した場合は無効です。
Direct3D 9 - いいえ
Direct3D 10 - はい
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
該当なし
ピクセル シェーダーで使用可能な次に高いソフトウェア ターゲットに対してコンパイラを強制的にコンパイルします。 このフラグにより、最適化がオフになり、デバッグがオンになります。
Direct3D 9 - はい
Direct3D 10 - はい
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
該当なし
頂点シェーダーで使用可能な次に高いソフトウェア ターゲットに対してコンパイラを強制的にコンパイルします。 このフラグにより、最適化がオフになり、デバッグがオンになります。
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
2 番目に低い最適化レベル。
Direct3D 9 - いいえ
Direct3D 10 - はい
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
2 番目に高い最適化レベル。
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 インターフェイスを取得するときにこのフラグを指定すると、このオブジェクトを介して CompileEffect および CompileShader が後続の呼び出しでレガシ コンパイラを使用します。
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 エラー コードの戻り値を確認して、このエラーを追跡します。 DXErr.exeを取得し、DirectX SDK から学習できます。 DirectX SDK の詳細については、「 DirectX SDK はどこにありますか?」を参照してください。

要件

要件
ヘッダー
D3dx9shader.h

関連項目

D3DX 定数