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

使用vulkan进行绘制调用之间的存储缓冲区同步

如何解决使用vulkan进行绘制调用之间的存储缓冲区同步

我正在使用存储缓冲区来存储片段着色器互锁的片段着色器的每个像素链接列表。在一个绘制调用中一切正常,但是在连续的绘制调用之间无法同步存储缓冲区。

我的理解是,您可以在片段着色器阶段的渲染过程中执行流水线屏障,但前提是它涉及绑定到帧缓冲区的图像。

在每次绘图调用之间我必须先调用vkCmdEndRenderPass然后先依次调用vkCmdPipelineBarrier然后vkCmdBeginRenderPass还是有更好的解决方案?

解决方法

在这种情况下,希望通过互锁操作本身完成同步。如果您的互锁不遵守原始顺序,那么您就不必关心原始顺序,因此不需要同步。如果您的互锁 关心原始顺序,那么互锁将强制执行原始顺序,因此不需要其他同步。

原始顺序定义了由一个绘制调用生成的图元在来自随后绘制调用的所有图元之前进行排序。因此,如果您要进行基元顺序互锁,那么根据定义,在一个渲染命令中来自基元的关键部分将在前一个关键部分之后进行排序。

因此没有障碍;您想要的是原始排序。

现在,如果您有一组仅需要关键部分并且不关心顺序的命令,但是后面一组本身只需要关键部分但需要先出现在 之后的命令,这是一个矛盾。第二组关心关于排序,因此他们应该使用原始排序,而不是无序。

请注意,为了使以前的写入可见,您需要coherent限定词。订购只保证订购。

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