Fix use of sparse binding queue on default context
authorDaniel Koch <dkoch@nvidia.com>
Wed, 31 Jan 2018 22:22:15 +0000 (17:22 -0500)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Mon, 5 Feb 2018 08:21:56 +0000 (03:21 -0500)
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

index 5215cd9..11bc384 100644 (file)
@@ -156,7 +156,7 @@ Move<VkDevice> createDefaultDevice (const InstanceInterface&                        vki,
        vector<const char*>                     layerPtrs;
        vector<const char*>                     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<VkDevice> 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;