Add vulkan header changes for device groups
Base changes for device groups:
Add a command line option to query device group ID
Add a query function to enumerate physical device groups
Add VK_KHR_bind_memory2 extension
Components: Vulkan
VK-GL-CTS issue: 110
Change-Id: Id68404a45749408ce0d6749a7d45ab26e5ddd3d9
diff --git a/external/vulkancts/framework/vulkan/vkBasicTypes.inl b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
index cfedd26..13d6566 100644
--- a/external/vulkancts/framework/vulkan/vkBasicTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkBasicTypes.inl
@@ -9,6 +9,7 @@
#define VK_MAX_MEMORY_TYPES (static_cast<size_t> (32))
#define VK_MAX_MEMORY_HEAPS (static_cast<size_t> (16))
#define VK_MAX_DESCRIPTION_SIZE (static_cast<size_t> (256))
+#define VK_MAX_DEVICE_GROUP_SIZE_KHX (static_cast<size_t> (32))
#define VK_ATTACHMENT_UNUSED (static_cast<deUint32> ((~0U)))
#define VK_SUBPASS_EXTERNAL (static_cast<deUint32> ((~0U)))
#define VK_QUEUE_FAMILY_IGNORED (static_cast<deUint32> ((~0U)))
@@ -162,6 +163,20 @@
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = 1000059006,
VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX = 1000060001,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX = 1000060002,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060013,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060014,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = 1000071000,
VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = 1000071001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = 1000071002,
@@ -1328,6 +1343,30 @@
};
typedef deUint32 VkSemaphoreImportFlagsKHR;
+enum VkPeerMemoryFeatureFlagBitsKHX
+{
+ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX = 0x00000001,
+ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX = 0x00000002,
+ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX = 0x00000004,
+ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX = 0x00000008,
+};
+typedef deUint32 VkPeerMemoryFeatureFlagsKHX;
+
+enum VkMemoryAllocateFlagBitsKHX
+{
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX = 0x00000001,
+};
+typedef deUint32 VkMemoryAllocateFlagsKHX;
+
+enum VkDeviceGroupPresentModeFlagBitsKHX
+{
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX = 0x00000001,
+ VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX = 0x00000002,
+ VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX = 0x00000004,
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX = 0x00000008,
+};
+typedef deUint32 VkDeviceGroupPresentModeFlagsKHX;
+
typedef deUint32 VkInstanceCreateFlags;
typedef deUint32 VkDeviceCreateFlags;
diff --git a/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl b/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
index 8c5c0b3..96253ae 100644
--- a/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkConcreteDeviceInterface.inl
@@ -151,5 +151,11 @@
virtual VkResult getSemaphoreFdKHR (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const;
virtual VkResult getRefreshCycleDurationGOOGLE (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const;
virtual VkResult getPastPresentationTimingGOOGLE (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const;
+virtual void getDeviceGroupPeerMemoryFeaturesKHX (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures) const;
+virtual void cmdSetDeviceMaskKHX (VkCommandBuffer commandBuffer, deUint32 deviceMask) const;
+virtual VkResult getDeviceGroupPresentCapabilitiesKHX (VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities) const;
+virtual VkResult getDeviceGroupSurfacePresentModesKHX (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes) const;
+virtual VkResult acquireNextImage2KHX (VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, deUint32* pImageIndex) const;
+virtual void cmdDispatchBaseKHX (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const;
virtual VkResult bindBufferMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos) const;
virtual VkResult bindImageMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos) const;
diff --git a/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl b/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
index 9b38c47..f9e8e42 100644
--- a/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkConcreteInstanceInterface.inl
@@ -52,3 +52,5 @@
virtual void debugReportMessageEXT (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage) const;
virtual void getPhysicalDeviceExternalBufferPropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties) const;
virtual void getPhysicalDeviceExternalSemaphorePropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties) const;
+virtual VkResult getPhysicalDevicePresentRectanglesKHX (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const;
+virtual VkResult enumeratePhysicalDeviceGroupsKHX (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties) const;
diff --git a/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl b/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
index 97ccf27..950c94f 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceDriverImpl.inl
@@ -752,6 +752,36 @@
return m_vk.getPastPresentationTimingGOOGLE(device, swapchain, pPresentationTimingCount, pPresentationTimings);
}
+void DeviceDriver::getDeviceGroupPeerMemoryFeaturesKHX (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures) const
+{
+ m_vk.getDeviceGroupPeerMemoryFeaturesKHX(device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
+}
+
+void DeviceDriver::cmdSetDeviceMaskKHX (VkCommandBuffer commandBuffer, deUint32 deviceMask) const
+{
+ m_vk.cmdSetDeviceMaskKHX(commandBuffer, deviceMask);
+}
+
+VkResult DeviceDriver::getDeviceGroupPresentCapabilitiesKHX (VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities) const
+{
+ return m_vk.getDeviceGroupPresentCapabilitiesKHX(device, pDeviceGroupPresentCapabilities);
+}
+
+VkResult DeviceDriver::getDeviceGroupSurfacePresentModesKHX (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes) const
+{
+ return m_vk.getDeviceGroupSurfacePresentModesKHX(device, surface, pModes);
+}
+
+VkResult DeviceDriver::acquireNextImage2KHX (VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, deUint32* pImageIndex) const
+{
+ return m_vk.acquireNextImage2KHX(device, pAcquireInfo, pImageIndex);
+}
+
+void DeviceDriver::cmdDispatchBaseKHX (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const
+{
+ m_vk.cmdDispatchBaseKHX(commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
+}
+
VkResult DeviceDriver::bindBufferMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos) const
{
return m_vk.bindBufferMemory2KHR(device, bindInfoCount, pBindInfos);
diff --git a/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
index 0d199bf..284d016 100644
--- a/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkDeviceFunctionPointers.inl
@@ -151,5 +151,11 @@
GetSemaphoreFdKHRFunc getSemaphoreFdKHR;
GetRefreshCycleDurationGOOGLEFunc getRefreshCycleDurationGOOGLE;
GetPastPresentationTimingGOOGLEFunc getPastPresentationTimingGOOGLE;
+GetDeviceGroupPeerMemoryFeaturesKHXFunc getDeviceGroupPeerMemoryFeaturesKHX;
+CmdSetDeviceMaskKHXFunc cmdSetDeviceMaskKHX;
+GetDeviceGroupPresentCapabilitiesKHXFunc getDeviceGroupPresentCapabilitiesKHX;
+GetDeviceGroupSurfacePresentModesKHXFunc getDeviceGroupSurfacePresentModesKHX;
+AcquireNextImage2KHXFunc acquireNextImage2KHX;
+CmdDispatchBaseKHXFunc cmdDispatchBaseKHX;
BindBufferMemory2KHRFunc bindBufferMemory2KHR;
BindImageMemory2KHRFunc bindImageMemory2KHR;
diff --git a/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl b/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
index 7d6a44b..5fd6ebf 100644
--- a/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkFunctionPointerTypes.inl
@@ -206,5 +206,13 @@
typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetSemaphoreFdKHRFunc) (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetRefreshCycleDurationGOOGLEFunc) (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetPastPresentationTimingGOOGLEFunc) (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
+typedef VKAPI_ATTR void (VKAPI_CALL* GetDeviceGroupPeerMemoryFeaturesKHXFunc) (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
+typedef VKAPI_ATTR void (VKAPI_CALL* CmdSetDeviceMaskKHXFunc) (VkCommandBuffer commandBuffer, deUint32 deviceMask);
+typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetDeviceGroupPresentCapabilitiesKHXFunc) (VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
+typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetDeviceGroupSurfacePresentModesKHXFunc) (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes);
+typedef VKAPI_ATTR VkResult (VKAPI_CALL* AcquireNextImage2KHXFunc) (VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, deUint32* pImageIndex);
+typedef VKAPI_ATTR void (VKAPI_CALL* CmdDispatchBaseKHXFunc) (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ);
+typedef VKAPI_ATTR VkResult (VKAPI_CALL* GetPhysicalDevicePresentRectanglesKHXFunc) (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects);
+typedef VKAPI_ATTR VkResult (VKAPI_CALL* EnumeratePhysicalDeviceGroupsKHXFunc) (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
typedef VKAPI_ATTR VkResult (VKAPI_CALL* BindBufferMemory2KHRFunc) (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos);
typedef VKAPI_ATTR VkResult (VKAPI_CALL* BindImageMemory2KHRFunc) (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos);
diff --git a/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
index 5f2be2e..1ea8a62 100644
--- a/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInitDeviceFunctionPointers.inl
@@ -151,5 +151,11 @@
m_vk.getSemaphoreFdKHR = (GetSemaphoreFdKHRFunc) GET_PROC_ADDR("vkGetSemaphoreFdKHR");
m_vk.getRefreshCycleDurationGOOGLE = (GetRefreshCycleDurationGOOGLEFunc) GET_PROC_ADDR("vkGetRefreshCycleDurationGOOGLE");
m_vk.getPastPresentationTimingGOOGLE = (GetPastPresentationTimingGOOGLEFunc) GET_PROC_ADDR("vkGetPastPresentationTimingGOOGLE");
+m_vk.getDeviceGroupPeerMemoryFeaturesKHX = (GetDeviceGroupPeerMemoryFeaturesKHXFunc) GET_PROC_ADDR("vkGetDeviceGroupPeerMemoryFeaturesKHX");
+m_vk.cmdSetDeviceMaskKHX = (CmdSetDeviceMaskKHXFunc) GET_PROC_ADDR("vkCmdSetDeviceMaskKHX");
+m_vk.getDeviceGroupPresentCapabilitiesKHX = (GetDeviceGroupPresentCapabilitiesKHXFunc) GET_PROC_ADDR("vkGetDeviceGroupPresentCapabilitiesKHX");
+m_vk.getDeviceGroupSurfacePresentModesKHX = (GetDeviceGroupSurfacePresentModesKHXFunc) GET_PROC_ADDR("vkGetDeviceGroupSurfacePresentModesKHX");
+m_vk.acquireNextImage2KHX = (AcquireNextImage2KHXFunc) GET_PROC_ADDR("vkAcquireNextImage2KHX");
+m_vk.cmdDispatchBaseKHX = (CmdDispatchBaseKHXFunc) GET_PROC_ADDR("vkCmdDispatchBaseKHX");
m_vk.bindBufferMemory2KHR = (BindBufferMemory2KHRFunc) GET_PROC_ADDR("vkBindBufferMemory2KHR");
m_vk.bindImageMemory2KHR = (BindImageMemory2KHRFunc) GET_PROC_ADDR("vkBindImageMemory2KHR");
diff --git a/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
index 34ece9c..f1fb1a7 100644
--- a/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInitInstanceFunctionPointers.inl
@@ -52,3 +52,5 @@
m_vk.debugReportMessageEXT = (DebugReportMessageEXTFunc) GET_PROC_ADDR("vkDebugReportMessageEXT");
m_vk.getPhysicalDeviceExternalBufferPropertiesKHR = (GetPhysicalDeviceExternalBufferPropertiesKHRFunc) GET_PROC_ADDR("vkGetPhysicalDeviceExternalBufferPropertiesKHR");
m_vk.getPhysicalDeviceExternalSemaphorePropertiesKHR = (GetPhysicalDeviceExternalSemaphorePropertiesKHRFunc) GET_PROC_ADDR("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
+m_vk.getPhysicalDevicePresentRectanglesKHX = (GetPhysicalDevicePresentRectanglesKHXFunc) GET_PROC_ADDR("vkGetPhysicalDevicePresentRectanglesKHX");
+m_vk.enumeratePhysicalDeviceGroupsKHX = (EnumeratePhysicalDeviceGroupsKHXFunc) GET_PROC_ADDR("vkEnumeratePhysicalDeviceGroupsKHX");
diff --git a/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl b/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
index c7e210e..7475fd5 100644
--- a/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkInstanceDriverImpl.inl
@@ -256,3 +256,13 @@
{
m_vk.getPhysicalDeviceExternalSemaphorePropertiesKHR(physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
}
+
+VkResult InstanceDriver::getPhysicalDevicePresentRectanglesKHX (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const
+{
+ return m_vk.getPhysicalDevicePresentRectanglesKHX(physicalDevice, surface, pRectCount, pRects);
+}
+
+VkResult InstanceDriver::enumeratePhysicalDeviceGroupsKHX (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties) const
+{
+ return m_vk.enumeratePhysicalDeviceGroupsKHX(instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
+}
diff --git a/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl b/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
index e0c5ef0..3615192 100644
--- a/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
+++ b/external/vulkancts/framework/vulkan/vkInstanceFunctionPointers.inl
@@ -52,3 +52,5 @@
DebugReportMessageEXTFunc debugReportMessageEXT;
GetPhysicalDeviceExternalBufferPropertiesKHRFunc getPhysicalDeviceExternalBufferPropertiesKHR;
GetPhysicalDeviceExternalSemaphorePropertiesKHRFunc getPhysicalDeviceExternalSemaphorePropertiesKHR;
+GetPhysicalDevicePresentRectanglesKHXFunc getPhysicalDevicePresentRectanglesKHX;
+EnumeratePhysicalDeviceGroupsKHXFunc enumeratePhysicalDeviceGroupsKHX;
diff --git a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
index cbf5dba..dc32f87 100644
--- a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
@@ -1388,6 +1388,72 @@
return VK_SUCCESS;
}
+VKAPI_ATTR void VKAPI_CALL getDeviceGroupPeerMemoryFeaturesKHX (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures)
+{
+ DE_UNREF(device);
+ DE_UNREF(heapIndex);
+ DE_UNREF(localDeviceIndex);
+ DE_UNREF(remoteDeviceIndex);
+ DE_UNREF(pPeerMemoryFeatures);
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdSetDeviceMaskKHX (VkCommandBuffer commandBuffer, deUint32 deviceMask)
+{
+ DE_UNREF(commandBuffer);
+ DE_UNREF(deviceMask);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDeviceGroupPresentCapabilitiesKHX (VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities)
+{
+ DE_UNREF(device);
+ DE_UNREF(pDeviceGroupPresentCapabilities);
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getDeviceGroupSurfacePresentModesKHX (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes)
+{
+ DE_UNREF(device);
+ DE_UNREF(surface);
+ DE_UNREF(pModes);
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL acquireNextImage2KHX (VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, deUint32* pImageIndex)
+{
+ DE_UNREF(device);
+ DE_UNREF(pAcquireInfo);
+ DE_UNREF(pImageIndex);
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR void VKAPI_CALL cmdDispatchBaseKHX (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ)
+{
+ DE_UNREF(commandBuffer);
+ DE_UNREF(baseGroupX);
+ DE_UNREF(baseGroupY);
+ DE_UNREF(baseGroupZ);
+ DE_UNREF(groupCountX);
+ DE_UNREF(groupCountY);
+ DE_UNREF(groupCountZ);
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL getPhysicalDevicePresentRectanglesKHX (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects)
+{
+ DE_UNREF(physicalDevice);
+ DE_UNREF(surface);
+ DE_UNREF(pRectCount);
+ DE_UNREF(pRects);
+ return VK_SUCCESS;
+}
+
+VKAPI_ATTR VkResult VKAPI_CALL enumeratePhysicalDeviceGroupsKHX (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties)
+{
+ DE_UNREF(instance);
+ DE_UNREF(pPhysicalDeviceGroupCount);
+ DE_UNREF(pPhysicalDeviceGroupProperties);
+ return VK_SUCCESS;
+}
+
VKAPI_ATTR VkResult VKAPI_CALL bindBufferMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos)
{
DE_UNREF(device);
@@ -1465,6 +1531,8 @@
VK_NULL_FUNC_ENTRY(vkDebugReportMessageEXT, debugReportMessageEXT),
VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceExternalBufferPropertiesKHR, getPhysicalDeviceExternalBufferPropertiesKHR),
VK_NULL_FUNC_ENTRY(vkGetPhysicalDeviceExternalSemaphorePropertiesKHR, getPhysicalDeviceExternalSemaphorePropertiesKHR),
+ VK_NULL_FUNC_ENTRY(vkGetPhysicalDevicePresentRectanglesKHX, getPhysicalDevicePresentRectanglesKHX),
+ VK_NULL_FUNC_ENTRY(vkEnumeratePhysicalDeviceGroupsKHX, enumeratePhysicalDeviceGroupsKHX),
};
static const tcu::StaticFunctionLibrary::Entry s_deviceFunctions[] =
@@ -1619,6 +1687,12 @@
VK_NULL_FUNC_ENTRY(vkGetSemaphoreFdKHR, getSemaphoreFdKHR),
VK_NULL_FUNC_ENTRY(vkGetRefreshCycleDurationGOOGLE, getRefreshCycleDurationGOOGLE),
VK_NULL_FUNC_ENTRY(vkGetPastPresentationTimingGOOGLE, getPastPresentationTimingGOOGLE),
+ VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPeerMemoryFeaturesKHX, getDeviceGroupPeerMemoryFeaturesKHX),
+ VK_NULL_FUNC_ENTRY(vkCmdSetDeviceMaskKHX, cmdSetDeviceMaskKHX),
+ VK_NULL_FUNC_ENTRY(vkGetDeviceGroupPresentCapabilitiesKHX, getDeviceGroupPresentCapabilitiesKHX),
+ VK_NULL_FUNC_ENTRY(vkGetDeviceGroupSurfacePresentModesKHX, getDeviceGroupSurfacePresentModesKHX),
+ VK_NULL_FUNC_ENTRY(vkAcquireNextImage2KHX, acquireNextImage2KHX),
+ VK_NULL_FUNC_ENTRY(vkCmdDispatchBaseKHX, cmdDispatchBaseKHX),
VK_NULL_FUNC_ENTRY(vkBindBufferMemory2KHR, bindBufferMemory2KHR),
VK_NULL_FUNC_ENTRY(vkBindImageMemory2KHR, bindImageMemory2KHR),
};
diff --git a/external/vulkancts/framework/vulkan/vkQueryUtil.cpp b/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
index 5619432..429d189 100644
--- a/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
+++ b/external/vulkancts/framework/vulkan/vkQueryUtil.cpp
@@ -48,6 +48,29 @@
return devices;
}
+vector<VkPhysicalDeviceGroupPropertiesKHX> enumeratePhysicalDeviceGroupsKHX(const InstanceInterface& vk, VkInstance instance)
+{
+ deUint32 numDeviceGroups = 0;
+ vector<VkPhysicalDeviceGroupPropertiesKHX> properties;
+
+ VK_CHECK(vk.enumeratePhysicalDeviceGroupsKHX(instance, &numDeviceGroups, DE_NULL));
+
+ if (numDeviceGroups > 0)
+ {
+ properties.resize(numDeviceGroups);
+ for (deUint32 i = 0; i < numDeviceGroups; i++)
+ {
+ properties[i].sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX;
+ properties[i].pNext = DE_NULL;
+ }
+ VK_CHECK(vk.enumeratePhysicalDeviceGroupsKHX(instance, &numDeviceGroups, &properties[0]));
+
+ if ((size_t)numDeviceGroups != properties.size())
+ TCU_FAIL("Returned device group count changed between queries");
+ }
+ return properties;
+}
+
vector<VkQueueFamilyProperties> getPhysicalDeviceQueueFamilyProperties (const InstanceInterface& vk, VkPhysicalDevice physicalDevice)
{
deUint32 numQueues = 0;
diff --git a/external/vulkancts/framework/vulkan/vkQueryUtil.hpp b/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
index bf1709b..a49b0ff 100644
--- a/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
+++ b/external/vulkancts/framework/vulkan/vkQueryUtil.hpp
@@ -35,6 +35,7 @@
// API queries
std::vector<VkPhysicalDevice> enumeratePhysicalDevices (const InstanceInterface& vk, VkInstance instance);
+std::vector<VkPhysicalDeviceGroupPropertiesKHX> enumeratePhysicalDeviceGroupsKHX (const InstanceInterface& vk, VkInstance instance);
std::vector<VkQueueFamilyProperties> getPhysicalDeviceQueueFamilyProperties (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
VkPhysicalDeviceFeatures getPhysicalDeviceFeatures (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
VkPhysicalDeviceProperties getPhysicalDeviceProperties (const InstanceInterface& vk, VkPhysicalDevice physicalDevice);
diff --git a/external/vulkancts/framework/vulkan/vkStrUtil.inl b/external/vulkancts/framework/vulkan/vkStrUtil.inl
index 4d12a86..61dd935 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtil.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtil.inl
@@ -178,6 +178,9 @@
tcu::Format::Bitfield<32> getExternalSemaphoreHandleTypeFlagsKHRStr (VkExternalSemaphoreHandleTypeFlagsKHR value);
tcu::Format::Bitfield<32> getExternalSemaphoreFeatureFlagsKHRStr (VkExternalSemaphoreFeatureFlagsKHR value);
tcu::Format::Bitfield<32> getSemaphoreImportFlagsKHRStr (VkSemaphoreImportFlagsKHR value);
+tcu::Format::Bitfield<32> getPeerMemoryFeatureFlagsKHXStr (VkPeerMemoryFeatureFlagsKHX value);
+tcu::Format::Bitfield<32> getMemoryAllocateFlagsKHXStr (VkMemoryAllocateFlagsKHX value);
+tcu::Format::Bitfield<32> getDeviceGroupPresentModeFlagsKHXStr (VkDeviceGroupPresentModeFlagsKHX value);
tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value);
tcu::Format::Bitfield<32> getDeviceCreateFlagsStr (VkDeviceCreateFlags value);
tcu::Format::Bitfield<32> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags value);
@@ -415,5 +418,20 @@
std::ostream& operator<< (std::ostream& s, const VkPresentTimeGOOGLE& value);
std::ostream& operator<< (std::ostream& s, const VkPresentTimesInfoGOOGLE& value);
std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVariablePointerFeaturesKHR& value);
+std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateFlagsInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupRenderPassBeginInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSubmitInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupBindSparseInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkImageSwapchainCreateInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryDeviceGroupInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemorySwapchainInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkAcquireNextImageInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceGroupPropertiesKHX& value);
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupDeviceCreateInfoKHX& value);
std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryInfoKHR& value);
std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryInfoKHR& value);
diff --git a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
index 9df12a9..2667de5 100644
--- a/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
+++ b/external/vulkancts/framework/vulkan/vkStrUtilImpl.inl
@@ -173,6 +173,20 @@
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR";
case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR: return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR";
+ case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX: return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX";
+ case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX: return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX";
+ case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX: return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX";
+ case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX: return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX";
+ case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX: return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX";
+ case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX: return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR";
case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR: return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR: return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR";
@@ -1566,6 +1580,39 @@
return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}
+tcu::Format::Bitfield<32> getPeerMemoryFeatureFlagsKHXStr (VkPeerMemoryFeatureFlagsKHX value)
+{
+ static const tcu::Format::BitDesc s_desc[] =
+ {
+ tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX, "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX"),
+ tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX, "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX"),
+ tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX, "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX"),
+ tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX, "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX"),
+ };
+ return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getMemoryAllocateFlagsKHXStr (VkMemoryAllocateFlagsKHX value)
+{
+ static const tcu::Format::BitDesc s_desc[] =
+ {
+ tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX, "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX"),
+ };
+ return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
+tcu::Format::Bitfield<32> getDeviceGroupPresentModeFlagsKHXStr (VkDeviceGroupPresentModeFlagsKHX value)
+{
+ static const tcu::Format::BitDesc s_desc[] =
+ {
+ tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX, "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX"),
+ tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX, "VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX"),
+ tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX, "VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX"),
+ tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX, "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX"),
+ };
+ return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
+}
+
tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
{
return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
@@ -4316,6 +4363,180 @@
return s;
}
+std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateFlagsInfoKHX& value)
+{
+ s << "VkMemoryAllocateFlagsInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tflags = " << getMemoryAllocateFlagsKHXStr(value.flags) << '\n';
+ s << "\tdeviceMask = " << value.deviceMask << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupRenderPassBeginInfoKHX& value)
+{
+ s << "VkDeviceGroupRenderPassBeginInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tdeviceMask = " << value.deviceMask << '\n';
+ s << "\tdeviceRenderAreaCount = " << value.deviceRenderAreaCount << '\n';
+ s << "\tpDeviceRenderAreas = " << value.pDeviceRenderAreas << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfoKHX& value)
+{
+ s << "VkDeviceGroupCommandBufferBeginInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tdeviceMask = " << value.deviceMask << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSubmitInfoKHX& value)
+{
+ s << "VkDeviceGroupSubmitInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
+ s << "\tpWaitSemaphoreDeviceIndices = " << value.pWaitSemaphoreDeviceIndices << '\n';
+ s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
+ s << "\tpCommandBufferDeviceMasks = " << value.pCommandBufferDeviceMasks << '\n';
+ s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
+ s << "\tpSignalSemaphoreDeviceIndices = " << value.pSignalSemaphoreDeviceIndices << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupBindSparseInfoKHX& value)
+{
+ s << "VkDeviceGroupBindSparseInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tresourceDeviceIndex = " << value.resourceDeviceIndex << '\n';
+ s << "\tmemoryDeviceIndex = " << value.memoryDeviceIndex << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHX& value)
+{
+ s << "VkDeviceGroupPresentCapabilitiesKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tpresentMask = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.presentMask), DE_ARRAY_END(value.presentMask)) << '\n';
+ s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHXStr(value.modes) << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkImageSwapchainCreateInfoKHX& value)
+{
+ s << "VkImageSwapchainCreateInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tswapchain = " << value.swapchain << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfoKHX& value)
+{
+ s << "VkBindBufferMemoryDeviceGroupInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
+ s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryDeviceGroupInfoKHX& value)
+{
+ s << "VkBindImageMemoryDeviceGroupInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
+ s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
+ s << "\tSFRRectCount = " << value.SFRRectCount << '\n';
+ s << "\tpSFRRects = " << value.pSFRRects << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkBindImageMemorySwapchainInfoKHX& value)
+{
+ s << "VkBindImageMemorySwapchainInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tswapchain = " << value.swapchain << '\n';
+ s << "\timageIndex = " << value.imageIndex << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkAcquireNextImageInfoKHX& value)
+{
+ s << "VkAcquireNextImageInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tswapchain = " << value.swapchain << '\n';
+ s << "\ttimeout = " << value.timeout << '\n';
+ s << "\tsemaphore = " << value.semaphore << '\n';
+ s << "\tfence = " << value.fence << '\n';
+ s << "\tdeviceMask = " << value.deviceMask << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentInfoKHX& value)
+{
+ s << "VkDeviceGroupPresentInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tswapchainCount = " << value.swapchainCount << '\n';
+ s << "\tpDeviceMasks = " << value.pDeviceMasks << '\n';
+ s << "\tmode = " << value.mode << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHX& value)
+{
+ s << "VkDeviceGroupSwapchainCreateInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHXStr(value.modes) << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceGroupPropertiesKHX& value)
+{
+ s << "VkPhysicalDeviceGroupPropertiesKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
+ s << "\tphysicalDevices = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.physicalDevices), DE_ARRAY_END(value.physicalDevices)) << '\n';
+ s << "\tsubsetAllocation = " << value.subsetAllocation << '\n';
+ s << '}';
+ return s;
+}
+
+std::ostream& operator<< (std::ostream& s, const VkDeviceGroupDeviceCreateInfoKHX& value)
+{
+ s << "VkDeviceGroupDeviceCreateInfoKHX = {\n";
+ s << "\tsType = " << value.sType << '\n';
+ s << "\tpNext = " << value.pNext << '\n';
+ s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
+ s << "\tpPhysicalDevices = " << value.pPhysicalDevices << '\n';
+ s << '}';
+ return s;
+}
+
std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryInfoKHR& value)
{
s << "VkBindBufferMemoryInfoKHR = {\n";
diff --git a/external/vulkancts/framework/vulkan/vkStructTypes.inl b/external/vulkancts/framework/vulkan/vkStructTypes.inl
index f186ed7..a0f359b 100644
--- a/external/vulkancts/framework/vulkan/vkStructTypes.inl
+++ b/external/vulkancts/framework/vulkan/vkStructTypes.inl
@@ -1971,6 +1971,135 @@
VkBool32 variablePointers;
};
+struct VkMemoryAllocateFlagsInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ VkMemoryAllocateFlagsKHX flags;
+ deUint32 deviceMask;
+};
+
+struct VkDeviceGroupRenderPassBeginInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 deviceMask;
+ deUint32 deviceRenderAreaCount;
+ const VkRect2D* pDeviceRenderAreas;
+};
+
+struct VkDeviceGroupCommandBufferBeginInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 deviceMask;
+};
+
+struct VkDeviceGroupSubmitInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 waitSemaphoreCount;
+ const deUint32* pWaitSemaphoreDeviceIndices;
+ deUint32 commandBufferCount;
+ const deUint32* pCommandBufferDeviceMasks;
+ deUint32 signalSemaphoreCount;
+ const deUint32* pSignalSemaphoreDeviceIndices;
+};
+
+struct VkDeviceGroupBindSparseInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 resourceDeviceIndex;
+ deUint32 memoryDeviceIndex;
+};
+
+struct VkDeviceGroupPresentCapabilitiesKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkDeviceGroupPresentModeFlagsKHX modes;
+};
+
+struct VkImageSwapchainCreateInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+};
+
+struct VkBindBufferMemoryDeviceGroupInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 deviceIndexCount;
+ const deUint32* pDeviceIndices;
+};
+
+struct VkBindImageMemoryDeviceGroupInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 deviceIndexCount;
+ const deUint32* pDeviceIndices;
+ deUint32 SFRRectCount;
+ const VkRect2D* pSFRRects;
+};
+
+struct VkBindImageMemorySwapchainInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ deUint32 imageIndex;
+};
+
+struct VkAcquireNextImageInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ deUint64 timeout;
+ VkSemaphore semaphore;
+ VkFence fence;
+ deUint32 deviceMask;
+};
+
+struct VkDeviceGroupPresentInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 swapchainCount;
+ const deUint32* pDeviceMasks;
+ VkDeviceGroupPresentModeFlagBitsKHX mode;
+};
+
+struct VkDeviceGroupSwapchainCreateInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceGroupPresentModeFlagsKHX modes;
+};
+
+struct VkPhysicalDeviceGroupPropertiesKHX
+{
+ VkStructureType sType;
+ void* pNext;
+ deUint32 physicalDeviceCount;
+ VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkBool32 subsetAllocation;
+};
+
+struct VkDeviceGroupDeviceCreateInfoKHX
+{
+ VkStructureType sType;
+ const void* pNext;
+ deUint32 physicalDeviceCount;
+ const VkPhysicalDevice* pPhysicalDevices;
+};
+
struct VkBindBufferMemoryInfoKHR
{
VkStructureType sType;
diff --git a/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl b/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
index 7630125..6244839 100644
--- a/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkVirtualDeviceInterface.inl
@@ -151,5 +151,11 @@
virtual VkResult getSemaphoreFdKHR (VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) const = 0;
virtual VkResult getRefreshCycleDurationGOOGLE (VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) const = 0;
virtual VkResult getPastPresentationTimingGOOGLE (VkDevice device, VkSwapchainKHR swapchain, deUint32* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) const = 0;
+virtual void getDeviceGroupPeerMemoryFeaturesKHX (VkDevice device, deUint32 heapIndex, deUint32 localDeviceIndex, deUint32 remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures) const = 0;
+virtual void cmdSetDeviceMaskKHX (VkCommandBuffer commandBuffer, deUint32 deviceMask) const = 0;
+virtual VkResult getDeviceGroupPresentCapabilitiesKHX (VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities) const = 0;
+virtual VkResult getDeviceGroupSurfacePresentModesKHX (VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes) const = 0;
+virtual VkResult acquireNextImage2KHX (VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, deUint32* pImageIndex) const = 0;
+virtual void cmdDispatchBaseKHX (VkCommandBuffer commandBuffer, deUint32 baseGroupX, deUint32 baseGroupY, deUint32 baseGroupZ, deUint32 groupCountX, deUint32 groupCountY, deUint32 groupCountZ) const = 0;
virtual VkResult bindBufferMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindBufferMemoryInfoKHR* pBindInfos) const = 0;
virtual VkResult bindImageMemory2KHR (VkDevice device, deUint32 bindInfoCount, const VkBindImageMemoryInfoKHR* pBindInfos) const = 0;
diff --git a/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl b/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
index 2923961..b4e47b9 100644
--- a/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
+++ b/external/vulkancts/framework/vulkan/vkVirtualInstanceInterface.inl
@@ -52,3 +52,5 @@
virtual void debugReportMessageEXT (VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, deUint64 object, deUintptr location, deInt32 messageCode, const char* pLayerPrefix, const char* pMessage) const = 0;
virtual void getPhysicalDeviceExternalBufferPropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties) const = 0;
virtual void getPhysicalDeviceExternalSemaphorePropertiesKHR (VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties) const = 0;
+virtual VkResult getPhysicalDevicePresentRectanglesKHX (VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, deUint32* pRectCount, VkRect2D* pRects) const = 0;
+virtual VkResult enumeratePhysicalDeviceGroupsKHX (VkInstance instance, deUint32* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties) const = 0;
diff --git a/external/vulkancts/scripts/gen_framework.py b/external/vulkancts/scripts/gen_framework.py
index a37cba5..394bf3b 100644
--- a/external/vulkancts/scripts/gen_framework.py
+++ b/external/vulkancts/scripts/gen_framework.py
@@ -47,6 +47,7 @@
("VK_MAX_MEMORY_TYPES", "size_t"),
("VK_MAX_MEMORY_HEAPS", "size_t"),
("VK_MAX_DESCRIPTION_SIZE", "size_t"),
+ ("VK_MAX_DEVICE_GROUP_SIZE_KHX", "size_t"),
("VK_ATTACHMENT_UNUSED", "deUint32"),
("VK_SUBPASS_EXTERNAL", "deUint32"),
("VK_QUEUE_FAMILY_IGNORED", "deUint32"),
diff --git a/external/vulkancts/scripts/src/vulkan.h.in b/external/vulkancts/scripts/src/vulkan.h.in
index e9e3053..e83674e 100644
--- a/external/vulkancts/scripts/src/vulkan.h.in
+++ b/external/vulkancts/scripts/src/vulkan.h.in
@@ -227,6 +227,20 @@
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = 1000059006,
VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX = 1000060001,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX = 1000060002,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060013,
+ VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHX = 1000060014,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000,
+ VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = 1000071000,
VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = 1000071001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = 1000071002,
@@ -281,7 +295,7 @@
VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146002,
VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = 1000146003,
VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = 1000146004,
- VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = 1000157000,
+ VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = 1000157000,
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = 1000157001,
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
@@ -5039,6 +5053,214 @@
VkBool32 variablePointers;
} VkPhysicalDeviceVariablePointerFeaturesKHR;
+#define VK_KHX_device_group 1
+#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32
+#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 2
+#define VK_KHX_DEVICE_GROUP_EXTENSION_NAME "VK_KHX_device_group"
+
+typedef enum VkPeerMemoryFeatureFlagBitsKHX {
+ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX = 0x00000001,
+ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX = 0x00000002,
+ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX = 0x00000004,
+ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX = 0x00000008,
+ VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkPeerMemoryFeatureFlagBitsKHX;
+typedef VkFlags VkPeerMemoryFeatureFlagsKHX;
+
+typedef enum VkMemoryAllocateFlagBitsKHX {
+ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX = 0x00000001,
+ VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkMemoryAllocateFlagBitsKHX;
+typedef VkFlags VkMemoryAllocateFlagsKHX;
+
+typedef enum VkDeviceGroupPresentModeFlagBitsKHX {
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX = 0x00000001,
+ VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX = 0x00000002,
+ VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX = 0x00000004,
+ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX = 0x00000008,
+ VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
+} VkDeviceGroupPresentModeFlagBitsKHX;
+typedef VkFlags VkDeviceGroupPresentModeFlagsKHX;
+
+typedef struct VkMemoryAllocateFlagsInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkMemoryAllocateFlagsKHX flags;
+ uint32_t deviceMask;
+} VkMemoryAllocateFlagsInfoKHX;
+
+typedef struct VkDeviceGroupRenderPassBeginInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+ uint32_t deviceRenderAreaCount;
+ const VkRect2D* pDeviceRenderAreas;
+} VkDeviceGroupRenderPassBeginInfoKHX;
+
+typedef struct VkDeviceGroupCommandBufferBeginInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceMask;
+} VkDeviceGroupCommandBufferBeginInfoKHX;
+
+typedef struct VkDeviceGroupSubmitInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t waitSemaphoreCount;
+ const uint32_t* pWaitSemaphoreDeviceIndices;
+ uint32_t commandBufferCount;
+ const uint32_t* pCommandBufferDeviceMasks;
+ uint32_t signalSemaphoreCount;
+ const uint32_t* pSignalSemaphoreDeviceIndices;
+} VkDeviceGroupSubmitInfoKHX;
+
+typedef struct VkDeviceGroupBindSparseInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t resourceDeviceIndex;
+ uint32_t memoryDeviceIndex;
+} VkDeviceGroupBindSparseInfoKHX;
+
+typedef struct VkDeviceGroupPresentCapabilitiesKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkDeviceGroupPresentModeFlagsKHX modes;
+} VkDeviceGroupPresentCapabilitiesKHX;
+
+typedef struct VkImageSwapchainCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+} VkImageSwapchainCreateInfoKHX;
+
+typedef struct VkBindBufferMemoryDeviceGroupInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+} VkBindBufferMemoryDeviceGroupInfoKHX;
+
+typedef struct VkBindImageMemoryDeviceGroupInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t deviceIndexCount;
+ const uint32_t* pDeviceIndices;
+ uint32_t SFRRectCount;
+ const VkRect2D* pSFRRects;
+} VkBindImageMemoryDeviceGroupInfoKHX;
+
+typedef struct VkBindImageMemorySwapchainInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint32_t imageIndex;
+} VkBindImageMemorySwapchainInfoKHX;
+
+typedef struct VkAcquireNextImageInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkSwapchainKHR swapchain;
+ uint64_t timeout;
+ VkSemaphore semaphore;
+ VkFence fence;
+ uint32_t deviceMask;
+} VkAcquireNextImageInfoKHX;
+
+typedef struct VkDeviceGroupPresentInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t swapchainCount;
+ const uint32_t* pDeviceMasks;
+ VkDeviceGroupPresentModeFlagBitsKHX mode;
+} VkDeviceGroupPresentInfoKHX;
+
+typedef struct VkDeviceGroupSwapchainCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceGroupPresentModeFlagsKHX modes;
+} VkDeviceGroupSwapchainCreateInfoKHX;
+
+
+typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHX)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHX)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
+typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHX)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes);
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex);
+typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHX)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX(
+ VkDevice device,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
+ VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHX(
+ VkCommandBuffer commandBuffer,
+ uint32_t deviceMask);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX(
+ VkDevice device,
+ VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX(
+ VkDevice device,
+ VkSurfaceKHR surface,
+ VkDeviceGroupPresentModeFlagsKHX* pModes);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX(
+ VkDevice device,
+ const VkAcquireNextImageInfoKHX* pAcquireInfo,
+ uint32_t* pImageIndex);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX(
+ VkCommandBuffer commandBuffer,
+ uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX(
+ VkPhysicalDevice physicalDevice,
+ VkSurfaceKHR surface,
+ uint32_t* pRectCount,
+ VkRect2D* pRects);
+#endif
+
+#define VK_KHX_device_group_creation 1
+#define VK_KHX_DEVICE_GROUP_CREATION_SPEC_VERSION 1
+#define VK_KHX_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHX_device_group_creation"
+
+typedef struct VkPhysicalDeviceGroupPropertiesKHX {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t physicalDeviceCount;
+ VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
+ VkBool32 subsetAllocation;
+} VkPhysicalDeviceGroupPropertiesKHX;
+
+typedef struct VkDeviceGroupDeviceCreateInfoKHX {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t physicalDeviceCount;
+ const VkPhysicalDevice* pPhysicalDevices;
+} VkDeviceGroupDeviceCreateInfoKHX;
+
+
+typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHX)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX(
+ VkInstance instance,
+ uint32_t* pPhysicalDeviceGroupCount,
+ VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
+#endif
+
#define VK_KHR_bind_memory2 1
#define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1
#define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2"
diff --git a/framework/common/tcuCommandLine.cpp b/framework/common/tcuCommandLine.cpp
index 99c6faa..e6d4b32 100644
--- a/framework/common/tcuCommandLine.cpp
+++ b/framework/common/tcuCommandLine.cpp
@@ -86,6 +86,7 @@
DE_DECLARE_COMMAND_LINE_OPT(LogShaderSources, bool);
DE_DECLARE_COMMAND_LINE_OPT(TestOOM, bool);
DE_DECLARE_COMMAND_LINE_OPT(VKDeviceID, int);
+DE_DECLARE_COMMAND_LINE_OPT(VKDeviceGroupID, int);
DE_DECLARE_COMMAND_LINE_OPT(LogFlush, bool);
DE_DECLARE_COMMAND_LINE_OPT(Validation, bool);
@@ -171,6 +172,7 @@
<< Option<EGLWindowType> (DE_NULL, "deqp-egl-window-type", "EGL native window type")
<< Option<EGLPixmapType> (DE_NULL, "deqp-egl-pixmap-type", "EGL native pixmap type")
<< Option<VKDeviceID> (DE_NULL, "deqp-vk-device-id", "Vulkan device ID (IDs start from 1)", "1")
+ << Option<VKDeviceGroupID> (DE_NULL, "deqp-vk-device-group-id", "Vulkan device Group ID (IDs start from 1)", "1")
<< Option<LogImages> (DE_NULL, "deqp-log-images", "Enable or disable logging of result images", s_enableNames, "enable")
<< Option<LogShaderSources> (DE_NULL, "deqp-log-shader-sources", "Enable or disable logging of shader sources", s_enableNames, "enable")
<< Option<TestOOM> (DE_NULL, "deqp-test-oom", "Run tests that exhaust memory on purpose", s_enableNames, TEST_OOM_DEFAULT)
@@ -786,6 +788,7 @@
int CommandLine::getCLPlatformId (void) const { return m_cmdLine.getOption<opt::CLPlatformID>(); }
const std::vector<int>& CommandLine::getCLDeviceIds (void) const { return m_cmdLine.getOption<opt::CLDeviceIDs>(); }
int CommandLine::getVKDeviceId (void) const { return m_cmdLine.getOption<opt::VKDeviceID>(); }
+int CommandLine::getVKDeviceGroupId (void) const { return m_cmdLine.getOption<opt::VKDeviceGroupID>(); }
bool CommandLine::isValidationEnabled (void) const { return m_cmdLine.getOption<opt::Validation>(); }
bool CommandLine::isOutOfMemoryTestEnabled (void) const { return m_cmdLine.getOption<opt::TestOOM>(); }
diff --git a/framework/common/tcuCommandLine.hpp b/framework/common/tcuCommandLine.hpp
index 65388a2..c25951d 100644
--- a/framework/common/tcuCommandLine.hpp
+++ b/framework/common/tcuCommandLine.hpp
@@ -202,6 +202,9 @@
//! Get Vulkan device ID (--deqp-vk-device-id)
int getVKDeviceId (void) const;
+ //! Get Vulkan device group ID (--deqp-vk-device-group-id)
+ int getVKDeviceGroupId (void) const;
+
//! Enable development-time test case validation checks
bool isValidationEnabled (void) const;