这些 D3DCOMPILE 常量是什么意思?

What does those D3DCOMPILE constants mean?

在 D3DCompiler 库中有这些标志称为 "D3DCompile Constants",但是 Microsoft 给我们的关于它们的描述非常简短,很难正确理解它们的作用。我希望有人能够至少解释这三个是什么意思:

D3DCOMPILE_PARTIAL_PRECISION, D3DCOMPILE_NO_PRESHADER, D3DCOMPILE_ALL_RESOURCES_BOUND

那个文档页面很差。它只是放入 Markdown 页面的 D3DCompiler.h 条评论的内容。我将考虑提交一些编辑以至少对它有所帮助。这些标志中的大多数都是旧 D3DX 常量的别名,如 Microsoft Docs 中所列,目前它们在其中有更好的记录。

更新: Microsoft Docs 页面已更新。

D3DCOMPILE_PARTIAL_PRECISION标志相当于FXC的/Gpp开关,是D3DXSHADER_PARTIALPRECISION的别名。在某些情况下,它基本上将 float32 值视为 float16 并允许使用某些近似函数。

D3DCOMPILE_NO_PRESHADER标志相当于FXC的/Op开关,是D3DXSHADER_PARTIALPRECISION的别名。此功能已弃用,仅适用于旧版 Direct3D 9 时代的“效果”(FX)。请参阅 this Microsoft Docs page 了解这是关于什么的。

D3DCOMPILE_RESOURCES_MAY_ALIASD3DCOMPILE_ENABLE_UNBOUNDED_DESCRIPTOR_TABLESD3DCOMPILE_ALL_RESOURCES_BOUND 标志是 HLSL 选项,用于在对 DirectX 12 着色器模型 5.1 执行优化时通知 HLSL 编译器一些假设。

DirectX 12 的注意事项、D3DCompile 和 FXC.EXE 是旧版,仅支持 Shader Model 5.1。对于 DirectX12,您应该通过 DXIL 编译器和 DXC.EXE command-line 工具使用 Shader Model 6。参见 GitHub