vkCmdPipelineBarrier没有获取任何vkPipeline作为参数。所以我想知道vkCmdPipelineBarrier应用于哪个管道。
在命令缓冲区中先前调用的vkCmdBindPipeline命令中指定的那个?如果在命令缓冲区中没有指定管道怎么办?
答案 0 :(得分:3)
它不适用于任何特定的管道对象;它适用于执行操作命令的管道阶段。管道对象导致动作命令(渲染等)生成管道阶段命令,但这最多只是间接关联。
障碍是同步命令;因此,它们具有源范围和目标范围,其间有障碍苹果。对于vkCmdPipelineBarrier
,源范围(通常)是在屏障调用之前给予队列的所有命令。这些命令可能位于当前命令缓冲区或先前在同一VkSubmitInfo
批次中提交的CB或先前vkQueueSubmit
次呼叫中提交的CB中。
目标范围(通常)是屏障调用后给予队列的所有命令。同样,这些命令可以是同一命令缓冲区中的命令,同一批次中随后提交的CB,也可以是后续vkQueueSubmit
调用中提交的CB。
对于子通道自依赖性障碍,源作用域是当前子通道中的所有先前提交的命令(因此,通过传递属性,当前子通道所依赖的所有命令),并且目标作用域是随后提交的所有命令在同一个子通道内(因此,通过传递属性,所有依赖于当前子通道的命令)。