Fixes timeline semaphore test queues
authorMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 11 Jun 2020 05:04:56 +0000 (01:04 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 12 Jun 2020 08:34:05 +0000 (04:34 -0400)
Components: Vulkan
VK-GL-CTS Issue: 2416

Affects:
dEQP-VK.synchronization.timeline_semaphore

Change-Id: I3c101c869267c7bb747c53193195108df5996e70

external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp

index cc2db0c..3b8f959 100644 (file)
@@ -1597,8 +1597,12 @@ public:
                                for (deUint32 instanceIdx = 0; instanceIdx < queueFamilyProperties[familyIdx].queueCount && !added; instanceIdx++) {
                                        VkQueueFlags    readOpQueueFlags        = readOp->getQueueFlags(m_opContext);
 
-                                       if ((readOpQueueFlags & queueFamilyProperties[familyIdx].queueFlags) != readOpQueueFlags)
-                                                       continue;
+                                       // If the readOpQueueFlags contain the transfer bit set then check if the queue supports graphics or compute operations before skipping this iteration.
+                                       // Because reporting transfer functionality is optional if a queue supports graphics or compute operations.
+                                       if (((readOpQueueFlags & queueFamilyProperties[familyIdx].queueFlags) != readOpQueueFlags) &&
+                                               (((readOpQueueFlags & VK_QUEUE_TRANSFER_BIT) == 0) ||
+                                               ((queueFamilyProperties[familyIdx].queueFlags & (VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT)) == 0)))
+                                               continue;
 
                                        // Add the read operation on the universal queue, it should be
                                        // submitted in order with regard to the write operation.