vkCmdPipelineBarrier 适用于什么管道?

alc*_*ado 1 vulkan

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

是在命令缓冲区中之前调用的 vkCmdBindPipeline 命令中指定的命令吗?如果命令缓冲区中尚未指定管道怎么办?

Nic*_*las 5

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

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

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

对于子通道自相关屏障,源范围是当前子通道内所有先前提交的命令(因此,根据传递属性,当前子通道所依赖的所有命令),目标范围是同一子通道内所有随后提交的命令子通道(因此,通过传递属性,所有命令都依赖于当前子通道)。