如何在多个 VkDevice 之间共享缓冲区(或图像)?

How to share buffer (or image) between multiple VkDevice's?

我有一个应用程序只有一个 VkInstance。我也有相同的物理设备索引,但不同的 VkPhysicalDevice 个对象,因此不同的 VkDevice 个对象。与多个逻辑设备共享 VkBufferVkImage 的最简单和最正确的方法是什么?

我没有这样做,但也许可以尝试使用 VK_KHR_external_memory 扩展名。它允许您从 Vulkan 内存对象导出非 Vulkan 句柄,并在缓冲区或图像创建期间提供此类外部内存。

这样就可以创建一个内存对象,可以在逻辑设备之间"shared"。在一台设备中,您以正常方式创建 buffer/image 和内存对象。然后导出此内存以获得非 Vulkan 句柄。然后,在您的其余逻辑设备中,您指定要将外部存储器用于 buffer/image.

[编辑]

但是要共享一个内存对象,您必须使用与规范中指示的相同的物理设备:

only the same concrete physical device can be used when sharing memory