Bug Fix: Corrected barriers in the tests dEQP-VK.dynamic_state.
authorArkadiusz Sarwa <arkadiusz.sarwa@mobica.com>
Mon, 11 Apr 2016 13:30:40 +0000 (15:30 +0200)
committerPyry Haulos <phaulos@google.com>
Thu, 19 May 2016 21:43:06 +0000 (14:43 -0700)
(cherry picked from commit 188341def51b4a425163576ce1cd1c8931c45df8)

external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateDSTests.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateImageObjectUtil.cpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateImageObjectUtil.hpp
external/vulkancts/modules/vulkan/dynamic_state/vktDynamicStateRSTests.cpp

index 4f479f8..5fe145d 100644 (file)
@@ -311,7 +311,7 @@ protected:
                m_vk.beginCommandBuffer(*m_cmdBuffer, &beginInfo);
 
                initialTransitionColor2DImage(m_vk, *m_cmdBuffer, m_colorTargetImage->object(), vk::VK_IMAGE_LAYOUT_GENERAL);
-               initialTransitionDepthStencil2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
+               initialTransitionDepthStencil2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, vk::VK_ACCESS_TRANSFER_WRITE_BIT);
 
                const ImageSubresourceRange subresourceRangeImage(vk::VK_IMAGE_ASPECT_COLOR_BIT);
                m_vk.cmdClearColorImage(*m_cmdBuffer, m_colorTargetImage->object(),
@@ -338,6 +338,8 @@ protected:
                const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } };
                const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea);
 
+               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);
+
                m_vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBegin, vk::VK_SUBPASS_CONTENTS_INLINE);
        }
 
index 99014d3..e00b5b1 100644 (file)
@@ -876,22 +876,24 @@ de::SharedPtr<Image> Image::create(const vk::DeviceInterface&     vk,
 }
 
 void transition2DImage (const vk::DeviceInterface&     vk,
-                                               vk::VkCommandBuffer                             cmdBuffer,
+                                               vk::VkCommandBuffer                     cmdBuffer,
                                                vk::VkImage                                     image,
                                                vk::VkImageAspectFlags          aspectMask,
                                                vk::VkImageLayout                       oldLayout,
-                                               vk::VkImageLayout                       newLayout)
+                                               vk::VkImageLayout                       newLayout,
+                                               vk::VkAccessFlags                       srcAccessMask,
+                                               vk::VkAccessFlags                       dstAccessMask)
 {
        vk::VkImageMemoryBarrier barrier;
-       barrier.sType                                   = vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
-       barrier.pNext                                   = DE_NULL;
-       barrier.srcAccessMask                           = 0;
-       barrier.dstAccessMask                           = 0;
-       barrier.oldLayout                               = oldLayout;
-       barrier.newLayout                               = newLayout;
-       barrier.srcQueueFamilyIndex             = vk::VK_QUEUE_FAMILY_IGNORED;
-       barrier.dstQueueFamilyIndex     = vk::VK_QUEUE_FAMILY_IGNORED;
-       barrier.image                                   = image;
+       barrier.sType                                                   = vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+       barrier.pNext                                                   = DE_NULL;
+       barrier.srcAccessMask                                   = srcAccessMask;
+       barrier.dstAccessMask                                   = dstAccessMask;
+       barrier.oldLayout                                               = oldLayout;
+       barrier.newLayout                                               = newLayout;
+       barrier.srcQueueFamilyIndex                             = vk::VK_QUEUE_FAMILY_IGNORED;
+       barrier.dstQueueFamilyIndex                             = vk::VK_QUEUE_FAMILY_IGNORED;
+       barrier.image                                                   = image;
        barrier.subresourceRange.aspectMask             = aspectMask;
        barrier.subresourceRange.baseMipLevel   = 0;
        barrier.subresourceRange.levelCount             = 1;
@@ -919,9 +921,14 @@ void initialTransitionStencil2DImage (const vk::DeviceInterface &vk, vk::VkComma
        transition2DImage(vk, cmdBuffer, image, vk::VK_IMAGE_ASPECT_STENCIL_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, layout);
 }
 
-void initialTransitionDepthStencil2DImage (const vk::DeviceInterface &vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout)
+void initialTransitionDepthStencil2DImage (const vk::DeviceInterface&  vk,
+                                                                                  vk::VkCommandBuffer                  cmdBuffer,
+                                                                                  vk::VkImage                                  image,
+                                                                                  vk::VkImageLayout                    layout,
+                                                                                  vk::VkAccessFlags                    srcAccessMask,
+                                                                                  vk::VkAccessFlags                    dstAccessMask)
 {
-       transition2DImage(vk, cmdBuffer, image, vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, layout);
+       transition2DImage(vk, cmdBuffer, image, vk::VK_IMAGE_ASPECT_DEPTH_BIT | vk::VK_IMAGE_ASPECT_STENCIL_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, layout, srcAccessMask, dstAccessMask);
 }
 
 } // DynamicState
