Fix RenderPass stencilLoadOp synchronization hazards.
authorJeremy Gebben <jeremyg@lunarg.com>
Thu, 5 Nov 2020 00:12:27 +0000 (17:12 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 18 Dec 2020 08:08:21 +0000 (08:08 +0000)
Fix synchronization validation errors similar to:

"vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for
attachment 1 aspect depth during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD.

Access info (usage: SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ,
prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: ...)"

Load operations for attachments with a depth/stencil format execute in
the VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT pipeline stage.

LOAD_OP_LOAD requires VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT.

VK-GL-CTS Issue: 2690

Affected tests:
dEQP-VK.dynamic_state.rs_state.*
dEQP-VK.geometry.layered.*
dEQP-VK.multiview.renderpass2.depth.*

Components: Vulkan

Change-Id: I9400a50b4ed4c34cc879d1d062ac72d7ae770662

external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp
external/vulkancts/modules/vulkan/geometry/vktGeometryLayeredRenderingTests.cpp
external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp

index d487798..a6dd053 100644 (file)
@@ -306,7 +306,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_WRITE_BIT | vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_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 5a4f5e2..47a5700 100644 (file)
@@ -1457,7 +1457,7 @@ tcu::TestStatus testLayeredReadBack (Context& context, const TestParams params)
                vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &colorBarrier);
 
                if (dsUsed)
-                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &dsBarrier);
+                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, 1u, &dsBarrier);
        }
 
        {
index e2e1067..607501b 100644 (file)
@@ -3289,8 +3289,8 @@ void MultiViewDepthStencilTestInstance::beforeDraw (void)
 
        imageBarrier(*m_device, *m_cmdBuffer, m_dsAttachment->getImage(), subresourceRange,
                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
-               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
-               VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT);
+               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+               VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
 }
 
 void MultiViewDepthStencilTestInstance::afterDraw (void)