Add tests for 0 pWaitDstStageMask in VkSubmitInfo and events.
authorAmber <amber@igalia.com>
Fri, 11 Nov 2022 10:04:38 +0000 (11:04 +0100)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Thu, 8 Dec 2022 23:00:59 +0000 (23:00 +0000)
VK-GL-CTS issue: 3904

Components: Vulkan

New tests:
dEQP-VK.synchronization2.basic.event.none_set_reset
dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit

Change-Id: I54647969f51e2cb9f209b7a9d029bd3c83dbb822

android/cts/main/vk-master-2022-03-01/synchronization2.txt
android/cts/main/vk-master/synchronization2.txt
android/cts/main/vksc-main/synchronization2.txt
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp
external/vulkancts/mustpass/main/vk-default/synchronization2.txt
external/vulkancts/mustpass/main/vksc-default/synchronization2.txt

index 3fa439e..858456b 100644 (file)
@@ -5383,3 +5383,5 @@ dEQP-VK.synchronization2.cross_instance.dedicated.write_indirect_buffer_dispatch
 dEQP-VK.synchronization2.cross_instance.dedicated.write_indirect_buffer_dispatch_read_indirect_buffer_dispatch.indirect_buffer_timeline_semaphore_zircon_handle
 dEQP-VK.synchronization2.cross_instance.dedicated.write_update_index_buffer_read_index_input.buffer_20_binary_semaphore_zircon_handle
 dEQP-VK.synchronization2.cross_instance.dedicated.write_update_index_buffer_read_index_input.buffer_20_timeline_semaphore_zircon_handle
+dEQP-VK.synchronization2.basic.event.none_set_reset
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
index ae53378..683de5e 100644 (file)
@@ -55152,6 +55152,7 @@ dEQP-VK.synchronization2.basic.event.device_set_reset
 dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer
 dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer
 dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VK.synchronization2.basic.event.none_set_reset
 dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
 dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
 dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer_device_only
@@ -55159,6 +55160,7 @@ dEQP-VK.synchronization2.basic.binary_semaphore.one_queue
 dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue
 dEQP-VK.synchronization2.basic.binary_semaphore.one_queue_typed
 dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
 dEQP-VK.synchronization2.basic.binary_semaphore.chain
 dEQP-VK.synchronization2.basic.timeline_semaphore.one_queue
 dEQP-VK.synchronization2.basic.timeline_semaphore.multi_queue
index 94842ce..34f2793 100644 (file)
@@ -17684,6 +17684,7 @@ dEQP-VKSC.synchronization2.basic.event.device_set_reset
 dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer
 dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer
 dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VKSC.synchronization2.basic.event.none_set_reset
 dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
 dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
 dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer_device_only
@@ -17691,6 +17692,7 @@ dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue
 dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue
 dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue_typed
 dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VKSC.synchronization2.basic.binary_semaphore.none_wait_submit
 dEQP-VKSC.synchronization2.basic.binary_semaphore.chain
 dEQP-VKSC.synchronization2.basic.timeline_semaphore.one_queue
 dEQP-VKSC.synchronization2.basic.timeline_semaphore.multi_queue
index dad0912..c3dfedd 100644 (file)
@@ -158,6 +158,74 @@ tcu::TestStatus deviceResetSetEventCase (Context& context, TestConfig config)
        return tcu::TestStatus::pass("Device set and reset event tests pass");
 }
 
