某些vkCmd*
函数指定何时使用或不使用某些参数。例如,在vkCmdBindDescriptorSets
的文档中:
pDynamicOffsets的内容在此期间立即被消耗 vkCmdBindDescriptorSets的执行。
但是大多数都不清楚。在vkCmd*
调用期间是否消耗了所有参数?例如,在以下代码中:
void copyHelper() {
VkBufferCopy copy_region = {...};
vkCmdCopyBuffer(cmd_buffer, from_buffer, to_buffer, 1, ©_region);
}
在调用copyHelper()
之后,copy_region
不在范围内,尽管尚未提交cmd_buffer
。我是否需要将copy_region
存储在某个地方以便保持有效?还是在调用vkCmdCopyBuffer
时立即消耗掉了?其余vkCmd*
函数呢?
谢谢。
答案 0 :(得分:8)
没有对每个命令的说明,因为所有命令都在以下总括语句下运行:
应用程序拥有的内存的所有权将通过传递给它的任何Vulkan命令立即获得。在命令执行结束时,必须必须将此类内存的所有权释放回应用程序,以便应用程序可以在所有获取它的命令已返回。
规范中的重点。函数必须在函数返回时使用您传递的所有内存的内容来完成实现。是void*
之类的未格式化内存还是数据结构。
请注意,“持续时间”定义为:
Vulkan命令的 duration 是指调用命令与返回给调用者之间的间隔。