对于更新命令缓冲区的情况,vulkan命令缓冲区同步

时间:2019-11-27 06:07:03

标签: vulkan

假设我们有3个命令缓冲区A,B和C。所有缓冲区css在创建时都启用。依赖关系如下:

  • B-> A
  • C-> B,交换链中的下一张图片

它们之间的同步是通过信号量完成的。在大多数时间里,我可以预先创建A,B和C,然后将它们一个接一个地提交到渲染循环中的渲染队列。在某个时间点,我想修改命令缓冲区A。但是,问题是几个A已提交到渲染队列中。我认为那时渲染队列可能看起来像

A B C A B

我无法修改命令缓冲区A,因为它正在由GPU执行或排队。最幼稚的方法是在CPU端调用VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT以等待所有CB完成。然后,我可以修改A并继续回到渲染序列。此方法的问题在于它将等待所有CB完成。我认为,我只需要等待队列中的所有操作完成,而不是等待所有CB。有可能做到吗?是否有更好的方法来修改A而无需调用vkQueueWaitIdle

1 个答案:

答案 0 :(得分:2)

请勿修改命令缓冲区。创建一个新的并记录到其中。无论是命令缓冲区对象A还是其他替代命令缓冲区对象A'都没关系。重要的是您记录在其中的命令。

在任何情况下,知道何时使用命令缓冲区(或其某些集合)完成操作的典型方法是在提交队列时使用围栅。栅栏的纹理特别粗糙,但是您可以从CPU查询有关栅栏状态的信息。

相关问题