+tcu::TestStatus eventSetResetNoneStage (Context& context, TestConfig)
+{
+       const DeviceInterface&                                                  vk                                                              = context.getDeviceInterface();
+       const VkDevice                                                                                  device                                          = context.getDevice();
+       const VkQueue                                                                                           queue                                                   = context.getUniversalQueue();
+       const deUint32                                                                                  queueFamilyIndex        = context.getUniversalQueueFamilyIndex();
+       const Unique<VkCommandPool>                                     cmdPool                                 (makeCommandPool(vk, device, queueFamilyIndex));
+       const Unique<VkCommandBuffer>                           cmdBuffer                               (makeCommandBuffer(vk, device, *cmdPool));
+       const Unique<VkEvent>                                                           event                                   (createEvent(vk, device));
+       const VkCommandBufferSubmitInfoKHR      commandBufferSubmitInfo = makeCommonCommandBufferSubmitInfo(cmdBuffer.get());
+       const VkMemoryBarrier2KHR                       memoryBarrier2                  =
+       {
+               VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, // VkStructureType                                      sType
+               DE_NULL,                                                                                                                                // const void*                                                  pNext
+               VK_PIPELINE_STAGE_NONE_KHR,                                                     // VkPipelineStageFlags2KHR     srcStageMask
+               VK_ACCESS_2_NONE_KHR,                                                                           // VkAccessFlags2KHR                            srcAccessMask
+               VK_PIPELINE_STAGE_2_HOST_BIT_KHR,                               // VkPipelineStageFlags2KHR     dstStageMask
+               VK_ACCESS_2_HOST_READ_BIT_KHR                                           // VkAccessFlags2KHR                            dstAccessMask
+       };
+       const VkDependencyInfoKHR       dependencyInfo = makeCommonDependencyInfo(&memoryBarrier2, DE_NULL, DE_NULL, DE_TRUE);
+
+       SynchronizationWrapperPtr synchronizationWrapper = getSynchronizationWrapper(SynchronizationType::SYNCHRONIZATION2, vk, DE_FALSE);
+
+       beginCommandBuffer(vk, *cmdBuffer, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+       synchronizationWrapper->cmdSetEvent(*cmdBuffer, *event, &dependencyInfo);
+       endCommandBuffer(vk, *cmdBuffer);
+
+       synchronizationWrapper->addSubmitInfo(
+               0u,                                                                                                     // deUint32                                                             waitSemaphoreInfoCount
+               DE_NULL,                                                                                // const VkSemaphoreSubmitInfoKHR*              pWaitSemaphoreInfos
+               1u,                                                                                                     // deUint32                                                             commandBufferInfoCount
+               &commandBufferSubmitInfo,               // const VkCommandBufferSubmitInfoKHR*  pCommandBufferInfos
+               0u,                                                                                                     // deUint32                                                             signalSemaphoreInfoCount
+               DE_NULL                                                                                 // const VkSemaphoreSubmitInfoKHR*              pSignalSemaphoreInfos
+       );
+
+       VK_CHECK(synchronizationWrapper->queueSubmit(queue, DE_NULL));
+       VK_CHECK(vk.queueWaitIdle(queue));
+       context.resetCommandPoolForVKSC(device, *cmdPool);
+
+       if (VK_EVENT_SET != vk.getEventStatus(device, *event))
+               return tcu::TestStatus::fail("Event should be in signaled state after set");
+       {
+       //      SynchronizationWrapperPtr synchronizationWrapper = getSynchronizationWrapper(SynchronizationType::SYNCHRONIZATION2, vk, DE_FALSE);
+               beginCommandBuffer(vk, *cmdBuffer, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
+               synchronizationWrapper->cmdResetEvent(*cmdBuffer, *event, VK_PIPELINE_STAGE_NONE_KHR);
+               endCommandBuffer(vk, *cmdBuffer);
+
+               synchronizationWrapper->addSubmitInfo(
+                       0u,                                                                                                                                             // deUint32                                                             waitSemaphoreInfoCount
+                       DE_NULL,                                                                                                                        // const VkSemaphoreSubmitInfoKHR*              pWaitSemaphoreInfos
+                       1u,                                                                                                                                             // deUint32                                                             commandBufferInfoCount
+                       &commandBufferSubmitInfo,                                                       // const VkCommandBufferSubmitInfoKHR*  pCommandBufferInfos
+                       0u,                                                                                                                                             // deUint32                                                             signalSemaphoreInfoCount
+                       DE_NULL                                                                                                                         // const VkSemaphoreSubmitInfoKHR*              pSignalSemaphoreInfos
+               );
+
+               VK_CHECK(synchronizationWrapper->queueSubmit(queue, DE_NULL));
+       }
+
+       VK_CHECK(vk.queueWaitIdle(queue));
+
+       if (VK_EVENT_RESET != vk.getEventStatus(device, *event))
+               return tcu::TestStatus::fail("Event should be in unsignaled state after reset");
+
+       return tcu::TestStatus::pass("Pass");
+}
+
 tcu::TestStatus singleSubmissionCase (Context& context, TestConfig config)
 {
        enum {SET=0, WAIT, COUNT};
@@ -399,6 +467,7 @@ tcu::TestCaseGroup* createSynchronization2BasicEventTests (tcu::TestContext& tes
        addFunctionCase(basicTests.get(), "single_submit_multi_command_buffer", "Wait and set event single submission on device", checkSupport, singleSubmissionCase, config);
        addFunctionCase(basicTests.get(), "multi_submit_multi_command_buffer", "Wait and set event mutli submission on device", checkSupport, multiSubmissionCase, config);
        addFunctionCase(basicTests.get(), "multi_secondary_command_buffer", "Event used on secondary command buffer ", checkSecondaryBufferSupport, secondaryCommandBufferCase, config);
+       addFunctionCase(basicTests.get(), "none_set_reset", "Event set and reset using the none pipeline stage ", checkSupport, eventSetResetNoneStage, config);
 
        config.flags = VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR;
        addFunctionCase(basicTests.get(), "single_submit_multi_command_buffer_device_only", "Wait and set GPU-only event single submission", checkSupport, singleSubmissionCase, config);
index 93989bf..61f547e 100644 (file)
@@ -124,6 +124,79 @@ tcu::TestStatus basicOneQueueCase (Context& context, const TestConfig config)
        return tcu::TestStatus::pass("Basic semaphore tests with one queue passed");
 }
 
+tcu::TestStatus noneWaitSubmitTest (Context& context, const TestConfig config)
+{
+       const DeviceInterface&                  vk                                                                              = context.getDeviceInterface();
+       const VkDevice                                                  device                                                          = context.getDevice();
+       const VkQueue                                                           queue                                                                   = context.getUniversalQueue();
+       const deUint32                                                  queueFamilyIndex                        = context.getUniversalQueueFamilyIndex();
+
+       const Unique<VkSemaphore>                       semaphore                                       (createTestSemaphore(context, vk, device, config));
+       const Unique<VkCommandPool>             cmdPool                                         (createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex));
+
+               const Unique<VkCommandBuffer>   firstbuffer                                     (makeCommandBuffer(vk, device, *cmdPool));
+       const Unique<VkCommandBuffer>   secondBuffer                            (makeCommandBuffer(vk, device, *cmdPool));
+
+       const VkCommandBufferBeginInfo  info                                            {
+                                                                                                                                       VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,    // VkStructureType                          sType;
+                                                                                                                                       DE_NULL,                                                                                                                                                        // const void*                              pNext;
+                                                                                                                                       VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,   // VkCommandBufferUsageFlags                flags;
+                                                                                                                                       DE_NULL,                                                                                                                                                        // const VkCommandBufferInheritanceInfo*    pInheritanceInfo;
+                                                                                                                               };
+       const Unique<VkFence>                   fence1                                  (createFence(vk, device));
+       const Unique<VkFence>                   fence2                                  (createFence(vk, device));
+       const Unique<VkEvent>                   event                                           (createEvent(vk, device));
+
+       VK_CHECK(vk.beginCommandBuffer(*firstbuffer, &info));
+       endCommandBuffer(vk, *firstbuffer);
+
+       const VkSubmitInfo firstSubmitInfo {
+               VK_STRUCTURE_TYPE_SUBMIT_INFO,  //VkStructureType sType
+               DE_NULL,                                                                                                //const void* pNext
+               0u,                                                                                                                     //uint32_t waitSemaphoreCount
+               DE_NULL,                                                                                                //const VkSemaphore* pWaitSemaphores
+               DE_NULL,                                                                                                //const VkPipelineStageFlags* pWaitDstStageMask
+               1u,                                                                                                                     //uint32_t commandBufferCount
+               &firstbuffer.get(),                                                     //const VkCommandBuffer* pCommandBuffers
+               1,                                                                                                                      //uint32_t signalSemaphoreCount
+               &semaphore.get()                                                                //const VkSemaphore* pSignalSemaphores
+       };
+
+       //check if waiting on an event in the none stage works as expected
+       VkPipelineStageFlags waitStages[] = {VK_PIPELINE_STAGE_NONE_KHR};
+
+       const VkSubmitInfo secondSubmitInfo {
+               VK_STRUCTURE_TYPE_SUBMIT_INFO,  //VkStructureType sType
+               DE_NULL,                                                                                                //const void* pNext
+               1u,                                                                                                                     //uint32_t waitSemaphoreCount
+               &semaphore.get(),                                                               //const VkSemaphore* pWaitSemaphores
+               waitStages,                                                                                     //const VkPipelineStageFlags* pWaitDstStageMask
+               1u,                                                                                                                     //uint32_t commandBufferCount
+               &secondBuffer.get(),                                                    //const VkCommandBuffer* pCommandBuffers
+               0,                                                                                                                      //uint32_t signalSemaphoreCount
+               DE_NULL                                                                                                 //const VkSemaphore* pSignalSemaphores
+       };
+
+       VK_CHECK(vk.beginCommandBuffer(*secondBuffer, &info));
+       vk.cmdSetEvent(*secondBuffer, event.get(), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
+       endCommandBuffer(vk, *secondBuffer);
+
+       VK_CHECK(vk.queueSubmit(queue, 1, &firstSubmitInfo,  fence1.get()));
+       VK_CHECK(vk.queueSubmit(queue, 1, &secondSubmitInfo, fence2.get()));
+       VK_CHECK(vk.queueWaitIdle(queue));
+
+       if (VK_SUCCESS != vk.waitForFences(device, 1u, &fence1.get(), DE_TRUE, FENCE_WAIT))
+               return tcu::TestStatus::fail("None stage test failed, failed to wait for fence");
+
+       if (VK_SUCCESS != vk.waitForFences(device, 1u, &fence2.get(), DE_TRUE, FENCE_WAIT))
+               return tcu::TestStatus::fail("None stage test failed, failed to wait for the second fence");
+
+       if (vk.getEventStatus(device, event.get()) != VK_EVENT_SET)
+               return tcu::TestStatus::fail("None stage test failed, event isn't set");
+
+       return tcu::TestStatus::pass("Pass");
+}
+
 tcu::TestStatus basicChainCase(Context & context, TestConfig config)
 {
        VkResult                                                                err                                                     = VK_SUCCESS;
@@ -647,6 +720,9 @@ tcu::TestCaseGroup* createBasicBinarySemaphoreTests (tcu::TestContext& testCtx,
                addFunctionCase(basicTests.get(), "multi_queue" + createName,   "Basic binary semaphore tests with multi queue",        checkCommandBufferSimultaneousUseSupport,       basicMultiQueueCase, config);
        }
 
+       if (type == SynchronizationType::SYNCHRONIZATION2)
+               addFunctionCase(basicTests.get(), "none_wait_submit", "Test waiting on the none pipeline stage",        checkCommandBufferSimultaneousUseSupport, noneWaitSubmitTest, config);
+
        addFunctionCase(basicTests.get(), "chain", "Binary semaphore chain test", checkSupport, basicChainCase, config);
 
        return basicTests.release();
index ae53378..683de5e 100644 (file)
@@ -55152,6 +55152,7 @@ dEQP-VK.synchronization2.basic.event.device_set_reset
 dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer
 dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer
 dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VK.synchronization2.basic.event.none_set_reset
 dEQP-VK.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
 dEQP-VK.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
 dEQP-VK.synchronization2.basic.event.multi_secondary_command_buffer_device_only
@@ -55159,6 +55160,7 @@ dEQP-VK.synchronization2.basic.binary_semaphore.one_queue
 dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue
 dEQP-VK.synchronization2.basic.binary_semaphore.one_queue_typed
 dEQP-VK.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VK.synchronization2.basic.binary_semaphore.none_wait_submit
 dEQP-VK.synchronization2.basic.binary_semaphore.chain
 dEQP-VK.synchronization2.basic.timeline_semaphore.one_queue
 dEQP-VK.synchronization2.basic.timeline_semaphore.multi_queue
index 94842ce..34f2793 100644 (file)
@@ -17684,6 +17684,7 @@ dEQP-VKSC.synchronization2.basic.event.device_set_reset
 dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer
 dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer
 dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer
+dEQP-VKSC.synchronization2.basic.event.none_set_reset
 dEQP-VKSC.synchronization2.basic.event.single_submit_multi_command_buffer_device_only
 dEQP-VKSC.synchronization2.basic.event.multi_submit_multi_command_buffer_device_only
 dEQP-VKSC.synchronization2.basic.event.multi_secondary_command_buffer_device_only
@@ -17691,6 +17692,7 @@ dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue
 dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue
 dEQP-VKSC.synchronization2.basic.binary_semaphore.one_queue_typed
 dEQP-VKSC.synchronization2.basic.binary_semaphore.multi_queue_typed
+dEQP-VKSC.synchronization2.basic.binary_semaphore.none_wait_submit
 dEQP-VKSC.synchronization2.basic.binary_semaphore.chain
 dEQP-VKSC.synchronization2.basic.timeline_semaphore.one_queue
 dEQP-VKSC.synchronization2.basic.timeline_semaphore.multi_queue