我一直在LunarG's samples检查drawubpasses样本(文件:API-Samples / drawubpasses / drawnubpasses.cpp)。
在此示例中,调用第一个vkCmdDraw()时的活动子传递没有颜色附件,只有深度/模板附件。使用的片段着色器确实有一个输出变量。
阅读spec并不能帮助我了解这种用法是否安全"或驱动程序如何处理它。
答案 0 :(得分:2)
Vulkan 1.0.16似乎已经纠正了这一点。它明确表示不会对大于子attachmentCount
的附件索引执行写操作,或者显式声明VK_ATTACHMENT_UNUSED
。输出变量将是未定义的,但根据当前子通道的描述,不会写入任何内容。
这是一个非常好的问题。我花了几分钟阅读预期位置的规范,但是没有语言解释当片段着色器写入子通道中没有附件的输出位置时会发生什么。 应在第14.3节中指定,但没有任何相关内容。
您可能需要new event object
我假设正确的行为与OpenGL相同:有效地忽略这些输出。