// Copyright 2016-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_device_group.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2017-10-10
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.1 Core
*Contributors*::
  - Jeff Bolz, NVIDIA
  - Tobias Hector, Imagination Technologies

=== Description

This extension provides functionality to use a logical device that consists
of multiple physical devices, as created with the
`apiext:VK_KHR_device_group_creation` extension.
A device group can allocate memory across the subdevices, bind memory from
one subdevice to a resource on another subdevice, record command buffers
where some work executes on an arbitrary subset of the subdevices, and
potentially present a swapchain image from one or more subdevices.

=== Promotion to Vulkan 1.1

ifdef::VK_KHR_swapchain[]
The following enums, types and commands are included as interactions with
`apiext:VK_KHR_swapchain`:

  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
  * ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
  * ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
  * ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
  * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
  * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
  * elink:VkDeviceGroupPresentModeFlagBitsKHR
  * slink:VkDeviceGroupPresentCapabilitiesKHR
  * slink:VkImageSwapchainCreateInfoKHR
  * slink:VkBindImageMemorySwapchainInfoKHR
  * slink:VkAcquireNextImageInfoKHR
  * slink:VkDeviceGroupPresentInfoKHR
  * slink:VkDeviceGroupSwapchainCreateInfoKHR
  * flink:vkGetDeviceGroupPresentCapabilitiesKHR
  * flink:vkGetDeviceGroupSurfacePresentModesKHR
  * flink:vkGetPhysicalDevicePresentRectanglesKHR
  * flink:vkAcquireNextImage2KHR

If Vulkan 1.1 and `apiext:VK_KHR_swapchain` are supported, these are
included by `VK_KHR_swapchain`.
endif::VK_KHR_swapchain[]

The base functionality in this extension is included in core Vulkan 1.1,
with the KHR suffix omitted.
The original type, enum and command names are still available as aliases of
the core functionality.

include::{generated}/interfaces/VK_KHR_device_group.txt[]

=== New Built-in Variables

  * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>>

=== New SPIR-V Capabilities

  * <<spirvenv-capabilities-table-DeviceGroup,code:DeviceGroup>>

=== Version History

 * Revision 1, 2016-10-19 (Jeff Bolz)
   - Internal revisions
 * Revision 2, 2017-05-19 (Tobias Hector)
   - Removed extended memory bind functions to VK_KHR_bind_memory2, added
     dependency on that extension, and device-group-specific structs for
     those functions.
 * Revision 3, 2017-10-06 (Ian Elliott)
   - Corrected Vulkan 1.1 interactions with the WSI extensions.
     All Vulkan 1.1 WSI interactions are with the VK_KHR_swapchain
     extension.
 * Revision 4, 2017-10-10 (Jeff Bolz)
   - Rename "`SFR`" bits and structure members to use the phrase "`split
     instance bind regions`".
