vulkan - 何时应该释放从另一个 API 导入到 Vulkan 的 VkDeviceMemory 对象?
问题描述
请注意,这主要是这篇文章的后续问题:从另一个 API 导入到 Vulkan 的内存可以被 Vulkan 释放吗?(无需阅读即可理解问题,但可能很有趣)
VK_KHR_external_memory*
可以使用扩展系列从其他 API 将内存对象导入 Vulkan 。正如@Nicol Bolas 在上一篇文章中所解释的,所有内存对象都需要在销毁之前释放VkDevice
,无论它们是否被导入。当导入的内存对象被释放时,我可以想到两种选择:
- 当
vkFreeMemory
被调用时,给定的区域被全局释放(如函数名所示)并且可以在调用后被任何应用程序使用 - 驱动程序知道内存对象已导入并且可能正在被另一个应用程序使用,因此内存区域未标记为可用
我认为假设 2 是正确的,但如果是,函数名称vkFreeMemory
将具有误导性。我在规范中找不到任何关于此的内容,所以我想我会在这里问。
解决方案
导入pNext
结构将vkAllocateMemory
语义更改为导入操作。常识暗示vkFreeMemory
同样受到影响。即它只是取消导入内存。这样你也不会破坏其他 API 的 OO 设计。简单地说,(真正)分配内存的 API 也将取消分配它。
如果您是一名训练有素的工程师,直接阅读规范,但仍然不明白,那么您可能不是唯一一个。如果您在KhronosGroup/Vulkan-Docs上报告这类事情,我会更喜欢(如果这是您的事情,他们甚至接受补丁)。这样,每个人都会得到修复。
推荐阅读
- android - 有没有办法为android中的软键盘外观提供动画?
- python - Kivy - 边框和字体粗细
- windows - 注册的 I/O 套接字和 Tcp 窗口大小
- authorization - 有没有办法通过使用 Keycloak 休息端点从 Keycloak 服务器获取一组资源详细信息
- pointers - 当我传递一个指针时,我失去了该接口上所有可用的方法
- python - 登录(请求,用户)功能在 django.contrib.auth 中不起作用
- python - 从 ctypes.c_void_p 对象获取 memoryview 对象
- android - 无需点击通知即可从 Fragment 中的 FCM 通知中获取意图数据
- mysql - 从 JavaScript 类返回 MySql 结果
- mysql - 加入第二个表并选择第一个条目