vkCmdUpdateBuffer渲染传递同步之前?

时间:2020-02-04 06:04:41

标签: vulkan

执行以下操作:

vkCmdUpdateBuffer(c, uniform_buffer, ...);
vkCmdBeginRenderPass(c, ...);
vkCmdBindDescriptorSets(c, ..., uniform_buffer_descriptor, ...);
vkCmdDraw(c, ...);

(即vkCmdDraw将使用vkCmdUpdateBuffer刚刚更新的VkBuffer。)

...需要通过障碍或其他方式进行同步?还是在执行draw命令之前完成缓冲区更新?您是如何知道的?

2 个答案:

答案 0 :(得分:1)

是的,您需要一个障碍,以确保在缓冲区更新完成之前不会开始绘制,并确保一致性。命令按添加到命令缓冲区的顺序开始,但是可以同时运行,也可以不按顺序完成。除极少数情况外,任何时候只要您具有数据依赖(又称​​危险)格式,即写后读,写后写或写后阅读两个命令之间的内容,则需要显式地强制这些命令之间的顺序和一致性。

答案 1 :(得分:0)

Vulkan中大约只有两个具有隐式同步的系统。其他所有内容都必须由用户同步。

Le规范:

出于同步屏障的目的,此命令[vkCmdUpdateBuffer]被视为“传输”操作。