从另一个 API 导入到 Vulkan 的内存可以由 Vulkan 释放吗?



在POSIX系统上,可以使用VkImportMemoryFdInfoKHR通过文件描述符从其他API导入内存对象(它使用VkImportMemoryWin32HandleInfoKHR在Windows上的工作方式类似(。导入内存对象后,Vulkan 是否允许使用vkFreeMemory释放底层内存,或者只能由分配它的 API 释放内存?感谢您的帮助!

Vulkan 不仅被允许释放VkDeviceMemory对象;它被要求这样做。当您将内存导入 Vulkan 时,规范很清楚 Vulkan 现在拥有该句柄:

从文件

描述符导入内存会将文件描述符的所有权从应用程序转移到 Vulkan 实现。成功导入后,应用程序不得对文件描述符执行任何操作。

因此,您不能再在该文件描述符上使用常规命令。Vulkan 拥有它,调用它vkFreeMemory不是可选的:

当从VkDevice对象检索到的所有VkQueue对象都处于空闲状态,并且从它们创建的所有对象都已销毁时,可以销毁这些对象。这包括以下对象:

  • Vk设备内存

对于作为内存导入操作结果分配VkDeviceMemory对象没有例外。

当然,现在您可以在碰巧与同一内存通信的不同 FD 上执行操作(您甚至可以使用vkGetMemoryFdKHR来执行此操作(。但是您导入的特定 FD 归 Vulkan 所有。释放内存会释放文件描述符;它不会影响内存本身。

最新更新