From b0810ab95bf68ee31397529fc33c36b5f01e275c Mon Sep 17 00:00:00 2001 From: Mike Byrne Date: Thu, 16 Jun 2022 11:00:53 +0000 Subject: [PATCH] Fix barriers in dynamic rendering fragment density tests Addeded additional barrier to ensure work on subsampled image is complete before copy to output image. Affects: dEQP-VK.dynamic_rendering.fragment_* Components: Vulkan VK-GL-CTS Issue: 3796 Change-Id: I5875f22b7fd3ccb47c9762067cb57048011115c0 --- .../vktRenderPassFragmentDensityMapTests.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp index d54853a..e0185fd 100644 --- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp +++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassFragmentDensityMapTests.cpp @@ -1947,7 +1947,7 @@ FragmentDensityMapTestInstance::FragmentDensityMapTestInstance(Context& conte // Render subsampled image if (isDynamicRendering) { - // barier that will change layout of color and resolve attachments + // barrier that will change layout of color and resolve attachments std::vector cbImageBarrier(2, makeImageMemoryBarrier( VK_ACCESS_NONE_KHR, // VkAccessFlags srcAccessMask; VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; @@ -1996,7 +1996,6 @@ FragmentDensityMapTestInstance::FragmentDensityMapTestInstance(Context& conte DE_NULL, // const VkRenderingAttachmentInfoKHR* pDepthAttachment; DE_NULL, // const VkRenderingAttachmentInfoKHR* pStencilAttachment; }; - vk.cmdBeginRendering(*m_cmdBuffer, &renderingInfo); } else @@ -2102,13 +2101,26 @@ FragmentDensityMapTestInstance::FragmentDensityMapTestInstance(Context& conte renderPassWrapper->cmdEndRenderPass(*m_cmdBuffer); } + // Add barrier to ensure work on subsampled image is complete before copying to output image. + VkImageMemoryBarrier subsampledImageBarrier = makeImageMemoryBarrier( + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT , // VkAccessFlags srcAccessMask; + VK_ACCESS_SHADER_READ_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // VkImageLayout newLayout; + *m_colorImage, // VkImage image; + colorSubresourceRange // VkImageSubresourceRange subresourceRange; + ); + + vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + 0, 0, DE_NULL, 0, DE_NULL, 1u, &subsampledImageBarrier); + // Copy subsampled image to normal image using sampler that is able to read from subsampled images // (subsampled image cannot be copied using vkCmdCopyImageToBuffer) if (isDynamicRendering) { // barrier that will change layout of output image VkImageMemoryBarrier outputImageBarrier = makeImageMemoryBarrier( - VK_ACCESS_NONE_KHR, // VkAccessFlags srcAccessMask; + VK_ACCESS_NONE_KHR, // VkAccessFlags srcAccessMask; VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask; VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout; -- 2.7.4