Bug Fix: Corrected barriers in the tests dEQP-VK.query_pool
authorArkadiusz Sarwa <arkadiusz.sarwa@mobica.com>
Wed, 13 Apr 2016 12:43:17 +0000 (14:43 +0200)
committerPyry Haulos <phaulos@google.com>
Thu, 19 May 2016 21:44:42 +0000 (14:44 -0700)
(cherry picked from commit 0319b008a20f6c61504d39c118c0dc271e015c25)

external/vulkancts/modules/vulkan/query_pool/vktQueryPoolImageObjectUtil.cpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolImageObjectUtil.hpp
external/vulkancts/modules/vulkan/query_pool/vktQueryPoolOcclusionTests.cpp

index 8d60645..359bfa2 100644 (file)
@@ -455,7 +455,7 @@ de::SharedPtr<Image> Image::copyToLinearImage (vk::VkQueue                                  queue,
                CmdBufferBeginInfo beginInfo;
                VK_CHECK(m_vk.beginCommandBuffer(*copyCmdBuffer, &beginInfo));
 
-               transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL);
+               transition2DImage(m_vk, *copyCmdBuffer, stagingResource->object(), aspect, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL, 0, vk::VK_ACCESS_TRANSFER_WRITE_BIT);
 
                const vk::VkOffset3D zeroOffset = { 0, 0, 0 };
                vk::VkImageCopy region = { {aspect, mipLevel, arrayElement, 1}, offset, {aspect, 0, 0, 1}, zeroOffset, {(deUint32)width, (deUint32)height, (deUint32)depth} };
@@ -879,22 +879,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;
index 72e7ef7..3ae4ba8 100644 (file)
@@ -260,7 +260,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);
 
index 6b324e7..91eaa61 100644 (file)
@@ -374,8 +374,8 @@ tcu::TestStatus     BasicOcclusionQueryTestInstance::iterate (void)
 
        vk.beginCommandBuffer(*cmdBuffer, &beginInfo);
 
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_DepthImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL, 0, vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_DepthImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 0, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
 
        std::vector<vk::VkClearValue> renderPassClearValues(2);
        deMemset(&renderPassClearValues[0], 0, static_cast<int>(renderPassClearValues.size()) * sizeof(vk::VkClearValue));
@@ -407,7 +407,7 @@ tcu::TestStatus     BasicOcclusionQueryTestInstance::iterate (void)
 
        vk.cmdEndRenderPass(*cmdBuffer);
 
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_GENERAL, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, vk::VK_ACCESS_TRANSFER_READ_BIT);
 
        vk.endCommandBuffer(*cmdBuffer);
 
@@ -729,8 +729,8 @@ vk::Move<vk::VkCommandBuffer> OcclusionQueryTestInstance::recordRender (vk::VkCo
 
        vk.beginCommandBuffer(*cmdBuffer, &beginInfo);
 
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_DepthImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_GENERAL, 0, vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_DepthImage->object(), vk::VK_IMAGE_ASPECT_DEPTH_BIT, vk::VK_IMAGE_LAYOUT_UNDEFINED, vk::VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 0, vk::VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
 
        std::vector<vk::VkClearValue>   renderPassClearValues(2);
        deMemset(&renderPassClearValues[0], 0, static_cast<int>(renderPassClearValues.size()) * sizeof(vk::VkClearValue));
@@ -785,7 +785,7 @@ vk::Move<vk::VkCommandBuffer> OcclusionQueryTestInstance::recordRender (vk::VkCo
                }
        }
 
-       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
+       transition2DImage(vk, *cmdBuffer, m_stateObjects->m_colorAttachmentImage->object(), vk::VK_IMAGE_ASPECT_COLOR_BIT, vk::VK_IMAGE_LAYOUT_GENERAL, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, vk::VK_ACCESS_TRANSFER_READ_BIT);
 
        vk.endCommandBuffer(*cmdBuffer);