设备组

在 Vulkan 1.1 中提升为核心

设备组是将多个物理设备(单供应商)表示为单个逻辑设备的一种方式。例如,如果一个应用程序在单个系统中具有两个相同的 GPU,并通过一些供应商提供的桥接接口连接,一种方法是在 Vulkan 中创建两个逻辑设备。这里的问题是,两个 VkDevice 对象之间可以共享和同步的内容存在限制,这并非坏事,但有些使用场景中,应用程序可能希望合并两个 GPU 之间的内存。设备组的设计就是为了这种使用场景,让应用程序可以为单个 VkDevice 创建“子设备”。使用设备组,像 VkCommandBuffersVkQueue 这样的对象不会绑定到单个“子设备”,而是由驱动程序管理在哪个物理设备上运行。设备组的另一个用途是替代帧呈现系统,其中每个帧都由不同的“子设备”显示。

有两个扩展,VK_KHR_device_groupVK_KHR_device_group_creation。之所以有两个单独的扩展,是因为扩展要么是“实例级扩展”,要么是“设备级扩展”。由于设备组需要与实例级调用以及设备级调用交互,因此创建了两个扩展。还有一个匹配的 SPV_KHR_device_group 扩展,添加了 DeviceGroup 作用域和新的 DeviceIndex 内置类型到着色器,允许着色器控制每个逻辑设备要执行的操作。如果使用 GLSL,还有一个 GL_EXT_device_group 扩展,它为所有着色器类型引入了一个 highp int gl_DeviceIndex; 内置变量。