创建子通道时什么时候应该使用 VK_ATTACHMENT_UNUSED?

When should I use VK_ATTACHMENT_UNUSED when creating subpasses?

如果我不需要子通道中的附件,我会包含附件并在VkSubpassDescription中相应地更新附件计数。

我看到 VK_ATTACHMENT_UNUSEDVkAttachmentReference.attachment 的可能值。它比原始路线提供了哪些功能?

(最初,我认为这可能是一种保留子通道之间附件值的方法,但 pPreserveAttachments 已经这样做了。)

片段着色器输出绑定到 Location 索引。这是子通道 pColorAttachments 数组的索引。

如果你有一个着色器,无论出于何种原因,写入位置 0 和 2,那么这意味着 pColorAttachments 必须有 3 个条目。条目索引 1 是 VK_ATTACHMENT_UNUSED.

现在,您的着色器为什么要这样做?好吧,可以在用于不同子通道的不同管道中使用相同的着色器模块。在一个子通道中,可能有 3 个附件,并且此着色器根本不写入位置 1(它关闭了对该附件的写入,作为管线设置的一部分)。在另一个子通道中,只有2个附件,但你想使用相同的着色器。

是的,理论上您可以使用专业化常量来更改 Location 索引。我不会说这是一个广泛使用或非常有用的功能。但没有理由不支持它。