如何在多个 VkDevice 之间共享缓冲区(或图像)?
How to share buffer (or image) between multiple VkDevice's?
我有一个应用程序只有一个 VkInstance
。我也有相同的物理设备索引,但不同的 VkPhysicalDevice
个对象,因此不同的 VkDevice
个对象。与多个逻辑设备共享 VkBuffer
或 VkImage
的最简单和最正确的方法是什么?
我没有这样做,但也许可以尝试使用 VK_KHR_external_memory 扩展名。它允许您从 Vulkan 内存对象导出非 Vulkan 句柄,并在缓冲区或图像创建期间提供此类外部内存。
这样就可以创建一个内存对象,可以在逻辑设备之间"shared"。在一台设备中,您以正常方式创建 buffer/image 和内存对象。然后导出此内存以获得非 Vulkan 句柄。然后,在您的其余逻辑设备中,您指定要将外部存储器用于 buffer/image.
[编辑]
但是要共享一个内存对象,您必须使用与规范中指示的相同的物理设备:
only the same concrete physical device can be used when sharing memory
我有一个应用程序只有一个 VkInstance
。我也有相同的物理设备索引,但不同的 VkPhysicalDevice
个对象,因此不同的 VkDevice
个对象。与多个逻辑设备共享 VkBuffer
或 VkImage
的最简单和最正确的方法是什么?
我没有这样做,但也许可以尝试使用 VK_KHR_external_memory 扩展名。它允许您从 Vulkan 内存对象导出非 Vulkan 句柄,并在缓冲区或图像创建期间提供此类外部内存。
这样就可以创建一个内存对象,可以在逻辑设备之间"shared"。在一台设备中,您以正常方式创建 buffer/image 和内存对象。然后导出此内存以获得非 Vulkan 句柄。然后,在您的其余逻辑设备中,您指定要将外部存储器用于 buffer/image.
[编辑]
但是要共享一个内存对象,您必须使用与规范中指示的相同的物理设备:
only the same concrete physical device can be used when sharing memory