如何在不禁用深度测试的情况下读取延迟渲染的光照通道中的深度缓冲区?

How to read depth buffer in the lighting pass of deferred rendering without disabling depth test?

所以在延迟渲染的光照通道中。我需要光量的深度测试,但我不需要深度写入。而且我还需要知道深度缓冲区中的深度值。两者都是读操作。所以我认为将深度图像附加为 InputAttachment 和 DepthStencilAttachment 不会伤害任何人。但事实证明,InputAttachment 只接受 VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL 的图像,而 DepthStencilAttachment 不喜欢这种布局。

使用 VK_IMAGE_LAYOUT_GENERAL,或者更好的是 VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL 通过 VK_KHR_separate_depth_stencil_layouts 扩展(分别是 Vulkan 1.2)。这允许深度附件同时用作输入附件。