微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决同步两个渲染通道:颜色附件到采样?

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

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

渲染通道按该顺序提交。

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

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

解决方法

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

  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 完成。或者您可以在两个渲染通道之一(VkSubpassDependencydstSubpass 设置为 srcSubpass)以及附件的 VK_SUBPASS_EXTERNAL 和 {{1} } 字段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。