// Copyright (c) 2016-2017 The Khronos Group Inc.
// Copyright notice at https://www.khronos.org/registry/speccopyright.html

[[VK_KHX_device_group]]
== VK_KHX_device_group

*Name String*::
    +VK_KHX_device_group+
*Extension Type*::
    Device extension
*Registered Extension Number*::
    61
*Status*::
    Draft.
*Last Modified Date*::
    2016-10-19
*Revision*::
    1
*IP Status*::
    No known IP claims.
*Dependencies*::
  - This extension is written against version 1.0 of the Vulkan API.
  - Requires +VK_KHR_swapchain+ revision 68.
*Contributors*::
  - Jeff Bolz, NVIDIA
*Contacts*::
  - Jeff Bolz (jbolz 'at' nvidia.com)

This extension provides functionality to use a logical device that consists
of multiple physical devices, as created with the
+VK_KHX_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.

=== New Object Types

None.

=== New Enum Constants

  * Extending ename:VkStructureType:
  ** ename:VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX
  ** ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX
  ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX
  * Extending ename:VkImageCreateFlagBits
  ** ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX
  * Extending ename:VkPipelineCreateFlagBits
  ** ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX
  ** ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX
  * Extending ename:VkDependencyFlagBits
  ** ename:VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX
  * Extending ename:VkSwapchainCreateFlagBitsKHR
  ** ename:VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX

=== New Enums

  * slink:VkPeerMemoryFeatureFlagBitsKHX
  * slink:VkMemoryAllocateFlagBitsKHX
  * slink:VkDeviceGroupPresentModeFlagBitsKHX

=== New Structures

  * slink:VkMemoryAllocateFlagsInfoKHX
  * slink:VkBindBufferMemoryInfoKHX
  * slink:VkBindImageMemoryInfoKHX
  * slink:VkDeviceGroupRenderPassBeginInfoKHX
  * slink:VkDeviceGroupCommandBufferBeginInfoKHX
  * slink:VkDeviceGroupSubmitInfoKHX
  * slink:VkDeviceGroupBindSparseInfoKHX
  * slink:VkDeviceGroupPresentCapabilitiesKHX
  * slink:VkImageSwapchainCreateInfoKHX
  * slink:VkBindImageMemorySwapchainInfoKHX
  * slink:VkAcquireNextImageInfoKHX
  * slink:VkDeviceGroupPresentInfoKHX
  * slink:VkDeviceGroupSwapchainCreateInfoKHX

=== New Functions

  * flink:vkGetDeviceGroupPeerMemoryFeaturesKHX
  * flink:vkBindBufferMemory2KHX
  * flink:vkBindImageMemory2KHX
  * flink:vkCmdSetDeviceMaskKHX
  * flink:vkGetDeviceGroupPresentCapabilitiesKHX
  * flink:vkGetDeviceGroupSurfacePresentModesKHX
  * flink:vkAcquireNextImage2KHX
  * flink:vkCmdDispatchBaseKHX
  * flink:vkGetPhysicalDevicePresentRectanglesKHX

=== New Built-In Variables
  * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>>

=== New SPIR-V Capabilities
  * <<spirvenv-capabilities-table-devicegroup,code:DeviceGroup>>

=== Issues

None.

=== Examples

TODO

=== Version History

 * Revision 1, 2016-10-19 (Jeff Bolz)
   - Internal revisions
