5
我一直在检查0123s中的drawsubpass示例(文件:API-Samples/drawsubpass/drawsubpasses.cpp)。模板通过写入颜色缓冲区吗?
在此示例中,调用第一个vkCmdDraw()时的主动子过程不具有颜色附件,但只有深度/模板附件。使用的片段着色器确实有一个输出变量。
阅读spec并没有帮助我理解这种用法是否“安全”,或者驱动程序如何处理它。
我一直在检查0123s中的drawsubpass示例(文件:API-Samples/drawsubpass/drawsubpasses.cpp)。模板通过写入颜色缓冲区吗?
在此示例中,调用第一个vkCmdDraw()时的主动子过程不具有颜色附件,但只有深度/模板附件。使用的片段着色器确实有一个输出变量。
阅读spec并没有帮助我理解这种用法是否“安全”,或者驱动程序如何处理它。
Vulkan 1.0.16似乎已经纠正了这一点。它明确表示不会执行大于子路径attachmentCount
或明确声明VK_ATTACHMENT_UNUSED
的附件索引。输出变量将是未定义的,但根据当前子通道的描述,不会写入任何内容。
这是一个非常好的问题。我在预期的地方花了几分钟时间阅读规范,但没有语言解释当片段着色器写入在子通道中没有附件的输出位置时发生的情况。
应该在第14.3节中说明,但这里没有任何内容。
你可能想file a Vulkan spec bug report.
我认为正确的行为是一样的OpenGL:有效地忽略这样的输出。
我想它只是被忽略。就像另一个[类似的情况](https://github.com/LunarG/VulkanSamples/issues/79)我已经注意到在同一个例子。 – hiddenbit
@hiddenbit:没有,在说明书中明确说明了这一点(与此特定问题不同)。不访问描述符的管道与* any *描述符集布局兼容。因此,具有任何描述符集合的良好定义的行为。 –
啊,是的,你是对的! – hiddenbit