Add missing memory barrier to draw tests.
authorzeppelin <zeppelin@vivantecorp.com>
Fri, 1 Apr 2016 23:09:55 +0000 (16:09 -0700)
committerPyry Haulos <phaulos@google.com>
Thu, 7 Apr 2016 20:25:02 +0000 (13:25 -0700)
Fixes #352

external/vulkancts/modules/vulkan/draw/vktDrawBaseClass.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateBaseClass.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp

index 3be2628..ab5c370 100644 (file)
@@ -205,6 +205,18 @@ void DrawTestsBaseClass::beginRenderPass (void)
        m_vk.cmdClearColorImage(*m_cmdBuffer, m_colorTargetImage->object(),
                vk::VK_IMAGE_LAYOUT_GENERAL, &clearColor, 1, &subresourceRange);
 
+       const vk::VkMemoryBarrier memBarrier =
+       {
+               vk::VK_STRUCTURE_TYPE_MEMORY_BARRIER,
+               DE_NULL,
+               vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+               vk::VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
+       };
+
+       m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+               vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+               0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
+
        const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } };
        const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea);
 
index 3f47dd0..d44d80e 100644 (file)
@@ -206,6 +206,18 @@ void DynamicStateBaseClass::beginRenderPassWithClearColor (const vk::VkClearColo
        m_vk.cmdClearColorImage(*m_cmdBuffer, m_colorTargetImage->object(),
                vk::VK_IMAGE_LAYOUT_GENERAL, &clearColor, 1, &subresourceRange);
 
+       const vk::VkMemoryBarrier memBarrier =
+       {
+               vk::VK_STRUCTURE_TYPE_MEMORY_BARRIER,
+               DE_NULL,
+               vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+               vk::VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
+       };
+
+       m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+               vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
+               0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
+
        const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } };
        const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea);
 
index 6ad540f..17c2043 100644 (file)
@@ -302,6 +302,20 @@ protected:
                m_vk.cmdClearDepthStencilImage(*m_cmdBuffer, m_depthStencilImage->object(),
                                                                           vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &depthStencilClearValue, 2, subresourceRangeDepthStencil);
 
+               const vk::VkMemoryBarrier memBarrier =
+               {
+                       vk::VK_STRUCTURE_TYPE_MEMORY_BARRIER,
+                       DE_NULL,
+                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,
+                       vk::VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
+                               vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
+               };
+
+               m_vk.cmdPipelineBarrier(*m_cmdBuffer, vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                       vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
+                       vk::VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | vk::VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
+                       0, 1, &memBarrier, 0, DE_NULL, 0, DE_NULL);
+
                const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } };
                const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea);