传输写入命令之间的管道壁垒

时间:2019-03-10 14:18:05

标签: vulkan

我们有两个传输命令,vkCmdFillBuffer()后跟vkCmdCopyQueryPoolResults()。传输命令将写入重叠的缓冲区范围。

为了避免写后写的危害,在命令之间是否需要一个管道屏障?

Vulkan是否对在同一管道阶段执行的命令提供任何保证?

1 个答案:

答案 0 :(得分:3)

当然,您几乎总是必须在Vulkan中进行同步。 Vulkan进行隐式同步的地方很少。

您对管线阶段有错误的直觉。命令毫不费力地“到达”管道阶段。所有命令都从VK_PIPELINE_STAGE_TOP_OF_PIPE开始(它们以提交顺序“到达”)。然后(没有同步),无法确定哪个命令将进入下一个管道阶段。没有显式的同步原语就没有秩序。规范中会说“执行队列操作可能重叠或发生故障”。

因此,如果没有同步,vkCmdCopyQueryPoolResults甚至可能会在vkCmdFillBuffer之前发生,我认为您不希望这样做。如果它们同时发生,那就更糟了。然后,数据可能包含来自两个源(或来自两个源)的一些混乱的写入。结果将是不确定的。