1// Copyright (c) 2016-2018 Khronos Group. This work is licensed under a 2// Creative Commons Attribution 4.0 International License; see 3// http://creativecommons.org/licenses/by/4.0/ 4 5include::meta/VK_KHR_device_group.txt[] 6 7*Last Modified Date*:: 8 2017-10-06 9*IP Status*:: 10 No known IP claims. 11*Interactions and External Dependencies*:: 12 - Promoted to Vulkan 1.1 Core 13*Contributors*:: 14 - Jeff Bolz, NVIDIA 15 - Tobias Hector, Imagination Technologies 16 17This extension provides functionality to use a logical device that consists 18of multiple physical devices, as created with the 19`<<VK_KHR_device_group_creation>>` extension. 20A device group can allocate memory across the subdevices, bind memory from 21one subdevice to a resource on another subdevice, record command buffers 22where some work executes on an arbitrary subset of the subdevices, and 23potentially present a swapchain image from one or more subdevices. 24 25=== New Object Types 26 27None. 28 29=== New Enum Constants 30 31 * Extending elink:VkStructureType: 32 ** ename:VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR 33 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR 34 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR 35 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR 36 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR 37ifdef::VK_KHR_swapchain[] 38 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR 39 ** ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR 40 ** ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR 41 ** ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR 42 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR 43 ** ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR 44endif::VK_KHR_swapchain[] 45 ** ename:VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR 46 ** ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR 47 * Extending elink:VkImageCreateFlagBits 48 ** ename:VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR 49 * Extending elink:VkPipelineCreateFlagBits 50 ** ename:VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR 51 ** ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHR 52 * Extending elink:VkDependencyFlagBits 53 ** ename:VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR 54ifdef::VK_KHR_swapchain[] 55 * Extending elink:VkSwapchainCreateFlagBitsKHR 56 ** ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR 57endif::VK_KHR_swapchain[] 58 59=== New Enums 60 61 * elink:VkPeerMemoryFeatureFlagBitsKHR 62 * elink:VkMemoryAllocateFlagBitsKHR 63ifdef::VK_KHR_swapchain[] 64 * elink:VkDeviceGroupPresentModeFlagBitsKHR 65endif::VK_KHR_swapchain[] 66 67=== New Structures 68 69 * slink:VkMemoryAllocateFlagsInfoKHR 70 * slink:VkDeviceGroupRenderPassBeginInfoKHR 71 * slink:VkDeviceGroupCommandBufferBeginInfoKHR 72 * slink:VkDeviceGroupSubmitInfoKHR 73 * slink:VkDeviceGroupBindSparseInfoKHR 74 * slink:VkBindBufferMemoryDeviceGroupInfoKHR 75 * slink:VkBindImageMemoryDeviceGroupInfoKHR 76ifdef::VK_KHR_swapchain[] 77 * slink:VkDeviceGroupPresentCapabilitiesKHR 78 * slink:VkImageSwapchainCreateInfoKHR 79 * slink:VkBindImageMemorySwapchainInfoKHR 80 * slink:VkAcquireNextImageInfoKHR 81 * slink:VkDeviceGroupPresentInfoKHR 82 * slink:VkDeviceGroupSwapchainCreateInfoKHR 83endif::VK_KHR_swapchain[] 84 85=== New Functions 86 87 * flink:vkGetDeviceGroupPeerMemoryFeaturesKHR 88 * flink:vkCmdSetDeviceMaskKHR 89 * flink:vkCmdDispatchBaseKHR 90ifdef::VK_KHR_swapchain[] 91 * flink:vkGetDeviceGroupPresentCapabilitiesKHR 92 * flink:vkGetDeviceGroupSurfacePresentModesKHR 93 * flink:vkGetPhysicalDevicePresentRectanglesKHR 94 * flink:vkAcquireNextImage2KHR 95endif::VK_KHR_swapchain[] 96 97=== New Built-In Variables 98 99 * <<interfaces-builtin-variables-deviceindex,code:DeviceIndex>> 100 101=== New SPIR-V Capabilities 102 103 * <<spirvenv-capabilities,code:DeviceGroup>> 104 105=== Promotion to Vulkan 1.1 106 107ifdef::VK_KHR_swapchain[] 108The following enums, types and commands are included as interactions with 109`<<VK_KHR_swapchain>>`: 110 111 * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR 112 * ename:VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR 113 * ename:VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR 114 * ename:VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR 115 * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR 116 * ename:VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR 117 * ename:VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR 118 * elink:VkDeviceGroupPresentModeFlagBitsKHR 119 * slink:VkDeviceGroupPresentCapabilitiesKHR 120 * slink:VkImageSwapchainCreateInfoKHR 121 * slink:VkBindImageMemorySwapchainInfoKHR 122 * slink:VkAcquireNextImageInfoKHR 123 * slink:VkDeviceGroupPresentInfoKHR 124 * slink:VkDeviceGroupSwapchainCreateInfoKHR 125 * flink:vkGetDeviceGroupPresentCapabilitiesKHR 126 * flink:vkGetDeviceGroupSurfacePresentModesKHR 127 * flink:vkGetPhysicalDevicePresentRectanglesKHR 128 * flink:vkAcquireNextImage2KHR 129 130If Vulkan 1.1 and VK_KHR_swapchain are supported, these are included by 131VK_KHR_swapchain. 132endif::VK_KHR_swapchain[] 133 134The base functionality in this extension is included in core Vulkan 1.1, 135with the KHR suffix omitted. 136The original type, enum and command names are still available as aliases of 137the core functionality. 138 139=== Issues 140 141None. 142 143=== Examples 144 145TODO 146 147=== Version History 148 149 * Revision 1, 2016-10-19 (Jeff Bolz) 150 - Internal revisions 151 * Revision 2, 2017-05-19 (Tobias Hector) 152 - Removed extended memory bind functions to VK_KHR_bind_memory2, added 153 dependency on that extension, and device-group-specific structs for 154 those functions. 155 * Revision 3, 2017-10-06 (Ian Elliott) 156 - Corrected Vulkan 1.1 interactions with the WSI extensions. 157 All Vulkan 1.1 WSI interactions are with the VK_KHR_swapchain 158 extension. 159 * Revision 4, 2017-10-10 (Jeff Bolz) 160 - Rename "SFR" bits and structure members to use the phrase "split 161 instance bind regions". 162