C++ 何时使用vkCmd*函数的参数?

C++ 何时使用vkCmd*函数的参数?,c++,vulkan,C++,Vulkan,一些vkCmd*函数指定何时使用某些参数。例如,在VKCMDBindDescriptorSet的文档中: PdynamicOffset的内容在 VKCMDBindDescriptorSet的执行 然而,其中大多数没有澄清。vkCmd*调用期间是否使用了所有参数?例如,在以下代码中: void copyHelper() { VkBufferCopy copy_region = {...}; vkCmdCopyBuffer(cmd_buffer, from_buffer, to_buffer

一些
vkCmd*
函数指定何时使用某些参数。例如,在
VKCMDBindDescriptorSet
的文档中:

PdynamicOffset的内容在 VKCMDBindDescriptorSet的执行

然而,其中大多数没有澄清。
vkCmd*
调用期间是否使用了所有参数?例如,在以下代码中:

void copyHelper() {
  VkBufferCopy copy_region = {...};
  vkCmdCopyBuffer(cmd_buffer, from_buffer, to_buffer, 1, &copy_region);
}
调用
copyHelper()
后,
copy\u region
不再在作用域中,尽管尚未提交
cmd\u buffer
。我是否需要将
copy_region
存储在某个地方,以便它保持有效?还是在调用
vkCmdCopyBuffer
时会立即使用它?剩下的
vkCmd*
函数呢


谢谢。

没有关于每个命令的说明,因为所有命令都是在以下总括语句下运行的:

应用程序拥有的内存的所有权会立即通过传递给它的任何Vulkan命令获得。此类内存的所有权必须在命令持续时间结束时释放回应用程序,以便应用程序可以在获取该内存的所有命令返回后更改或释放该内存

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

请注意,“持续时间”的定义如下:

Vulkan命令的持续时间是指调用该命令和将其返回给调用方之间的时间间隔


这在多线程中很重要。不要让另一个线程弄乱传递给函数的内存。@ZanLynx,这在2.6中得到了进一步的澄清。线程行为:“同样,应用程序必须避免应用程序拥有的内存的任何潜在数据危险,这些内存的所有权由Vulkan命令临时获取。虽然应用程序拥有的内存的所有权仍然是通过命令获得的,但实现可以在任何点读取内存,也可以在任何点写入非
const
限定内存。引用非
const
合格应用程序拥有内存的参数在规范中未明确标记为外部同步。”