Fix additional RenderPass loadOp/stencilLoadOp sync hazards.
authorJeremy Gebben <jeremyg@lunarg.com>
Mon, 7 Dec 2020 21:06:48 +0000 (14:06 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 18 Dec 2020 08:09:02 +0000 (08:09 +0000)
Make sure test cases that use VK_LOAD_OP_LOAD have a barrier
with VK_ACCESS_INPUT_ATTACHMENT_READ_BIT or
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT in the dstAccessMask
before the RenderPass.

VK-GL-CTS Issue: 2690

Affected tests:
dEQP-VK.conditional_rendering.draw_clear.*
dEQP-VK.dynamic_state.ds_state.*
dEQP-VK.pipeline.framebuffer_attachment.*
dEQP-VK.descriptor_indexing.*

Components: Vulkan

Change-Id: I8e6df6f6aa3f63c5ad6b7396d5d395d12ad52201

external/vulkancts/modules/vulkan/conditional_rendering/vktConditionalDrawAndClearTests.cpp
external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
external/vulkancts/modules/vulkan/fragment_shader_interlock/vktFragmentShaderInterlockBasic.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineFramebufferAttachmentTests.cpp

index c8b886d..beaaae3 100644 (file)
@@ -726,7 +726,8 @@ tcu::TestStatus ConditionalRenderingClearAttachmentsTestInstance::iterate (void)
 
        imageMemoryBarrier(m_testParams.m_testDepth ? m_depthTargetImage->object() : m_colorTargetImage->object(),                                                                              //VkImage                                                       image
                                           VK_ACCESS_TRANSFER_WRITE_BIT,                                                                                                                                                                                                //VkAccessFlags                                         srcAccessMask
-                                          m_testParams.m_testDepth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT : VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                              //VkAccessFlags                                         dstAccessMask
+                                          m_testParams.m_testDepth ? (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+                                                                                               : (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT),                                         //VkAccessFlags                                         dstAccessMask
                                           VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                                                                                                                                                                                //VkImageLayout                                         oldLayout
                                           m_testParams.m_testDepth ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               //VkImageLayout                                         newLayout
                                           VK_PIPELINE_STAGE_TRANSFER_BIT,                                                                                                                                                                                              //VkPipelineStageFlags                          srcStageMask
@@ -763,7 +764,8 @@ tcu::TestStatus ConditionalRenderingClearAttachmentsTestInstance::iterate (void)
        }
 
        imageMemoryBarrier(m_testParams.m_testDepth ? m_depthTargetImage->object() : m_colorTargetImage->object(),                                                                              //VkImage                                                       image
-                                          m_testParams.m_testDepth ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT : VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                              //VkAccessFlags                                         srcAccessMask
+                                          m_testParams.m_testDepth ? (VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+                                                                                               : (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT),                                         //VkAccessFlags                                         dstAccessMask
                                           VK_ACCESS_TRANSFER_READ_BIT,                                                                                                                                                                                                 //VkAccessFlags                                         dstAccessMask
                                           m_testParams.m_testDepth ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,              //VkImageLayout                                         oldLayout
                                           VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                                                                                                                                                                                //VkImageLayout                                         newLayout
@@ -891,7 +893,7 @@ tcu::TestStatus ConditionalRenderingDrawTestInstance::iterate (void)
 
        imageMemoryBarrier(m_colorTargetImage->object(),                                                                                                                                                                //VkImage                                                       image
                                           VK_ACCESS_TRANSFER_WRITE_BIT,                                                                                                                                                                //VkAccessFlags                                         srcAccessMask
-                                          VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                                                                                                //VkAccessFlags                                         dstAccessMask
+                                          VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                  //VkAccessFlags                                         dstAccessMask
                                           VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                                                                                                                                                //VkImageLayout                                         oldLayout
                                           VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                                                                                                    //VkImageLayout                                         newLayout
                                           VK_PIPELINE_STAGE_TRANSFER_BIT,                                                                                                                                                              //VkPipelineStageFlags                          srcStageMask
@@ -1214,7 +1216,7 @@ tcu::TestStatus ConditionalRenderingUpdateBufferWithDrawTestInstance::iterate (v
 
        imageMemoryBarrier(m_colorTargetImage->object(),                                                                                                                                                                //VkImage                                                       image
                                           VK_ACCESS_TRANSFER_WRITE_BIT,                                                                                                                                                                //VkAccessFlags                                         srcAccessMask
-                                          VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                                                                                                //VkAccessFlags                                         dstAccessMask
+                                          VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                  //VkAccessFlags                                         dstAccessMask
                                           VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                                                                                                                                                //VkImageLayout                                         oldLayout
                                           VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                                                                                                    //VkImageLayout                                         newLayout
                                           VK_PIPELINE_STAGE_TRANSFER_BIT,                                                                                                                                                              //VkPipelineStageFlags                          srcStageMask
@@ -1241,7 +1243,7 @@ tcu::TestStatus ConditionalRenderingUpdateBufferWithDrawTestInstance::iterate (v
        endRenderPass(m_vkd, *m_cmdBufferPrimary);
 
        imageMemoryBarrier(m_colorTargetImage->object(),                                                                                                                                                                //VkImage                                                       image
-                                          VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                                                                                                //VkAccessFlags                                         srcAccessMask
+                                          VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                                                                                          //VkAccessFlags                                         srcAccessMask
                                           VK_ACCESS_TRANSFER_READ_BIT,                                                                                                                                                                 //VkAccessFlags                                         dstAccessMask
                                           VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                                                                                                    //VkImageLayout                                         oldLayout
                                           VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                                                                                                                                                //VkImageLayout                                         newLayout
index edb884e..1dface6 100644 (file)
@@ -1275,7 +1275,7 @@ void CommonDescriptorInstance::iterateCommandBegin                                        (IterateCommonVariables&
                                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                         // VkStructureType              sType
                                DE_NULL,                                                                                        // const void*                  pNext
                                VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlags                srcAccessMask
-                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                           // VkAccessFlags                dstAccessMask
+                               VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags            dstAccessMask
                                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                           // VkImageLayout                oldLayout
                                VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                       // VkImageLayout                newLayout
                                VK_QUEUE_FAMILY_IGNORED,                                                        // uint32_t                             srcQueueFamilyIndex
index 024ab82..982d8ba 100644 (file)
@@ -331,7 +331,7 @@ protected:
 
                transition2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT,
                                                  vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-                                                 vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+                                                 vk::VK_ACCESS_TRANSFER_WRITE_BIT, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
                                                  vk::VK_PIPELINE_STAGE_TRANSFER_BIT, vk::VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | vk::VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
 
                vk::beginRenderPass(m_vk, *m_cmdBuffer, *m_renderPass, *m_framebuffer, vk::makeRect2D(0, 0, WIDTH, HEIGHT));
index 14806a7..ba785f4 100644 (file)
@@ -389,7 +389,7 @@ tcu::TestStatus FSITestInstance::iterate (void)
        const VkDevice                  device                                  = getDevice(m_context, m_data.interlock);
        Allocator&                              allocator                               = m_context.getDefaultAllocator();
        VkFlags                                 allShaderStages                 = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;
-       VkFlags                                 allPipelineStages               = VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
+       VkFlags                                 allPipelineStages               = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
 
        VkPhysicalDeviceProperties2 properties;
        deMemset(&properties, 0, sizeof(properties));
@@ -782,7 +782,7 @@ tcu::TestStatus FSITestInstance::iterate (void)
        vk.cmdFillBuffer(*cmdBuffer, **buffer, 0, bufferSize, 0);
 
        memBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-       memBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
+       memBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
        vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, allPipelineStages,
                0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
 
index 50d6856..7d8a71f 100644 (file)
@@ -1151,7 +1151,7 @@ tcu::TestStatus testDifferentAttachmentSizes (Context& context, const CaseDef ca
                                        VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                                                 // VkStructureType                      sType;
                                        DE_NULL,                                                                                                                                                                // const void*                          pNext;
                                        VK_ACCESS_TRANSFER_WRITE_BIT,                                                                                                                   // VkAccessFlags                        srcAccessMask;
-                                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                                                   // VkAccessFlags                        dstAccessMask;
+                                       VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,                                                                                                    // VkAccessFlags                        dstAccessMask;
                                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                                                                                                   // VkImageLayout                        oldLayout;
                                        VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                                                               // VkImageLayout                        newLayout;
                                        VK_QUEUE_FAMILY_IGNORED,                                                                                                                                // deUint32                                     srcQueueFamilyIndex;