D3DXSHADER 标志

D3DXSHADER 标志用于分析、编译或组合着色器。

分析器标志

只有在创建效果编译器之前,效果系统才会使用效果系统 (分析时间标志) 。 例如,可以创建具有 D3DXSHADER_PACKMATRIX_COLUMNMAJOR的编译器对象,然后通过不同的编译器标志重复使用该编译器对象来生成专用代码。

一直 说明
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
除非显式指定,否则矩阵将按列主顺序打包, (每个向量在传入着色器时将位于单个列) 中。 这通常更高效,因为它允许使用一系列点产品执行矢量矩阵乘法。
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
除非显式指定,否则矩阵将按行主顺序打包, (传入或传出着色器时,每个向量将位于单行) 中。

编译器标志

DirectX 10 HLSL 编译器现在是默认编译器。 有关详细信息,请参阅 Effect-Compiler 工具

下表详细介绍了 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。 指定ps_1_x目标的效果将改为编译为ps_2_0目标,因为这是 DirectX 10 随附的着色器编译器版本支持的最低着色器版本。 当与更高级别的编译目标一起使用时,此标志不起作用。
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
第二个最低优化级别。
Direct3D 9 - 否
Direct3D 10 - 是
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
第二个最高优化级别。
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_2_0编译ps_1_x着色器即可使用此标志。 获取 ID3DXEffectCompiler 接口时指定此标志会导致通过此对象对 CompileEffectCompileShader 进行后续调用以使用旧编译器。
Direct3D 9 - 是
Direct3D 10 - 否

汇编程序标志

效果系统使用汇编程序标志来优化着色器和效果程序集代码。

一直 说明
D3DXSHADER_DEBUG
在着色器编译期间插入调试文件名、行号和类型和符号信息。
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
强制编译器针对像素着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并启用调试。
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
强制编译器针对顶点着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并启用调试。
D3DXSHADER_SKIPVALIDATION
不要根据已知功能和约束验证生成的代码。 仅当编译已知适用于 (的着色器时,才建议使用此选项,即在不使用此选项之前编译的着色器) 。 着色器始终由运行时验证,然后再将着色器设置为设备。

注解

效果系统将在以下函数调用时使用 分析器标志

效果系统将在以下函数调用时使用 编译器标志

此外,可以通过调用 D3DXCreateEffect (或 D3DXCreateEffectFromFileD3DXCreateEffectFromResource) 来创建效果时,可以使用编译器标志

  • 如果传入未编译的 .fx 文件,则效果系统将在编译过程中使用标志输入参数。
  • 如果传入编译效果,效果系统将忽略编译器标志,因为它们不需要加载效果。

效果系统将在以下函数调用时使用 汇编程序标志

编译器标志汇编程序标志 应用于不正确的 API 将失败着色器验证。 使用 DirectX 错误查找工具 (DXErr.exe) 检查函数中的 Direct3D 错误代码返回值,以帮助跟踪此错误。 可以从 DirectX SDK 获取DXErr.exe并了解它。 有关 DirectX SDK 的信息,请参阅 DirectX SDK 在哪里?

要求

要求 Value
标头
D3dx9shader.h

另请参阅

D3DX 常量