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

时间:2018-07-08 23:45:17

标签: c++ vulkan

某些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*函数呢?

谢谢。

1 个答案:

答案 0 :(得分:8)

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

  

应用程序拥有的内存的所有权将通过传递给它的任何Vulkan命令立即获得。在命令执行结束时,必须必须将此类内存的所有权释放回应用程序,以便应用程序可以在所有获取它的命令已返回。

规范中的重点。函数必须在函数返回时使用您传递的所有内存的内容来完成实现。是void*之类的未格式化内存还是数据结构。

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

  

Vulkan命令的 duration 是指调用命令与返回给调用者之间的间隔。