Fix wrong transition in dEQP-VK.glsl.builtin_var.fragdepth
authorSlawomir Cygan <slawomir.cygan@intel.com>
Wed, 5 Jul 2017 17:17:02 +0000 (19:17 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 31 Aug 2017 18:19:56 +0000 (14:19 -0400)
The test was using vkCmdClearDepthStencilImage to clear an
image, than used this image as a depth attachment in
redering performed by VulkanDrawContext utility.

However, this utility always starts the renderpass on depth
attachment from UNDEFINED layout. As no depth clear is done
in the renderpass, the depth attachment contents are undefined
(and initially cleared image contents may be corrupted).

The easiest fix here is to move the clear to LOAD_OP - as
is already done for color, leaving the UNDEFINED layout as is.

Affects: dEQP-VK.glsl.builtin_var.fragdepth*

Components: Vulkan
VK-GL-CTS issue: 559

Change-Id: Icef3289ba62f71bf1ed989f84085a4d9d3b7218a
(cherry picked from commit f3a36239082b721e1f5f6849afc70af65b42e3ed)

external/vulkancts/modules/vulkan/shaderrender/vktShaderRenderBuiltinVarTests.cpp
external/vulkancts/modules/vulkan/vktDrawUtil.cpp

index bad106d..59351e2 100644 (file)
@@ -624,7 +624,7 @@ TestStatus BuiltinFragDepthCaseInstance::iterate (void)
                fence = createFence(vk, device, &fenceCreateInfo);
        }
 
-       // Initialize Depth Buffer and Marker Buffer
+       // Initialize Marker Buffer
        {
                VkImageAspectFlags      depthImageAspectFlags = VK_IMAGE_ASPECT_DEPTH_BIT;
                if (hasStencilComponent(mapVkFormat(m_format).order))
@@ -650,24 +650,6 @@ TestStatus BuiltinFragDepthCaseInstance::iterate (void)
                                        1u                                                                              // uint32_t                             arraySize
                                }
                        },
-                       {
-                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType              sType
-                               DE_NULL,                                                                                // const void*                  pNext
-                               0,                                                                                              // VkAccessMask                 srcAccessMask
-                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessMask                 dstAccessMask
-                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                oldLayout
-                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                newLayout
-                               VK_QUEUE_FAMILY_IGNORED,                                                // uint32_t                             srcQueueFamilyIndex
-                               VK_QUEUE_FAMILY_IGNORED,                                                // uint32_t                             dstQueueFamilyIndex
-                               *depthImage,                                                                    // VkImage                              image
-                               {
-                                       depthImageAspectFlags,                                  // VkImageAspectFlags   aspectMask
-                                       0u,                                                                             // uint32_t                             baseMipLevel
-                                       1u,                                                                             // uint32_t                             mipLevels
-                                       0u,                                                                             // uint32_t                             baseArray
-                                       1u                                                                              // uint32_t                             arraySize
-                               }
-                       }
                };
 
                const VkImageMemoryBarrier imagePostBarrier[] =
@@ -690,25 +672,6 @@ TestStatus BuiltinFragDepthCaseInstance::iterate (void)
                                        1u                                                                              // uint32_t                             arraySize
                                }
                        },
-                       {
-                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                         // VkStructureType              sType
-                               DE_NULL,                                                                                        // cont void*                   pNext
-                               VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlagBits             srcAccessMask
-                               VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,           // VkAccessFlagBits             dstAccessMask
-                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                           // VkImageLayout                oldLayout
-                               VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,       // VkImageLayout                newLayout
-                               VK_QUEUE_FAMILY_IGNORED,                                                        // uint32_t                             srcQueueFamilyIndex
-                               VK_QUEUE_FAMILY_IGNORED,                                                        // uint32_t                             dstQueueFamilyIndex
-                               *depthImage,                                                                            // VkImage                              image
-                               {
-                                       depthImageAspectFlags,                                          // VkImageAspectFlags   aspectMask
-                                       0u,                                                                                     // uint32_t                             baseMipLevel
-                                       1u,                                                                                     // uint32_t                             mipLevels
-                                       0u,                                                                                     // uint32_t                             baseArray
-                                       1u                                                                                      // uint32_t                             arraySize
-                               }
-
-                       }
                };
 
                const VkCommandBufferBeginInfo  cmdBufferBeginInfo =
