vkCmdPipelineBarrier 适用于什么管道?

What is the pipeline a vkCmdPipelineBarrier applies to?

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

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

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

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

目标范围(通常)是在屏障调用后提供给队列的所有命令。同样,这些命令可能是同一命令缓冲区中的命令、同一批次中随后提交的 CB 中的命令,或者是在对 vkQueueSubmit.

的后续调用中提交的 CB 中的命令

对于子通道 self-dependency 障碍,源范围是当前子通道内所有先前提交的命令(因此,通过传递 属性,当前子通道所依赖的所有命令),并且目标范围是同一子通道中所有随后提交的命令(因此,通过传递 属性,所有依赖于当前子通道的命令)。