首页 > 解决方案 > 何时应该释放从另一个 API 导入到 Vulkan 的 VkDeviceMemory 对象?

问题描述

请注意,这主要是这篇文章的后续问题:从另一个 API 导入到 Vulkan 的内存可以被 Vulkan 释放吗?(无需阅读即可理解问题,但可能很有趣)

VK_KHR_external_memory*可以使用扩展系列从其他 API 将内存对象导入 Vulkan 。正如@Nicol Bolas 在上一篇文章中所解释的,所有内存对象都需要在销毁之前释放VkDevice,无论它们是否被导入。当导入的内存对象被释放时,我可以想到两种选择:

我认为假设 2 是正确的,但如果是,函数名称vkFreeMemory将具有误导性。我在规范中找不到任何关于此的内容,所以我想我会在这里问。

标签: vulkangpu

解决方案


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

如果您是一名训练有素的工程师,直接阅读规范,但仍然不明白,那么您可能不是唯一一个。如果您在KhronosGroup/Vulkan-Docs上报告这类事情,我会更喜欢(如果这是您的事情,他们甚至接受补丁)。这样,每个人都会得到修复。


推荐阅读