如何在Vulkan中读取模板缓冲区?

时间:2018-08-15 09:11:17

标签: graphics vulkan stencil-buffer

我有一个VK_FORMAT_D32_SFLOAT_S8_UINT格式的组合深度/模板图像。我正在尝试为其创建2个图像视图,以便可以使用它们在着色器中采样深度和模板值。创建视图时,我分别将图像纵横比标志设置为VK_IMAGE_ASPECT_DEPTH_BITVK_IMAGE_ASPECT_STENCIL_BIT,但是我只能成功采样深度纹理。模具图像视图创建良好,但我什至看不到它在着色器中的绑定(至少那是RenderDoc所说的)。验证层也没有错误或消息。

我需要使用用于缓冲区和模板视图的任何特定配置,还是要设置模板纹理视图并对其进行采样的其他任何考虑因素?

更新: 模板纹理未设置的问题是由我的代码中的错误引起的。现在,我可以看到它绑定在RenderDoc中,并在深度和模板组件之间切换(它们具有正确的内容)。所以现在的问题是,如何对组合的深度/模板图像的模板成分进行采样,因为采样时我只能得到模板清晰的颜色?

更新: 我最终设法通过使用具有VK_FORMAT_D32_SFLOAT_S8_UINT格式的缓冲区和具有VK_IMAGE_ASPECT_STENCIL_BIT方面的视图来使此工作正常。另外,在着色器中,我使用了usampler2DMS采样器和texelFetch来读取模板值(因为我正在使用多重采样)。 texelFetch将返回uint4值,并且可以从红色通道访问模板值。

0 个答案:

没有答案