From 3926b410a39d35a279c909524d50f08646637724 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Wed, 31 Jan 2018 17:22:15 -0500 Subject: [PATCH] Fix use of sparse binding queue on default context Avoid trying to create two separate queues when the queueIndex and sparseQueueIndex are the same, as this violates valid usage which states: "The queueFamilyIndex member of each element of pQueueCreateInfos must be unique within pQueueCreateInfos" Affects: All vulkan tests The forerunner change claimed it only affected the following specifically: dEQP-VK.texture.shadow.* dEQP-VK.renderpass.sparserendertarget.* Component: Vuklan VK-GL-CTS issue: 898, 964 Change-Id: I342e11f9a63eab875336b8078890e677a5d29a2d --- external/vulkancts/modules/vulkan/vktTestCase.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/external/vulkancts/modules/vulkan/vktTestCase.cpp b/external/vulkancts/modules/vulkan/vktTestCase.cpp index 5215cd9..11bc384 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.cpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.cpp @@ -156,7 +156,7 @@ Move createDefaultDevice (const InstanceInterface& vki, vector layerPtrs; vector extensionPtrs; const float queuePriority = 1.0f; - const deUint32 numQueues = enabledFeatures.features.sparseBinding ? 2 : 1; + const deUint32 numQueues = (enabledFeatures.features.sparseBinding && (queueIndex != sparseQueueIndex)) ? 2 : 1; deMemset(&queueInfo, 0, sizeof(queueInfo)); deMemset(&deviceInfo, 0, sizeof(deviceInfo)); @@ -185,12 +185,15 @@ Move createDefaultDevice (const InstanceInterface& vki, queueInfo[0].queueCount = 1u; queueInfo[0].pQueuePriorities = &queuePriority; - queueInfo[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; - queueInfo[1].pNext = DE_NULL; - queueInfo[1].flags = (VkDeviceQueueCreateFlags)0u; - queueInfo[1].queueFamilyIndex = sparseQueueIndex; - queueInfo[1].queueCount = 1u; - queueInfo[1].pQueuePriorities = &queuePriority; + if (numQueues > 1) + { + queueInfo[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueInfo[1].pNext = DE_NULL; + queueInfo[1].flags = (VkDeviceQueueCreateFlags)0u; + queueInfo[1].queueFamilyIndex = sparseQueueIndex; + queueInfo[1].queueCount = 1u; + queueInfo[1].pQueuePriorities = &queuePriority; + } // VK_KHR_get_physical_device_properties2 is used if enabledFeatures.pNext != 0 deviceInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; -- 2.7.4