什么时候应该释放从另一个 API 导入到 Vulkan 的 VkDeviceMemory 对象?

When should VkDeviceMemory objects imported to Vulkan from another API be freed?

请注意,这主要是此 post 的后续问题:Can memory imported to Vulkan from another API be freed by Vulkan?(无需阅读即可理解问题,尽管如此可能很有趣)

可以使用 VK_KHR_external_memory* 系列扩展将内存对象从其他 API 导入 Vulkan。正如@Nicol Bolas 在之前 post 中所解释的,所有内存对象都需要在销毁 VkDevice 之前被释放,无论它们是否被导入。有两个选项我可以想到释放导入的内存对象时会发生什么:

我认为假设 2 是正确的,但如果是这样,函数名称 vkFreeMemory 就会产生误导。我在规范中找不到关于此的任何信息,所以我想我会在这里问一下。

Import pNext 结构将 vkAllocateMemory 语义更改为导入操作。常识意味着 vkFreeMemory 受到同样的影响。 IE。它只是取消导入内存。这样你也不会破坏其他 API 的 OO 设计。简单地说,(真正)分配内存的 API 也将取消分配它。

如果你是一名训练有素的工程师,直接阅读规范,仍然不明白,很可能你不是唯一的。如果您在 KhronosGroup/Vulkan-Docs 报告此类事情,我会更愿意(如果您愿意,他们甚至会接受补丁)。这样它就会为每个人修复。