模板传递是否写入颜色缓冲区?
Do stencil passes write to color buffer?
我一直在检查 LunarG's samples 中的 drawsubpasses 样本(文件:API-Samples/drawsubpasses/drawsubpasses.cpp)。
在此示例中,调用第一个 vkCmdDraw() 时的活动子通道没有颜色附件,只有 depth/stencil 附件。使用的片段着色器确实有一个输出变量。
阅读 spec 并没有帮助我理解这种用法是否是 "safe",或者驱动程序将如何处理它。
Vulkan 1.0.16 似乎已经纠正了这个问题。它明确表示不会对大于子通道 attachmentCount
或明确声明 VK_ATTACHMENT_UNUSED
的附件索引执行任何写入操作。根据当前子通道的描述,输出变量将是未定义的,但不会写入任何内容。
这是个很好的问题。我花了几分钟在预期的地方阅读规范,但没有语言解释当片段着色器写入子通道中没有附件的输出位置时会发生什么。 应该在 14.3 节中指定,但没有关于此的内容。
您可能想要file a Vulkan spec bug report.
我假设正确的行为与 OpenGL 相同:有效地忽略此类输出。
我一直在检查 LunarG's samples 中的 drawsubpasses 样本(文件:API-Samples/drawsubpasses/drawsubpasses.cpp)。
在此示例中,调用第一个 vkCmdDraw() 时的活动子通道没有颜色附件,只有 depth/stencil 附件。使用的片段着色器确实有一个输出变量。
阅读 spec 并没有帮助我理解这种用法是否是 "safe",或者驱动程序将如何处理它。
Vulkan 1.0.16 似乎已经纠正了这个问题。它明确表示不会对大于子通道 attachmentCount
或明确声明 VK_ATTACHMENT_UNUSED
的附件索引执行任何写入操作。根据当前子通道的描述,输出变量将是未定义的,但不会写入任何内容。
这是个很好的问题。我花了几分钟在预期的地方阅读规范,但没有语言解释当片段着色器写入子通道中没有附件的输出位置时会发生什么。 应该在 14.3 节中指定,但没有关于此的内容。
您可能想要file a Vulkan spec bug report.
我假设正确的行为与 OpenGL 相同:有效地忽略此类输出。