在POSIX系统上,可以使用VkImportMemoryFdInfoKHR
通过文件描述符从其他API导入内存对象(它使用VkImportMemoryWin32HandleInfoKHR
在Windows上的工作方式类似(。导入内存对象后,Vulkan 是否允许使用vkFreeMemory
释放底层内存,或者只能由分配它的 API 释放内存?感谢您的帮助!
Vulkan 不仅被允许释放VkDeviceMemory
对象;它被要求这样做。当您将内存导入 Vulkan 时,规范很清楚 Vulkan 现在拥有该句柄:
描述符导入内存会将文件描述符的所有权从应用程序转移到 Vulkan 实现。成功导入后,应用程序不得对文件描述符执行任何操作。
因此,您不能再在该文件描述符上使用常规命令。Vulkan 拥有它,调用它vkFreeMemory
不是可选的:
当从VkDevice对象检索到的所有VkQueue对象都处于空闲状态,并且从它们创建的所有对象都已销毁时,可以销毁这些对象。这包括以下对象:
。
- Vk设备内存
对于作为内存导入操作结果分配VkDeviceMemory
对象没有例外。
当然,现在您可以在碰巧与同一内存通信的不同 FD 上执行操作(您甚至可以使用vkGetMemoryFdKHR
来执行此操作(。但是您导入的特定 FD 归 Vulkan 所有。释放内存会释放文件描述符;它不会影响内存本身。