同步两个渲染通道:采样的颜色附件?

And*_*zos 5 vulkan

在 Vulkan 中,假设我有两个渲染通道:

  1. 第一个输出到图像作为其颜色附件。
  2. 第二个样本来自其片段着色器的同一图像(即通过组合图像采样器)。

渲染通道按该顺序提交。

同步这两个渲染通道以使第二个渲染通道在第一个渲染通道写入之前不会读取的正确方法是什么?

在它们之间的图像上创建图像管道屏障是否必要和/或足够?

Jes*_*all 7

它们之间有一个图像内存屏障是必要且充分的:

  1. 执行障碍:您需要确保VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT在所有第一个渲染通道颜色附件写入 ( ) 完成之前,第二个渲染通道片段着色器 ( ) 不会开始执行VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT

  2. 内存屏障:您需要确保第一个渲染通道颜色附件写入 ( VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)对于第二个渲染通道图像采样指令 ( )可用可见VK_ACCESS_SHADER_READ_BIT

  3. 布局转换:您需要将图像的布局从 更改VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMALVK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL

所有这些都可以在vkCmdPipelineBarrier一个VkImageMemoryBarrier. VkSubpassDependency或者,您可以在两个渲染通道之一(使用dstSubpasssrcSubpass设置为VK_SUBPASS_EXTERNAL)以及附件的oldLayout和字段上使用 a newLayout