语法

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

使用情况

fxc SwitchOptions Filenames

参数

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

SwitchOptions

[in] 编译选项 只有一个必需选项,并有多个可选项。 用空格或冒号将每个选项隔开。

必需选项

/T <profile>

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

可选选项

/?, /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>

定义宏。

/decompress

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

/dumpbin

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

/E <名称>

着色器入口点。 如果为给出入口点,则 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>

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

/Gch

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

注意

已弃用对旧 Effects 配置文件的支持。

/Gdp

禁用效果性能模式。

/Gec

启用向后兼容模式。

/Ges

启用严格模式。

/getprivate <file>

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

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

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

避免使用流量控制结构。

/Gfp

优先选择流量控制结构。

/Gis

强制执行 IEEE 严格要求。

/Gpp

强制执行部分精度。

/I <include>

其他包含路径。

/Lx

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

/matchUAVs

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

/mergeUAVs

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

/Ni

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

/No

程序集列表中的输出指令字节偏移量。 在生成程序集时,可使用 /No 对每个指令的字节偏移量进行批注。

取消显示版权消息。

/Od

禁用优化。 /Od 意味着 /Gfp,但输出可能与 /Od /Gfp 不一致。

/Op

禁用预着色器(已弃用)。

/O0 /O1, /O2, /O3

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

  • O0 - 禁用指令重新排序。 这有助于减少寄存器负载,同时加快循环模拟速度。
  • O1 - 禁用 ps_3_0 及以上版本的指令重新排序。
  • O2 - 与 O1 相同。 保留供将来使用。
  • O3 - 与 O1 相同。 保留供将来使用。
/P <file>

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

/Qstrip_debug

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

/Qstrip_priv

从 4_0+ 着色器字节码中剥离专用数据。 删除之前使用 /setprivate <file> 选项嵌入的着色器 blob(编译后的着色器二进制文件)中的专用数据(任意字节序列)。

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

/setprivate <file>

将给定文件中的专用数据添加到编译后的着色器 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 <file>

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

/shtemplate <file>

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

/Vd

禁用验证。

/verifyrootsignature <file>

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

/Vi

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

/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 作为最终着色器 Blob,并对齐 UAV 槽。

档案

每个着色器模型都标有 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 结构在 VertexShaderVersionPixelShaderVersion 成员中显示了设备支持的顶点和像素着色器配置文件。

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