我想知道如何在d3d9中使用最小精度。DX11规范描述了将最小精度枚举添加到d3d9中。然而,当我用min16float关键字编写像素着色器并用fxc.exe翻译它时,它失败了,并报告";ps_3_0不支持最小精度";。那么,如何在d3d9中使用最小精度呢?
TL;DR:对于像素着色器3.0,请使用half
而不是min16float
。
Direct3D硬件功能级别9.x设备支持DirectX 11最低着色器精度功能。在功能级别9.x上,VS和PS可以具有不同的精度,这在AllOtherShaderStagesMinPrecision.AllOtherShaderStagesMinPrecision
字段中表示。
Direct3D 9着色器模型2.0仅要求像素着色器具有24位精度,并且在使用half
或_pp
类型时支持16位精度。对9.x功能级别配置文件的DirectX 11着色器精度功能支持利用了这一点。
请参阅Microsoft文档。