Fix MultisampleRenderPassTest layout transitions
authorTony Barbour <tony@LunarG.com>
Wed, 28 Jun 2017 16:41:39 +0000 (10:41 -0600)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 11 Aug 2017 14:02:01 +0000 (10:02 -0400)
Section 6.6 of the Vulkan spec says:

If vkCmdPipelineBarrier is called within a render pass instance, the
oldLayout and newLayout members of an element of pImageMemoryBarriers
must be equal

so move the layout transition in this test to be outside the renderpass

Affects:

dEQP-VK.renderpass.multisample_resolve.*

Components: Vulkan

VK-GL-CTS Issue: 540

(cherry picked from commit 4e82d99e448dd22a697e3eff3b0fd1faf1e017c6)

Change-Id: Icddf8d7cb2b584a0db9e4569dcff6be66af1736e

external/vulkancts/modules/vulkan/renderpass/vktRenderPassMultisampleResolveTests.cpp

index c261e2a..3751afb 100644 (file)
@@ -875,26 +875,6 @@ void MultisampleRenderPassTestInstance::submit (void)
                VK_CHECK(vkd.beginCommandBuffer(*commandBuffer, &beginInfo));
        }
 
-       {
-               const VkRenderPassBeginInfo beginInfo =
-               {
-                       VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-                       DE_NULL,
-
-                       *m_renderPass,
-                       *m_framebuffer,
-
-                       {
-                               { 0u, 0u },
-                               { m_width, m_height }
-                       },
-
-                       0u,
-                       DE_NULL
-               };
-               vkd.cmdBeginRenderPass(*commandBuffer, &beginInfo, VK_SUBPASS_CONTENTS_INLINE);
-       }
-
        // Memory barriers between previous copies and rendering
        {
                std::vector<VkImageMemoryBarrier> barriers;
@@ -931,6 +911,26 @@ void MultisampleRenderPassTestInstance::submit (void)
                vkd.cmdPipelineBarrier(*commandBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0u, 0u, DE_NULL, 0u, DE_NULL, (deUint32)barriers.size(), &barriers[0]);
        }
 
+       {
+               const VkRenderPassBeginInfo beginInfo =
+               {
+                       VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                       DE_NULL,
+
+                       *m_renderPass,
+                       *m_framebuffer,
+
+                       {
+                               { 0u, 0u },
+                               { m_width, m_height }
+                       },
+
+                       0u,
+                       DE_NULL
+               };
+               vkd.cmdBeginRenderPass(*commandBuffer, &beginInfo, VK_SUBPASS_CONTENTS_INLINE);
+       }
+
        // Clear everything to black
        {
                const tcu::TextureFormat                        format                  (mapVkFormat(m_format));