Synchronization2 - fix set/wait event usage
authorPiotr Byszewski <piotr.byszewski@mobica.com>
Thu, 30 Jul 2020 10:57:44 +0000 (12:57 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 16 Feb 2021 08:20:28 +0000 (08:20 +0000)
CmdWaitEvents2KHR valid usage states that: "For any element i of
pEvents, if that event is signaled by vkCmdSetEvent2KHR, that
commands dependencyInfo parameter must be exactly equal to the
ith element of pDependencyInfos".

Components: Vulkan

VK-GL-CTS issue: 2365

Affects:
dEQP-VK.synchronization*.op.single_queue.event.*
dEQP-VK.synchronization*.basic.event.single_submit_multi_command_buffer

Change-Id: Id9a4b5270ddb3ae9cb582e084e65c41c18c9c5c7

external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicEventTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp

index 8e92401..eb7a0d2 100644 (file)
@@ -165,10 +165,7 @@ tcu::TestStatus singleSubmissionCase (Context& context, SynchronizationType type
                                                                                                                                        makeCommonCommandBufferSubmitInfo(cmdBuffers[SET]),
                                                                                                                                        makeCommonCommandBufferSubmitInfo(cmdBuffers[WAIT])
                                                                                                                                };
-       VkDependencyInfoKHR                             dependencyInfos[]                       {
-                                                                                                                                       makeCommonDependencyInfo(),
-                                                                                                                                       makeCommonDependencyInfo()
-                                                                                                                               };
+       VkDependencyInfoKHR                             dependencyInfo                          = makeCommonDependencyInfo();
        SynchronizationWrapperPtr               synchronizationWrapper          = getSynchronizationWrapper(type, vk, DE_FALSE);
 
        synchronizationWrapper->addSubmitInfo(
@@ -181,11 +178,11 @@ tcu::TestStatus singleSubmissionCase (Context& context, SynchronizationType type
        );
 
        beginCommandBuffer(vk, cmdBuffers[SET]);
-       synchronizationWrapper->cmdSetEvent(cmdBuffers[SET], *event, &dependencyInfos[SET]);
+       synchronizationWrapper->cmdSetEvent(cmdBuffers[SET], *event, &dependencyInfo);
        endCommandBuffer(vk, cmdBuffers[SET]);
 
        beginCommandBuffer(vk, cmdBuffers[WAIT]);
-       synchronizationWrapper->cmdWaitEvents(cmdBuffers[WAIT], 1u, &event.get(), &dependencyInfos[WAIT]);
+       synchronizationWrapper->cmdWaitEvents(cmdBuffers[WAIT], 1u, &event.get(), &dependencyInfo);
        endCommandBuffer(vk, cmdBuffers[WAIT]);
 
        VK_CHECK(synchronizationWrapper->queueSubmit(queue, *fence));
index 53dc51e..f228b31 100644 (file)
@@ -97,19 +97,6 @@ public:
 
                m_writeOp->recordCommands(*cmdBuffer);
 
-               VkMemoryBarrier2KHR memoryBarrier2
-               {
-                       VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR,                         // VkStructureType                                      sType
-                       DE_NULL,                                                                                        // const void*                                          pNext
-                       writeSync.stageMask,                                                            // 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
-               };
-
-               VkDependencyInfoKHR memoryDependencyInfo = makeCommonDependencyInfo(&memoryBarrier2);
-               synchronizationWrapper->cmdSetEvent(*cmdBuffer, *event, &memoryDependencyInfo);
-
                if (m_resource->getType() == RESOURCE_TYPE_BUFFER || isIndirectBuffer(m_resource->getType()))
                {
                        const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
@@ -122,6 +109,7 @@ public:
                                m_resource->getBuffer().size                                    // VkDeviceSize                                         size
                        );
                        VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdSetEvent(*cmdBuffer, *event, &dependencyInfo);
                        synchronizationWrapper->cmdWaitEvents(*cmdBuffer, 1u, &event.get(), &dependencyInfo);
                }
                else if (m_resource->getType() == RESOURCE_TYPE_IMAGE)
@@ -137,6 +125,7 @@ public:
                                m_resource->getImage().subresourceRange                 // VkImageSubresourceRange                      subresourceRange
                        );
                        VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdSetEvent(*cmdBuffer, *event, &dependencyInfo);
                        synchronizationWrapper->cmdWaitEvents(*cmdBuffer, 1u, &event.get(), &dependencyInfo);
                }