【问题标题】:Synchronizing two render passes: color attachment to sampled?同步两个渲染通道:颜色附件到采样?
【发布时间】:2021-02-05 09:19:53
【问题描述】:

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

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

渲染通道按此顺序提交。

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

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

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    在它们之间有一个图像内存屏障是必要且足够的:

    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_OPTIMAL改为VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL

    所有这些都可以在vkCmdPipelineBarrier 中使用单个VkImageMemoryBarrier 完成。或者您可以在两个渲染通道之一上使用VkSubpassDependency(将dstSubpasssrcSubpass 设置为VK_SUBPASS_EXTERNAL)和附件的oldLayoutnewLayout 字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多