在子通道中读取和写入相同的(深度)附件

Reading and writing the same (depth) attachment in a subpass

我正在尝试为我的延迟渲染器使用光体积。但是我遇到了模板操作的问题。 现在我正在使用格式为 VK_FORMAT_D32_SFLOAT_S8_UINT 的 depth/stencil 附件。在照明子通道中,我需要读取深度以重建位置,并读取和写入模板以掩盖光体积。 对于照明子通道,我想添加 depth/stencil 作为输入附件和深度附件,但是这些需要不同的布局,这显然不可能同时进行。

现在我指的是同一个附件作为同一个子通道中的输入附件和深度附件。 作为输入附件,布局为 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,作为深度附件,布局为 VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL(没有验证错误?),我的模板操作未执行。

现在我可以为深度和模板创建两个不同的附件,但这可能会使用更多的内存,这也不是很好。所以我的问题是,如何设置可以读写相同 depth/stencil 附件的子通道? (也在单个管道内)

but these require different layout

废话;这就是 GENERAL 布局的用途。规范甚至明确提出了这一点:

An attachment used as both an input attachment and depth/stencil attachment must be in either the VK_IMAGE_LAYOUT_GENERAL or VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL layout

显然后者对你没有帮助;)