vkCmdPipelineBarrier适用的管道是什么?

时间:2018-03-12 14:07:00

标签: vulkan

vkCmdPipelineBarrier没有获取任何vkPipeline作为参数。所以我想知道vkCmdPipelineBarrier应用于哪个管道。

在命令缓冲区中先前调用的vkCmdBindPipeline命令中指定的那个?如果在命令缓冲区中没有指定管道怎么办?

1 个答案:

答案 0 :(得分:3)

它不适用于任何特定的管道对象;它适用于执行操作命令的管道阶段。管道对象导致动作命令(渲染等)生成管道阶段命令,但这最多只是间接关联。

障碍是同步命令;因此,它们具有源范围和目标范围,其间有障碍苹果。对于vkCmdPipelineBarrier,源范围(通常)是在屏障调用之前给予队列的所有命令。这些命令可能位于当前命令缓冲区或先前在同一VkSubmitInfo批次中提交的CB或先前vkQueueSubmit次呼叫中提交的CB中。

目标范围(通常)是屏障调用后给予队列的所有命令。同样,这些命令可以是同一命令缓冲区中的命令,同一批次中随后提交的CB,也可以是后续vkQueueSubmit调用中提交的CB。

对于子通道自依赖性障碍,源作用域是当前子通道中的所有先前提交的命令(因此,通过传递属性,当前子通道所依赖的所有命令),并且目标作用域是随后提交的所有命令在同一个子通道内(因此,通过传递属性,所有依赖于当前子通道的命令)。