vulkan API 复制了啥?

Posted

技术标签:

【中文标题】vulkan API 复制了啥?【英文标题】:What does vulkan API copy?vulkan API 复制了什么? 【发布时间】:2019-05-27 16:15:15 【问题描述】:

当应用程序调用 Vulkan API 命令时,在某些情况下,会传递指向应用程序拥有的内存的指针。 Vulkan 是否曾经存储过传递给它的此类指针?你怎么知道的?

例如,让我们以vkCmdWaitEvents 命令为例。我将pEvents 指针传递给VkEvent 的数组。在vkCmdWaitEvents 返回后,我可以立即删除该数组吗?还是我必须等到该等待已执行并且封闭的 CommandBuffer 已被销毁?即 vulkan 是否获取数组的副本,还是仅存储指向数组第一个元素的指针?你怎么知道是哪个?

【问题讨论】:

When can I free resources and structures passed to a vulkan vkCreateXXX function?的可能重复 【参考方案1】:

从来没有。

To quote the spec

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

只有当指针用作pUserData 用于VkDebugReportCallbackCreateInfoEXT 或分配回调之类的回调时,指针必须在多次调用中保持有效。

【讨论】:

那是因为pUserData不是“记忆”而只是荣耀的int,所以也不例外。

以上是关于vulkan API 复制了啥?的主要内容,如果未能解决你的问题,请参考以下文章

没有任何秘密的 API:Vulkan* 简介

Vulkan API基本概念

[学习Vulkan之一] 初识Vulkan

初识Vulkan

初识Vulkan

使用 Vulkan * API 并行渲染对象