【发布时间】:2018-12-26 08:01:53
【问题描述】:
vulkan 文档提到,与使用屏障(即vkCmdPipelineBarrier)移动它们相比,渲染通道中的移动图像布局(参见VkAttachmentDescription 结构)是首选。我可以理解,因为后者引入了限制并行执行的同步点。
现在考虑一个典型的例子:从VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL 到VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL 的转换。在这种情况下,资源将在着色器中读取,但为了安全地执行此操作,有必要将颜色附件的写入与着色器中的读取同步。换句话说,无论如何我们都需要使用屏障,并且在渲染过程中移动布局似乎根本没有任何优势。
能以某种方式详细解释这一切是如何运作的吗?在哪些情况下,在渲染通道中移动布局具有真正的优势?是否存在不需要进一步同步的(实际)布局更改?
【问题讨论】:
-
这叫做“过渡”而不是“移动”。
-
我可以得到规范中推荐的报价。我好像没找到。
-
我明白了,它确实不在规格中。我从 Vulkan 编程指南中得到了这个。那本书也使用了“移动”而不是“过渡”。
-
您可以(甚至应该)使用渲染通道依赖项在渲染通道内部和之后同步操作,而不是管道屏障。它们正是为此目的而设计的。
标签: vulkan