如何保证 vkCmdPushConstants 的顺序?
How to guarantee ordering for vkCmdPushConstants?
我对 Vulkan 的理解是(除了少数例外)命令缓冲区内的命令执行基本上没有顺序保证:命令按顺序 提交 但它们不按顺序完成。
假设程序按顺序发出这三个命令:
vkCmdDraw
vkCmdPushConstants
vkCmdDraw
如果我理解正确,GPU 可以自由地重新排序这些,以便推送常量在两次绘制之前或之后得到更新。那是对的吗?如果是这样,是否意味着更新推送常量或描述符绑定等内容需要同步对象(如事件或管道屏障)?
有几种记录的命令。其中有状态命令和动作命令。状态命令设置状态以供稍后使用。动作指令:
consume the current state of the command buffer when they are recorded, and will execute state changes on the device as required to match the recorded state.
更具体地说:
The work involved in performing action commands is often allowed to overlap or to be reordered, but doing so must not alter the state to be used by each action command.
vkCmd/PushConstants
是状态命令;它将状态设置到命令缓冲区中。因此,后续的动作命令如 vkCmdDraw
将查看命令缓冲区中当前的状态。不允许重新排序影响此。
我对 Vulkan 的理解是(除了少数例外)命令缓冲区内的命令执行基本上没有顺序保证:命令按顺序 提交 但它们不按顺序完成。
假设程序按顺序发出这三个命令:
vkCmdDraw
vkCmdPushConstants
vkCmdDraw
如果我理解正确,GPU 可以自由地重新排序这些,以便推送常量在两次绘制之前或之后得到更新。那是对的吗?如果是这样,是否意味着更新推送常量或描述符绑定等内容需要同步对象(如事件或管道屏障)?
有几种记录的命令。其中有状态命令和动作命令。状态命令设置状态以供稍后使用。动作指令:
consume the current state of the command buffer when they are recorded, and will execute state changes on the device as required to match the recorded state.
更具体地说:
The work involved in performing action commands is often allowed to overlap or to be reordered, but doing so must not alter the state to be used by each action command.
vkCmd/PushConstants
是状态命令;它将状态设置到命令缓冲区中。因此,后续的动作命令如 vkCmdDraw
将查看命令缓冲区中当前的状态。不允许重新排序影响此。