D3DXSHADER 标志

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

分析程序标志

在创建效果编译器时,仅在效果编译) 之前,效果系统 (使用分析时间标志。 例如,可以使用 D3DXSHADER_PACKMATRIX_COLUMNMAJOR 创建编译器对象,然后将该编译器对象与不同的编译器标志重复用于生成专用代码。

返回的常量 说明
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
除非明确指定,否则矩阵将按列主顺序打包, (每个向量在传递给着色器或从着色器传递时,每个向量都位于单个列) 中。 这通常更有效,因为它允许使用一系列点积执行矢量矩阵乘法。
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
除非明确指定,否则矩阵将按行主顺序打包, (每个向量在传递给着色器或从着色器传递时,每个向量都位于单个行) 中。

编译器标志

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

下表详细介绍了 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 在哪里?

要求

要求
标头
D3dx9shader.h

另请参阅

D3DX 常量