Vulkan:在规范中找不到有关保留附件的特定用例的信息

Vulkan: Can't find info on a particular usecase, regarding preserve attachments, in the Spec

想象一个用例,其中附件作为保留附件包含在 RenderPass 的第一个子通道中。我将“第一个子通道”定义为子通道 A,其中有一个具有 N 个子通道的 RenderPass,并且其子通道之间存在依赖关系,其中 A 必须首先执行。

现在,那个用例对我来说没有意义。然而,我在规范中寻找关于这一点的清晰信息,到目前为止,我还没有遇到任何禁止它的事情。在我的代码中,我现在通过在检测到断言失败时发出断言失败来处理这个问题。但是,我真的很想听 Spec 说这实际上不是 legal/sensical 要做的事情。我尽量避免做出假设。

如果有人知道我在哪里可以找到有关此用例的可靠信息,请指出。

保留附件以应对以下情况:

你有一个子通道 A 可以操纵附件。您有一个子通道 C,它使用 A 生成到该附件中的数据。因此,A 和 C 之间存在一些依赖关系。但是,您 有一个子通道 B,它依赖于其他一些由 A 生成的数据, 也依赖于 C(因此,A 和 C 的依赖关系可以基于 A->B 和 B->C 依赖关系隐含)。

也就是说,子通道 B 必须 在 A 和 C 之间执行。但是我们还要说子通道 B 本身 不使用A 为 C 生成的特定附件。

因为执行图需要 B 在 A 和 C 之间执行,任何实现此执行图的硬件都可能需要在子通道 B 中分配一些存储空间,以确保保留此附件的内容。特别是在基于图块的渲染器上,这种存储通常非常宝贵。因此,Vulkan API 要求 您在子通道 B 的定义中明确声明在 B 执行时需要保留来自 A 的附件,即使 B 不使用它任何事情。

这是唯一保留附件很重要的地方。尽管如此,Vulkan 规范中没有任何内容 禁止 在这种情况之外使用保留附件。您会在规范中找到禁止这样做的声明,只有关于在何处保留附件的声明 necessary.

现在,这并不意味着您应该将保留附件推送到任何地方。您应该在需要时使用它们,仅此而已。