Fix use of binary semaphore in signaled state
authorLars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Fri, 23 Apr 2021 10:04:44 +0000 (12:04 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 1 Jul 2021 09:42:13 +0000 (09:42 +0000)
Vulkan spec specifies that binary semaphore waits and signals should
occur in discrete 1:1 pairs.

This change ensures that the binary semaphore signaled by
synchronizationWrapper[SECOND] is waited on before being used again,
which resolves the corresponding validation layer error.

In addition, the change fixes an issue where the second submission pair
did not correctly swap semaphore info.

Components: Vulkan

Affects:
dEQP-VK.synchronization.basic.binary_semaphore.multi_queue
dEQP-VK.synchronization.basic.binary_semaphore.multi_queue_typed
dEQP-VK.synchronization.basic.timeline_semaphore.multi_queue

VK-GL-CTS Issue: 2910

Change-Id: Id2fb2211a43150e3acb5c07dd6c205c7a42296d5
(cherry picked from commit a017db3c0d1fbf89f30253254d57fb869f57a430)

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

index 124ec52..ab67d95 100644 (file)
@@ -448,12 +448,12 @@ tcu::TestStatus basicMultiQueueCase(Context& context, TestConfig config)
                        isTimelineSemaphore
                );
                synchronizationWrapper[SECOND]->addSubmitInfo(
-                       0u,                                                                                                     // deUint32                                                             waitSemaphoreInfoCount
-                       DE_NULL,                                                                                        // const VkSemaphoreSubmitInfoKHR*              pWaitSemaphoreInfos
-                       1u,                                                                                                     // deUint32                                                             commandBufferInfoCount
-                       &commandBufferInfo[SECOND],                                                     // const VkCommandBufferSubmitInfoKHR*  pCommandBufferInfos
-                       1u,                                                                                                     // deUint32                                                             signalSemaphoreInfoCount
-                       &signalSemaphoreSubmitInfo[SECOND],                                     // const VkSemaphoreSubmitInfoKHR*              pSignalSemaphoreInfos
+                       isTimelineSemaphore ? 0u : 1u,                                                          // deUint32                                                             waitSemaphoreInfoCount
+                       isTimelineSemaphore ? DE_NULL : &waitSemaphoreSubmitInfo,       // const VkSemaphoreSubmitInfoKHR*              pWaitSemaphoreInfos
+                       1u,                                                                                                                     // deUint32                                                             commandBufferInfoCount
+                       &commandBufferInfo[SECOND],                                                                     // const VkCommandBufferSubmitInfoKHR*  pCommandBufferInfos
+                       1u,                                                                                                                     // deUint32                                                             signalSemaphoreInfoCount
+                       &signalSemaphoreSubmitInfo[FIRST],                                                      // const VkSemaphoreSubmitInfoKHR*              pSignalSemaphoreInfos
                        DE_FALSE,
                        isTimelineSemaphore
                );