構文
エフェクト コンパイラ ツール FXC.exe を呼び出すための構文を次に示します。 例については、「オフライン コンパイル」を参照してください。
使用方法
fxc SwitchOptions Filenames
引数
各スイッチ オプションをスペースまたはコロンで区切ります。
SwitchOptions
[in] コンパイル オプション。 必要なオプションが 1 つだけあり、さらに多くのオプションが省略可能です。 それぞれをスペースまたはコロンで区切ります。
必須オプション
/T <profile>
シェーダー モデル (プロファイルを参照)。
省略可能なオプション
/?, /help
FXC.exe
のヘルプを印刷します。
@<command.option.file>
追加のコンパイル オプションを含むファイル。 このオプションは、他のコマンド ライン コンパイル オプションと混在させることができます。 command.option.file には、1 行に 1 つのオプションのみを含める必要があります。 command.option.file に空白行を含めることはできません。 ファイルで指定されたオプションには、先頭または末尾にスペースを含めることはできません。
/all_resources_bound
SM5.1 以降でアグレッシブなフラット化を有効にします。 Direct3D 12 の新機能。
/Cc
色分けされたアセンブリを出力します。
/compress
ファイルから DX10 シェーダーのバイトコードを圧縮します。
/D <id>=<text>
マクロを定義します。
/decompress
最初のファイルから DX10 シェーダー バイトコードを展開します。 出力ファイルは、圧縮中の順序で一覧表示する必要があります。
/dumpbin
シェーダーをコンパイルするのではなく、バイナリ ファイルを読み込みます。
/E <name>
シェーダーのエントリ ポイント。 エントリ ポイントが指定されていない場合、main はシェーダー エントリ名と見なされます。
/enable_unbounded_descriptor_tables
無制限の記述子テーブルを有効にします。 Direct3D 12 の新機能。
/extractrootsignature <file>
シェーダーのバイトコードからルート署名を抽出します。 Direct3D 12 の新機能。
/Fc <file>
アセンブリ コード一覧ファイルを出力します。
/Fd <file>
シェーダー プログラム データベース (PDB) 情報を抽出し、指定されたファイルに書き込みます。シェーダーをコンパイルするときに、/Fd を使用してシェーダー デバッグ情報を含む PDB ファイルを生成します。
/Fe <file>
指定されたファイルに警告とエラーを出力します。
/Fh <file>
オブジェクト コードを含む出力ヘッダー ファイル。
/Fl <file
ライブラリを出力します。 D3dcompiler_47.dll またはそれ以降のバージョンの DLL が必要です。
/Fo <file>
出力オブジェクト ファイル。 多くの場合、拡張子は「.fxc」になりますが、「.o」、「.obj」、「.dxbc」などの他の拡張子も使用されます。
/Fx <file>
アセンブリ コードと 16 進リスト ファイルを出力します。
/Gch
fx_4_x プロファイルの子効果としてコンパイルします。
Note
従来の効果プロファイルのサポートは非推奨です。
/Gdp
効果パフォーマンス モードを無効にします。
/Gec
下位互換性モードを有効にします。
/Ges
厳格モードを有効にします。
/getprivate <file>
シェーダー BLOB (コンパイル済みシェーダー バイナリ) から特定のファイルにプライベート データを保存します。 シェーダー BLOB から、/setprivate によって以前埋め込まれたプライベート データを抽出します。
/dumpbin オプションは /getprivate で指定する必要があります。 次に例を示します。
fxc /getprivate ps01.private.data
/dumpbin ps01.with.private.obj
/Gfa
フロー制御コンストラクトは避けてください。
/Gfp
フロー制御コンストラクトを優先します。
/Gis
IEEE の厳格さを強制します。
/Gpp
部分精度を強制します。
/I <include>
追加のインクルード パス。
/Lx
出力 16 進リテラル。 D3dcompiler_47.dll またはそれ以降のバージョンの DLL が必要です。
/matchUAVs
現在のシェーダーのテンプレート シェーダー UAV スロットの割り当てを照合します。 詳しくは、解説を参照してください。
/mergeUAVs
テンプレート シェーダーと現在のシェーダーの UAV スロット割り当てをマージします。 詳しくは、解説を参照してください。
/Ni
アセンブリ リストの命令番号を出力します。
/No
アセンブリ リストの出力命令バイト オフセット。 アセンブリを生成するときは、/No を使用して、各命令のバイト オフセットで注釈を付けます。
/nologo
著作権メッセージを表示しません。
/Od
最適化を無効にします。 /Od は /Gfp を暗黙的に示しますが、その出力は /Od /Gfp. と同じにならない場合があります。
/Op
事前シェーダーを無効にします (非推奨)。
/O0 /O1、/O2、/O3
最適化レベル。 O1 が既定の設定です。
- O0 - 命令の並べ替えを無効にします。 これにより、レジスタの負荷を軽減し、ループ シミュレーションを高速化できます。
- O1 - ps_3_0および up の命令の並べ替えを無効にします。
- O2 - O1 と同じです。 将来の使用のために予約済み。
- O3 - O1 と同じです。 将来の使用のために予約済み。
/P <file>
ファイルへの前処理 (単独で使用する必要があります)。
/Qstrip_debug
4_0 以降のプロファイルのシェーダー バイトコードからデバッグ データを削除します。
/Qstrip_priv
4_0 以降のシェーダー バイトコードからプライベート データを削除します。 /setprivate <file>
オプションで以前に埋め込んだシェーダー BLOB (コンパイル済みシェーダー バイナリ) からプライベート データ (任意のバイト シーケンス) を削除します。
/dumpbin オプションは /Qstrip_priv で指定する必要があります。 次に例を示します。
fxc /Qstrip_priv /dumpbin /Fo ps01.no.private.obj
ps01.with.private.obj
/Qstrip_reflect
4_0 以降のプロファイルのシェーダー バイトコードからリフレクション データを削除します。
/Qstrip_rootsignature
シェーダー バイトコードからルート署名を削除します。 Direct3D 12 の新機能。
/res_may_alias
UAV/SRV が cs_5_0+ のエイリアスになる可能性があるとします。 D3dcompiler_47.dll またはそれ以降のバージョンの DLL が必要です。
/setprivate <file>
指定されたファイル内のプライベート データをコンパイル済みシェーダー BLOB に追加します。 生バッファーとして扱われる特定のファイルをシェーダー BLOB に埋め込みます。 シェーダーをコンパイルするときにプライベート データを追加するには、/setprivate を使用します。 または、/dumpbin オプションを /setprivate と共に使用して既存のシェーダー オブジェクトを読み込み、オブジェクトがメモリ内に保存された後にプライベート データ BLOB を追加します。 たとえば、/setprivate で 1 つのコマンドを使用して、コンパイル済みのシェーダー BLOB にプライベート データを追加します。
fxc /T ps_4_0 /Fo ps01.with.private.obj ps01.fx
/setprivate ps01.private.data
または、2 つ目のコマンドでシェーダー オブジェクトを読み込み、プライベート データを追加する 2 つのコマンドを使用します。
fxc /T ps_4_0 /Fo ps01.no.private.obj ps01.fx
fxc /dumpbin /Fo ps01.with.private.obj ps01.no.private.obj
/setprivate ps01.private.data
/setrootsignature <file>
ルート署名をシェーダーのバイトコードに添付します。 Direct3D 12 の新機能。
/shtemplate <file>
特定のテンプレート シェーダー ファイルを使用して、リソースのマージ (/mergeUAV) と照合 (/matchUAV) を行います。 詳しくは、解説を参照してください。
/Vd
検証を無効にします。
/verifyrootsignature <file>
ルート署名に対してシェーダー のバイトコードを確認します。 Direct3D 12 の新機能。
/Vi
インクルード プロセスの詳細を表示します。
/Vn <name>
ヘッダー ファイルで変数名として名前を使用します。
/WX
警告をエラーとして扱います。
/Zi
デバッグ情報を有効にします。
/Zpc
行列を列優先順にパックします。
/Zpr
行列を行優先順にパックします。
ファイル名
[in] シェーダーまたはエフェクトを含むファイル。
解説
/mergeUAVs
、/matchUAVs
、および /shtemplate
オプションを使用して、シェーダー チェーンの UAV バインド スロットを整列します。
シェーダー A.fx、B.fx、C.fx があるとします。 このシェーダー チェーンの UAV バインド スロットを整列するには、次の 2 つのコンパイル パスが必要です。
シェーダーチェーンの UAV バインド スロットを整列するには
- /mergeUAV を使用してシェーダーをコンパイルし、以前にコンパイルしたシェーダー BLOB を /shtemplate で指定します。 例:
fxc.exe /T cs_5_0 C.fx /Fo C.o /mergeUAVs /shtemplate Btmp.o
- /matchUAVs を使用してシェーダーをコンパイルし、/shtemplate を使用して最初のパスの最後のシェーダー ブロブを指定します。 任意の順序でコンパイルできます。 例:
fxc.exe /T cs_5_0 A.fx /Fo A.o /matchUAVs /shtemplate C.o
2 番目のパスで C.fx を再コンパイルする必要はありません。
前の 2 つのコンパイル パスを実行した後、A.o、B.o、および C.o を、UAV スロットが整列した最終シェーダー BLOB として使用できます。
プロファイル
各シェーダー モデルには HLSL プロファイルのラベルが付けられます。 特定のシェーダー モデルに対してシェーダーをコンパイルするには、次の表から適切なシェーダー プロファイルを選択します。
シェーダーの種類 | プロファイル |
---|---|
計算シェーダー |
cs_4_1 cs_5_0 cs_5_1 |
ドメイン シェーダー |
ds_5_1 |
ジオメトリ シェーダー |
gs_4_1 gs_5_0 gs_5_1 |
HLSL シェーダーのリンク |
lib_4_1 lib_4_0_level_9_1 lib_4_0_level_9_1_vs_only lib_4_0_level_9_1_ps_only lib_4_0_level_9_3 lib_4_0_level_9_3_vs_only lib_4_0_level_9_3_ps_only lib_5_0 |
ハル シェーダー |
hs_5_1 |
ピクセル シェーダー |
ps_2_a ps_2_b ps_2_sw ps_3_0 ps_3_sw ps_4_0 ps_4_0_level_9_0 ps_4_0_level_9_1 ps_4_0_level_9_3 ps_4_1 ps_5_0 ps_5_1 |
ルート署名 |
|
テクスチャ シェーダー |
|
頂点シェーダー |
vs_2_0 vs_2_a vs_2_sw vs_3_0 vs_3_sw vs_4_0 vs_4_0_level_9_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_4_1 vs_5_0 vs_5_1 |
バージョンに関するメモ
Direct3D 12 については、「HLSL でのルート署名の指定」、「 HLSL でのリソース バインド」、および「HLSL 5.1 を使用した動的インデックス作成」を参照してください。
Direct3D 10 では、API を使用して、D3D10GetVertexShaderProfile、D3D10GetPixelShaderProfile、および D3D10GetGeometryShaderProfile 関数を呼び出すことによって、特定のデバイスに最適な頂点、ジオメトリ、ピクセル シェーダー プロファイルを取得します。
Direct3D 9 では、GetDeviceCaps または GetDeviceCaps メソッドを使用して、デバイスでサポートされている頂点プロファイルおよびピクセル シェーダー プロファイルを取得します。 これらのメソッドによって返される D3DCAPS9 構造体は、 VertexShaderVersion および PixelShaderVersion メンバー内のデバイスでサポートされる頂点プロファイルおよびピクセル シェーダー プロファイルを示します。
例については、「現在のコンパイラを使用したコンパイル」を参照してください。