我正在将全屏效果转换为计算着色器,以便我可以利用片段着色器无法完成的某些计算功能。现在,这个全屏效果使用模板处理来避免写入不应该影响的像素,我想用我的计算着色器模仿这种行为。
我知道我可以将这些信息写入某个颜色通道,但我希望避免这种情况,而只是直接在计算着色器中读取模板位。但是,我找不到任何方法将D24S8缓冲区绑定到计算着色器,以便我实际上可以读取模板位。它似乎只提供深度信息。
有没有办法做到这一点?谷歌让我失望,因为在谈论采样深度值时,每个人都称它为深度/模板缓冲区。
答案 0 :(得分:1)
这是可能的。
确保将HLSL中的模板SRV声明为Texture2D<uint2>
,以便可以访问模板数据来源的绿色通道(G8)。
注意,由于Depth和Stencil是单独的SRV,因此您需要在HLSL中声明两个Texture2D,每个一个。例如:
Texture2D<float> depthBuffer; // Red contains depth.
Texture2D<uint2> stencilBuffer; // Green contains stencil. Red is unused.