graphics - Vulkan 可以释放从另一个 API 导入到 Vulkan 的内存吗?
问题描述
在 POSIX 系统上,可以使用文件描述符从其他 API 导入内存对象VkImportMemoryFdInfoKHR
(在 Windows 上使用类似VkImportMemoryWin32HandleInfoKHR
)。导入内存对象后,是否允许 Vulkan 使用 释放底层内存vkFreeMemory
,还是只能由分配它的 API 释放内存?谢谢您的帮助!
解决方案
Vulkan 不仅被允许释放VkDeviceMemory
对象;必须这样做。当您将内存导入 Vulkan 时,规范清楚地表明 Vulkan 现在拥有该句柄:
从文件描述符导入内存会将文件描述符的所有权从应用程序转移到 Vulkan 实现。成功导入后,应用程序不得对文件描述符执行任何操作。
因此,您不再可以在该文件描述符上使用常规命令。Vulkan 拥有它,并且调用vkFreeMemory
它不是可选的:
VkDevice 对象可以在从它们检索到的所有 VkQueue 对象都空闲并且从它们创建的所有对象都被销毁时被销毁。这包括以下对象:
...
- 虚拟设备内存
VkDeviceMemory
作为内存导入操作的结果分配的对象也不例外。
当然,现在您可以在恰好与同一内存通信的不同 FD 上执行操作(您甚至可以vkGetMemoryFdKHR
这样做)。但是您导入的特定 FD 将归 Vulkan 所有。释放内存释放文件描述符;它不会影响内存本身。
推荐阅读
- angular - 以角度预览所选图像
- linux - Linux RS485串口通信耗时
- kubernetes - Kubernetes Pod 中容器的资源分配
- c++ - 当我在使用 tools\make cc 编译 OR-Tools 中构建 OR-Tools 的源代码时,未找到第三方 SCIP 文件
- php - 根据自定义插件配置的 Moodle 答案格式?
- javascript - 显示/隐藏基于关闭输入数字范围的选择 jQuery
- django - Django TypeError:未提供异常消息
- r - 使用 lapply 在 R 中按两列分组的循环回归模型
- swift - 是否可以在 Apple Watch 模拟器中播放音频?- Xcode 10.1
- javascript - 在 chrome 扩展中使用 fetch 不会在请求中包含 referer 标头