语法

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

用法

fxcSwitchOptionsFilenames

参数

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

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>

定义宏。

/decompress

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

/dumpbin

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

/E <名称>

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

/enable_unbounded_descriptor_tables

启用未绑定的描述符表。 Direct3D 12 的新增功能。

/extractrootsignature <文件>

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

/Fc <文件>

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

/Fd <文件>

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

/Fe <文件>

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

/Fh <文件>

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

/Fl <文件

输出库。 需要D3dcompiler_47.dll或更高版本的 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

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

/matchUAV

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

/mergeUAV

合并模板着色器与当前着色器的 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 <文件>

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

/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+ 别名。 需要D3dcompiler_47.dll或更高版本的 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 的新增功能。

/Vi

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

/Vn <名称>

在头文件中将名称用作变量名称。

/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 中,通过调用以下函数来获取最适合给定设备的顶点、几何图形和像素着色器配置文件: D3D10GetVertexShaderProfileD3D10GetPixelShaderProfileD3D10GetGeometryShaderProfile

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

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