1// Copyright 2016-2023 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5include::{generated}/meta/{refprefix}VK_KHR_device_group.adoc[]
6
7=== Other Extension Metadata
8
9*Last Modified Date*::
10    2017-10-10
11*IP Status*::
12    No known IP claims.
13*Interactions and External Dependencies*::
14  - This extension requires
15    {spirv}/KHR/SPV_KHR_device_group.html[`SPV_KHR_device_group`]
16  - Promoted to Vulkan 1.1 Core
17*Contributors*::
18  - Jeff Bolz, NVIDIA
19  - Tobias Hector, Imagination Technologies
20
21=== Description
22
23This extension provides functionality to use a logical device that consists
24of multiple physical devices, as created with the
25`apiext:VK_KHR_device_group_creation` extension.
26A device group can allocate memory across the subdevices, bind memory from
27one subdevice to a resource on another subdevice, record command buffers
28where some work executes on an arbitrary subset of the subdevices, and
29potentially present a swapchain image from one or more subdevices.
30
31=== Promotion to Vulkan 1.1
32
33ifdef::VK_KHR_swapchain[]
34The following enums, types and commands are included as interactions with
35`apiext:VK_KHR_swapchain`:
36
37  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
38  * ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
39  * ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
40  * ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
41  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
42  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
43  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
44  * elink:VkDeviceGroupPresentModeFlagBitsKHR
45  * slink:VkDeviceGroupPresentCapabilitiesKHR
46  * slink:VkImageSwapchainCreateInfoKHR
47  * slink:VkBindImageMemorySwapchainInfoKHR
48  * slink:VkAcquireNextImageInfoKHR
49  * slink:VkDeviceGroupPresentInfoKHR
50  * slink:VkDeviceGroupSwapchainCreateInfoKHR
51  * flink:vkGetDeviceGroupPresentCapabilitiesKHR
52  * flink:vkGetDeviceGroupSurfacePresentModesKHR
53  * flink:vkGetPhysicalDevicePresentRectanglesKHR
54  * flink:vkAcquireNextImage2KHR
55
56If Vulkan 1.1 and `apiext:VK_KHR_swapchain` are supported, these are
57included by `VK_KHR_swapchain`.
58endif::VK_KHR_swapchain[]
59
60The base functionality in this extension is included in core Vulkan 1.1,
61with the KHR suffix omitted.
62The original type, enum and command names are still available as aliases of
63the core functionality.
64
65include::{generated}/interfaces/VK_KHR_device_group.adoc[]
66
67=== New Built-in Variables
68
69  * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>>
70
71=== New SPIR-V Capabilities
72
73  * <<spirvenv-capabilities-table-DeviceGroup, code:DeviceGroup>>
74
75=== Version History
76
77  * Revision 1, 2016-10-19 (Jeff Bolz)
78  ** Internal revisions
79  * Revision 2, 2017-05-19 (Tobias Hector)
80  ** Removed extended memory bind functions to VK_KHR_bind_memory2, added
81     dependency on that extension, and device-group-specific structs for
82     those functions.
83  * Revision 3, 2017-10-06 (Ian Elliott)
84  ** Corrected Vulkan 1.1 interactions with the WSI extensions.
85     All Vulkan 1.1 WSI interactions are with the VK_KHR_swapchain
86     extension.
87  * Revision 4, 2017-10-10 (Jeff Bolz)
88  ** Rename "`SFR`" bits and structure members to use the phrase "`split
89     instance bind regions`".
90