vulkan - 使用 vulkan 绘制调用之间的存储缓冲区同步
问题描述
我正在使用存储缓冲区来存储来自具有片段着色器互锁的片段着色器的每像素链表。在单个绘图调用中一切正常,但我无法在连续绘图调用之间同步存储缓冲区。
我的理解是,您可以在片段着色器阶段的渲染过程中执行管道屏障,但前提是它涉及绑定到帧缓冲区的图像。
vkCmdEndRenderPass
然后我必须vkCmdPipelineBarrier
在vkCmdBeginRenderPass
每次绘制调用之间调用还是有更好的解决方案?
解决方案
这种情况下的同步预计将通过互锁操作本身来完成。如果您的联锁不尊重原始顺序,那么您不应该关心原始顺序,因此不需要同步。如果您的联锁确实关心原始排序,那么原始排序将由联锁强加,因此不需要其他同步。
图元顺序定义了由一次绘制调用生成的图元在来自后续绘制调用的所有图元之前排序。因此,如果您正在执行原始顺序互锁,则根据定义,一个渲染命令中的原始关键部分将在前一个渲染命令的关键部分之后排序。
所以没有必要设置障碍;你想要的是原始排序。
现在,如果您有一组只需要关键部分且不关心顺序的命令,但是后面的一组命令本身只需要关键部分但需要在第一个之后出现,那是矛盾的。第二组确实关心排序,所以他们应该使用原始排序,而不是无序。
请注意,为了使以前的写入可见,您需要coherent
限定符。订购只保证订购。
推荐阅读
- javascript - HTML/JS 未捕获的引用错误
- r - 在 R 中使用条件 elseif 语句但不起作用
- excel - 从 Excel 导入访问类型转换失败
- c++ - 非常量左值引用
- python - Python API 返回 SONDecodeError("期望值", s, err.value)
- mysql - 为什么 PHPMyAdmin 在粘贴 SQL 时会抛出 403 错误
- c - 为 http 响应内容动态分配缓冲区时的奇怪行为
- php - 几个使用 PHP 获取文件的 Bootstrap Carousels
- python - matplotlib 包无法使用 tensorflow 导入
- excel - For循环问题中的VBA Excel IsError