何时消耗了vkCmd*函数的参数?

ale*_*bit 2 c++ vulkan

某些vkCmd*功能指定何时使用某些参数.例如,在以下文档中vkCmdBindDescriptorSets:

在执行vkCmdBindDescriptorSets期间立即消耗pDynamicOffsets的内容.

但是大多数人都没有澄清.vkCmd*呼叫期间是否消耗了所有参数?例如,在以下代码中:

void copyHelper() {
  VkBufferCopy copy_region = {...};
  vkCmdCopyBuffer(cmd_buffer, from_buffer, to_buffer, 1, &copy_region);
}
Run Code Online (Sandbox Code Playgroud)

打电话后copyHelper(),copy_region虽然cmd_buffer尚未提交,但不在范围内.我是否需要存储在copy_region某处才能保持有效?或者在通话时是否立即消耗vkCmdCopyBuffer?剩下的vkCmd*功能怎么样?

谢谢.

Nic*_*las 8

没有按命令说明,因为所有命令都在以下一揽子声明下运行:

应用程序拥有的内存的所有权立即被传入的任何Vulkan命令获取.必须在命令持续时间结束时将此类内存的所有权释放回应用程序,以便应用程序可以在获取它的所有命令都返回后立即更改或释放此内存.

重点是规范.必须使用函数返回时传递的任何内存的内容来完成实现.无论是未格式化的内存void*还是数据结构.

请注意,"持续时间"定义为:

Vulkan命令的持续时间是指调用命令和返回调用者之间的间隔.

  • @ZanLynx 2.6中进一步阐明了这一点.线程行为:"类似地,应用程序**必须**避免任何由Vulkan命令临时获取其所有权的应用程序拥有的内存的潜在数据危险.虽然应用程序拥有的内存的所有权仍由命令获取,但实现**可以**在任何时候读取内存,它**可以**在任何时候写入非`constst限定内存.引用非`constst`限定应用程序拥有内存的参数没有明确标记为_externally synchronized_ in规范." (2认同)