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

When are parameters to vkCmd* functions consumed?

本文关键字:参数 函数 vkCmd 何时使      更新时间:2023-10-16

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

pDynamicOffsets 的内容在以下期间立即使用。 执行 vkCmdBindDescriptorSets。

然而,他们中的大多数都没有澄清。vkCmd*调用期间是否消耗了所有参数?例如,在下面的代码中:

void copyHelper() {
VkBufferCopy copy_region = {...};
vkCmdCopyBuffer(cmd_buffer, from_buffer, to_buffer, 1, &copy_region);
}

调用copyHelper()后,copy_region不再在范围内,尽管尚未提交cmd_buffer。我是否需要将copy_region存储在某个地方以使其保持有效?还是在呼叫vkCmdCopyBuffer时立即消耗?其余的vkCmd*功能呢?

谢谢。

没有每个命令的说明,因为所有命令都在以下一揽子语句下运行:

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

规范中的强调。在函数返回时,必须使用您传递的任何内存的内容来完成实现。无论是未格式化的内存,如void*还是数据结构。

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

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