D3DXSHADER 标志
D3DXSHADER 标志用于分析、编译或组合着色器。
分析程序标志
在创建效果编译器时,仅在效果编译) 之前,效果系统 (使用分析时间标志。 例如,可以使用 D3DXSHADER_PACKMATRIX_COLUMNMAJOR 创建编译器对象,然后将该编译器对象与不同的编译器标志重复用于生成专用代码。
返回的常量 | 说明 |
---|---|
|
除非明确指定,否则矩阵将按列主顺序打包, (每个向量在传递给着色器或从着色器传递时,每个向量都位于单个列) 中。 这通常更有效,因为它允许使用一系列点积执行矢量矩阵乘法。 |
|
除非明确指定,否则矩阵将按行主顺序打包, (每个向量在传递给着色器或从着色器传递时,每个向量都位于单个行) 中。 |
编译器标志
DirectX 10 HLSL 编译器现在是默认编译器。 有关详细信息 ,请参阅效果编译器工具 。
下表详细介绍了 Direct3D 9 和 Direct3D 10 中可用的标志。 标志的值是等效的 fxc 选项。
常量/值 | 说明 |
---|---|
|
这是编译器避免使用流控制指令的提示。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
在着色器编译期间插入调试文件名、行号以及类型和符号信息。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
将ps_1_x着色器编译为ps_2_0。 指定ps_1_x目标的效果将改为编译为ps_2_0目标,因为这是 DirectX 10 随附的着色器编译器版本支持的最低着色器版本。 与更高级别的编译目标一起使用时,此标志无效。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
强制编译器针对像素着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并打开调试。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
强制编译器针对顶点着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并打开调试。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
禁用可能导致编译的着色器程序的输出不同于使用 DirectX 9 着色器编译器编译的程序的输出的优化,因为浮点数学精度小。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
禁用预制片。 编译器不会提取静态表达式,以便在主机 CPU 上进行计算。 此外,编译器在编译独立函数时不会放飞任何表达式。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
最低优化级别。 可能会生成较慢的代码,但速度会更快。 这在高度迭代着色器开发周期中可能很有用。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
第二最低优化级别。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
第二高优化级别。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
最高优化级别。 将生成可能的最佳代码,但执行此操作可能需要更长的时间。 这对于性能是最重要的因素的应用程序的最终生成非常有用。 Direct3D 9 - 否 Direct3D 10 - 是 |
|
强制结果着色器中的所有计算都以部分精度进行。 这可能会导致在某些硬件上更快地评估着色器。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
这是编译器首选使用流控制指令的提示。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
指示编译器在代码生成过程中跳过优化步骤。 除非尝试隔离代码中的问题并且怀疑编译器,否则不建议使用此选项。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
不要根据已知功能和约束验证生成的代码。 仅当编译已知可工作的着色器时,才建议使用此选项 (也就是说,以前编译的着色器没有此选项) 。 在将着色器设置为设备之前,始终由运行时对其进行验证。 Direct3D 9 - 是 Direct3D 10 - 是 |
|
启用原始 Direct3D 9 HLSL 编译器的使用。 OCT2006_d3dx9_31_x86.cab或OCT2006_d3dx9_31_x64.cab必须作为应用程序重新设置的一部分包含在内。 在不使用升级标志ps_2_0的情况下编译ps_1_x着色器需要此标志。 获取 ID3DXEffectCompiler 接口时指定此标志会导致后续通过此对象调用 CompileEffect 和 CompileShader 以使用旧编译器。 Direct3D 9 - 是 Direct3D 10 - 否 |
汇编程序标志
效果系统使用汇编程序标志来优化着色器和效果程序集代码。
返回的常量 | 说明 |
---|---|
|
在着色器编译期间插入调试文件名、行号以及类型和符号信息。 |
|
强制编译器针对像素着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并启用调试。 |
|
强制编译器针对顶点着色器的下一个最高可用软件目标进行编译。 此标志还会关闭优化并启用调试。 |
|
不要根据已知功能和约束验证生成的代码。 仅当编译已知可工作的着色器时,才建议使用此选项 (也就是说,以前编译的着色器没有此选项) 。 在将着色器设置为设备之前,始终由运行时对其进行验证。 |
备注
当由以下函数调用时,效果系统将使用 分析器标志 :
当由以下函数调用时,效果系统将使用 编译器标志 :
- D3DXCompileShader (或 D3DXCompileShaderFromFile 或 D3DXCompileShaderFromResource)
- CompileEffect (或 CompileShader)
此外,还可以通过调用 D3DXCreateEffect (或 D3DXCreateEffectFromFile 或 D3DXCreateEffectFromResource) 来创建效果时使用编译器标志。
- 如果传入未编译的 .fx 文件,则效果系统将在编译期间使用标志输入参数。
- 如果传入编译效果,效果系统将忽略编译器标志,因为它们不需要加载效果。
当由以下函数调用时,效果系统将使用 汇编程序标志 :
将 编译器标志 或 汇编程序标志 应用于不正确的 API 将失败着色器验证。 使用 DirectX 错误查找工具 (DXErr.exe) 检查函数的 Direct3D 错误代码返回值,以帮助跟踪此错误。 可以从 DirectX SDK 获取DXErr.exe并了解它。 有关 DirectX SDK 的信息,请参阅 DirectX SDK 在哪里?。
要求
要求 | 值 |
---|---|
标头 |
|
另请参阅