index 144abee..952c500 100644 (file)
@@ -261,7 +261,14 @@ private:
        vk::VkDevice                            m_device;
 };
 
-void transition2DImage (const vk::DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageAspectFlags aspectMask, vk::VkImageLayout oldLayout, vk::VkImageLayout newLayout);
+void transition2DImage (const vk::DeviceInterface&     vk,
+                                               vk::VkCommandBuffer                     cmdBuffer,
+                                               vk::VkImage                                     image,
+                                               vk::VkImageAspectFlags          aspectMask,
+                                               vk::VkImageLayout                       oldLayout,
+                                               vk::VkImageLayout                       newLayout,
+                                               vk::VkAccessFlags                       srcAccessMask = 0,
+                                               vk::VkAccessFlags                       dstAccessMask = 0);
 
 void initialTransitionColor2DImage (const vk::DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout);
 
@@ -269,7 +276,12 @@ void initialTransitionDepth2DImage (const vk::DeviceInterface& vk, vk::VkCommand
 
 void initialTransitionStencil2DImage (const vk::DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout);
 
-void initialTransitionDepthStencil2DImage (const vk::DeviceInterface& vk, vk::VkCommandBuffer cmdBuffer, vk::VkImage image, vk::VkImageLayout layout);
+void initialTransitionDepthStencil2DImage (const vk::DeviceInterface&  vk,
+                                                                                  vk::VkCommandBuffer                  cmdBuffer,
+                                                                                  vk::VkImage                                  image,
+                                                                                  vk::VkImageLayout                    layout,
+                                                                                  vk::VkAccessFlags                    srcAccessMask = 0,
+                                                                                  vk::VkAccessFlags                    dstAccessMask = 0);
 
 } // DynamicState
 } // vkt
index 903a2eb..016d715 100644 (file)
@@ -283,7 +283,7 @@ protected:
                m_vk.beginCommandBuffer(*m_cmdBuffer, &beginInfo);
 
                initialTransitionColor2DImage(m_vk, *m_cmdBuffer, m_colorTargetImage->object(), vk::VK_IMAGE_LAYOUT_GENERAL);
-               initialTransitionDepthStencil2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
+               initialTransitionDepthStencil2DImage(m_vk, *m_cmdBuffer, m_depthStencilImage->object(), vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, vk::VK_ACCESS_TRANSFER_WRITE_BIT);
 
                const ImageSubresourceRange subresourceRangeImage(vk::VK_IMAGE_ASPECT_COLOR_BIT);
                m_vk.cmdClearColorImage(*m_cmdBuffer, m_colorTargetImage->object(),
@@ -292,6 +292,7 @@ protected:
                const vk::VkClearDepthStencilValue depthStencilClearValue = { 0.0f, 0 };
 
                const ImageSubresourceRange subresourceRangeDepthStencil[2] = { vk::VK_IMAGE_ASPECT_DEPTH_BIT, vk::VK_IMAGE_ASPECT_STENCIL_BIT };
+               
                m_vk.cmdClearDepthStencilImage(*m_cmdBuffer, m_depthStencilImage->object(),
                                                                           vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &depthStencilClearValue, 2, subresourceRangeDepthStencil);
 
@@ -312,6 +313,8 @@ protected:
                const vk::VkRect2D renderArea = { { 0, 0 }, { WIDTH, HEIGHT } };
                const RenderPassBeginInfo renderPassBegin(*m_renderPass, *m_framebuffer, renderArea);
 
+               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);
+
                m_vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBegin, vk::VK_SUBPASS_CONTENTS_INLINE);
        }