语法

下面是用于调用效果编译器工具 FXC.exe 的语法。 有关示例,请参阅 脱机编译

使用情况

fxcSwitchOptions文件名

参数

用空格或冒号分隔每个开关选项。

SwitchOptions

[in]编译选项。 只有一个必需的选项,还有更多是可选的。 用空格或冒号分隔每个。

必需选项

/T <配置文件>

着色器模型 (请参阅 配置文件) 。

可选选项

/?, /help

打印的 FXC.exe帮助。

@<command.option.file>

包含其他编译选项的文件。 此选项可以与其他命令行编译选项混合。 command.option.file 每行只能包含一个选项。 command.option.file 不能包含任何空白行。 文件中指定的选项不得包含任何前导空格或尾随空格。

/all_resources_bound

在 SM5.1+ 中启用主动平展。 Direct3D 12 的新增功能。

/Cc

输出颜色编码程序集。

/compress

压缩文件中的 DX10 着色器字节码。

/D <id>=<text>

定义宏。

/解 压缩

从第一个文件解压缩 DX10 着色器字节码。 输出文件应按压缩过程中的顺序列出。

/dumpbin

加载二进制文件,而不是编译着色器。

/E <名称>

着色器入口点。 如果未提供入口点,则main被视为着色器条目名称。

/enable_unbounded_descriptor_tables

启用无限制的描述符表。 Direct3D 12 的新增功能。

/extractrootsignature <文件>

从着色器字节代码中提取根签名。 Direct3D 12 的新增功能。

/Fc <文件>

输出程序集代码列表文件。

/Fd <文件>

提取着色器程序数据库 (PDB) 信息并写入给定文件。编译着色器时,请使用 /Fd 生成包含着色器调试信息的 PDB 文件。

/Fe <文件>

将警告和错误输出到给定的文件。

/Fh <文件>

包含对象代码的输出头文件。

/Fl <文件

输出库。 需要 DLL 的D3dcompiler_47.dll或更高版本。

/Fo <文件>

输出对象文件。 通常给定扩展名“.fxc”,但使用其他扩展,例如“.o”、“.obj”或“.dxbc”。

/Fx <文件>

输出程序集代码和十六进制列表文件。

/Gch

编译为fx_4_x配置文件的子效果。

注意

已弃用对旧版效果配置文件的支持。

/Gdp

禁用效果性能模式。

/Gec

启用向后兼容模式。

/Ges

启用严格模式。

/getprivate <文件>

将着色器 blob 中的私有数据 (编译的着色器二进制) 保存到给定文件。 从着色器 Blob 中提取以前由 /setprivate 嵌入的私有数据。

必须使用 /getprivate 指定 /dumpbin 选项。 例如:

fxc /getprivate ps01.private.data 
    /dumpbin ps01.with.private.obj
/Gfa

避免使用流控制构造。

/Gfp

首选流控制构造。

/Gis

强制 IEEE 严格性。

/Gpp

强制部分精度。

/I <include>

其他包含路径。

/Lx

输出十六进制文本。 需要 DLL 的D3dcompiler_47.dll或更高版本。

/matchUAV

匹配当前着色器中的模板着色器 UAV 槽分配。 有关详细信息,请参阅 备注

/mergeUAV

合并模板着色器与当前着色器的 UAV 槽分配。 有关详细信息,请参阅 备注

/镍

在程序集列表中输出指令编号。

/不

程序集列表中输出指令字节偏移量。 生成程序集时,请使用 /No 将程序集批注为每个指令的字节偏移量。

取消显示版权消息。

/Od

禁用优化。 /Od 表示 /Gfp,但输出可能与 /Od /Gfp 不同。

/Op

禁用已弃用) (预示符。

/O0 /O1、/O2、/O3

优化级别。 O1 是默认设置。

  • O0 - 禁用指令重新排序。 这有助于减少寄存器负载,并实现更快的循环模拟。
  • O1 - 禁用ps_3_0和向上的指令重新排序。
  • O2 - 与 O1 相同。 保留供将来使用。
  • O3 - 与 O1 相同。 保留供将来使用。
/P <文件>

预处理到文件 (必须单独使用) 。

/Qstrip_debug

从着色器字节码中去除 4_0+ 配置文件的调试数据。

/Qstrip_priv

从 4_0+ 着色器字节码中去除私有数据。 从着色器 blob 中删除私有数据 (任意字节序列) , (先前嵌入 /setprivate <file> 选项的已编译着色器二进制) 。

必须使用 /Qstrip_priv 指定 /dumpbin 选项。 例如:

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+ 别名。 需要 DLL 的D3dcompiler_47.dll或更高版本。

/setprivate <文件>

将给定文件中的私有数据添加到编译的着色器 Blob。 将给定文件(被视为原始缓冲区)嵌入到着色器 Blob 中。 编译着色器时,使用 /setprivate 添加私有数据。 或者,将 /dumpbin 选项与 /setprivate 一起使用以加载现有的着色器对象,然后在对象位于内存中之后添加专用数据 Blob。 例如,将单个命令与 /setprivate 结合使用,将私有数据添加到已编译的着色器 Blob:

fxc /T ps_4_0 /Fo ps01.with.private.obj ps01.fx 
    /setprivate ps01.private.data

或者,使用两个命令,其中第二个命令加载着色器对象,然后添加私有数据:

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 <文件>

将根签名附加到着色器字节码。 Direct3D 12 的新增功能。

/shtemplate <文件>

使用给定的模板着色器文件来合并 (/mergeUAV) 和匹配 (/matchUAV) 资源。 有关详细信息,请参阅 备注

/Vd

禁用验证。

/verifyrootsignature <文件>

根据根签名验证着色器字节码。 Direct3D 12 的新增功能。

/六

显示有关包含过程的详细信息。

/Vn <name>

在头文件中使用 name 作为变量名称。

/WX

将警告视为错误。

/ZI

启用调试信息。

/Zpc

按列主顺序打包矩阵。

/Zpr

按行主顺序打包矩阵。

文件名

[in]包含着色器 () 和/或效果 () 的文件。

备注

/mergeUAVs使用 、 /matchUAVs/shtemplate 选项来对齐一系列着色器的 UAV 绑定槽。

假设你有着色器 A.fx、B.fx 和 C.fx。 若要对齐此着色器链的 UAV 绑定槽,需要两次编译:

对齐一系列着色器的 UAV 绑定槽

  1. 使用 /mergeUAV 编译着色器,并使用 /shtemplate 指定以前编译的着色器 Blob。 例如:
    fxc.exe /T cs_5_0 C.fx /Fo C.o /mergeUAVs /shtemplate Btmp.o
    
  2. 使用 /matchUAV 编译着色器,并使用 /shtemplate 指定第一个通道中的最后一个着色器 blob。 可以按任意顺序进行编译。 例如:
    fxc.exe /T cs_5_0 A.fx /Fo A.o /matchUAVs /shtemplate C.o
    

无需在第二次传递中重新编译 C.fx。

执行上述两个编译阶段后,可以使用 A.o、B.o 和 C.o 作为具有对齐 UAV 槽的最终着色器 Blob。

配置文件

每个着色器模型都标有一个 HLSL 配置文件。 若要根据特定着色器模型编译着色器,请从下表中选择适当的着色器配置文件。

着色器类型配置文件
计算着色器
cs_4_0
cs_4_1
cs_5_0
cs_5_1
域着色器
ds_5_0
ds_5_1
几何着色器
gs_4_0
gs_4_1
gs_5_0
gs_5_1
HLSL 着色器链接
lib_4_0
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
有关着色器链接的详细信息,请参阅 ID3D11LinkerID3D11FunctionLinkingGraph
外壳着色器
hs_5_0
hs_5_1
像素着色器
ps_2_0
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
根签名
rootsig_1_0
纹理着色器
tx_1_0
顶点着色器
vs_1_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 获取最适合给定设备的顶点、几何图形和像素着色器配置文件: D3D10GetVertexShaderProfileD3D10GetPixelShaderProfileD3D10GetGeometryShaderProfile

在 Direct3D 9 中,使用 GetDeviceCapsGetDeviceCaps 方法检索设备支持的顶点和像素着色器配置文件。 这些方法返回的 D3DCAPS9 结构指示设备在其 VertexShaderVersion 和 PixelShaderVersion 成员中支持的顶点和 像素 着色器配置文件。

有关示例,请参阅 使用当前编译器进行编译