Direct3D 12中的W缓冲区

时间:2020-04-24 11:33:12

标签: buffer direct3d12

在D3D10文档上是一个list,其中显示了从D3D9到D3D10不推荐使用的功能。它说不再支持W缓冲,而应该使用高精度深度缓冲区/ Z缓冲区。我怀疑Direct3D 11和12也不能(完全)支持它。但是,有什么方法可以在Direct3D 12中使用W缓冲区吗?

1 个答案:

答案 0 :(得分:1)

Direct3D 9中的“ W缓冲”功能是旧版固定功能管道的一部分。在Direct3D 10和更高版本中,您只能使用可编程着色器管道(或对于DirectX 11+ DirectCompute着色器管道)。因此,“ w-buffering”硬件功能不相关。当人们使用16位深度缓冲区时,Direct3D 9时代的硬件也存在很多问题。

在可编程着色器模型中,取决于您的着色器是使用常规z值还是线性化深度值来计算深度值,并设置适当的深度/模板状态。请注意,您需要使用SV_DepthGreaterSV_DepthLessEqual而不是SV_Depth才能避免丢失“早期z拒绝”优化。

有关该主题的详细讨论,请参见this blog postthis post

TL; DR:大多数人只使用DXGI_FORMAT_D32_FLOAT而不必担心。