@@ -728,11 +691,8 @@ TestStatus BuiltinFragDepthCaseInstance::iterate (void)
 
                const VkClearValue                              colorClearValue = makeClearValueColor(Vec4(0.0f, 0.0f, 0.0f, 0.0f));
                const VkImageSubresourceRange   colorClearRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u);
-               const VkClearValue                              depthClearValue = makeClearValueDepthStencil(m_defaultDepthValue, 0);
-               const VkImageSubresourceRange   depthClearRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u);
 
                vk.cmdClearColorImage(*transferCmdBuffer, *markerImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &colorClearValue.color, 1u, &colorClearRange);
-               vk.cmdClearDepthStencilImage(*transferCmdBuffer, *depthImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &depthClearValue.depthStencil, 1u, &depthClearRange);
 
                vk.cmdPipelineBarrier(*transferCmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
                                (VkDependencyFlags)0,
index 1642299..5d03f15 100644 (file)
@@ -459,7 +459,7 @@ VulkanDrawContext::VulkanDrawContext (  Context&                            context,
                                (VkAttachmentDescriptionFlags)0,                                        // VkAttachmentDescriptionFlags         flags
                                m_drawState.depthFormat,                                                        // VkFormat                                                     format
                                (VkSampleCountFlagBits)m_drawState.numSamples,          // VkSampleCountFlagBits                        samples
-                               VK_ATTACHMENT_LOAD_OP_LOAD,                                                     // VkAttachmentLoadOp                           loadOp
+                               VK_ATTACHMENT_LOAD_OP_CLEAR,                                            // VkAttachmentLoadOp                           loadOp
                                VK_ATTACHMENT_STORE_OP_STORE,                                           // VkAttachmentStoreOp                          storeOp
                                VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                        // VkAttachmentLoadOp                           stencilLoadOp
                                VK_ATTACHMENT_STORE_OP_DONT_CARE,                                       // VkAttachmentStoreOp                          stencilStoreOp
@@ -760,7 +760,11 @@ VulkanDrawContext::VulkanDrawContext (  Context&                           context,
 
                // Begin render pass
                {
-                       const VkClearValue      clearValue      = makeClearValueColor(Vec4(0.0f, 0.0f, 0.0f, 1.0f));
+                       std::vector<VkClearValue> clearValues;
+
+                       clearValues.push_back(makeClearValueColor(Vec4(0.0f, 0.0f, 0.0f, 1.0f)));
+                       if (vulkanProgram.depthImageView)
+                               clearValues.push_back(makeClearValueDepthStencil(0.0, 0));
 
                        const VkRect2D          renderArea =
                        {
@@ -774,8 +778,8 @@ VulkanDrawContext::VulkanDrawContext (  Context&                            context,
                                *m_renderPass,                                                                                                          // VkRenderPass                                                                 renderPass;
                                *m_framebuffer,                                                                                                         // VkFramebuffer                                                                framebuffer;
                                renderArea,                                                                                                                     // VkRect2D                                                                             renderArea;
-                               1u,                                                                                                                                     // uint32_t                                                                             clearValueCount;
-                               &clearValue,                                                                                                            // const VkClearValue*                                                  pClearValues;
+                               static_cast<uint32_t>(clearValues.size()),                                                      // uint32_t                                                                             clearValueCount;
+                               &clearValues[0],                                                                                                        // const VkClearValue*                                                  pClearValues;
                        };
 
                        vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);