Validation fixes in dEQP-VK.pipeline
authorMaciej Jesionowski <maciej.jesionowski@mobica.com>
Fri, 8 Apr 2016 09:17:04 +0000 (11:17 +0200)
committerscygan <slawomir.cygan@intel.com>
Thu, 21 Apr 2016 15:48:41 +0000 (17:48 +0200)
- Corrected out of range minDepthBounds value
- Added missing image layout transitions
- timestamp, cache tests: pass data through geometry shader
- cache test: use correct initialLayout in attachment when starting
  a second render pass

(cherry picked from commit 1d3585c5ec71cf90d6519913db6a01ef2c0f840c)

Conflicts:
external/vulkancts/modules/vulkan/pipeline/vktPipelineCacheTests.cpp

external/vulkancts/modules/vulkan/pipeline/vktPipelineBlendTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineDepthTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageSamplingInstance.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineImageUtil.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineInputAssemblyTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineMultisampleTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelinePushConstantTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineStencilTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineTimestampTests.cpp
external/vulkancts/modules/vulkan/pipeline/vktPipelineVertexInputTests.cpp

index e306cb9..e6d6504 100644 (file)
@@ -594,8 +594,8 @@ BlendTestInstance::BlendTestInstance (Context&                                                                      context,
                                0u,                                             // deUint32             writeMask;
                                0u                                              // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f                                                                                                           // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f                                                                                                            // float                        maxDepthBounds;
                };
 
                // The color blend attachment will be set up before creating the graphics pipeline.
@@ -744,9 +744,28 @@ BlendTestInstance::BlendTestInstance (Context&                                                                     context,
                        &attachmentClearValue                                                                   // const VkClearValue*  pClearValues;
                };
 
+               // Color image layout transition
+               const VkImageMemoryBarrier imageLayoutBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                 // VkStructureType            sType;
+                       DE_NULL,                                                                                                                                // const void*                pNext;
+                       (VkAccessFlags)0,                                                                                                               // VkAccessFlags              srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                   // VkAccessFlags              dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                                                                              // VkImageLayout              oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                               // VkImageLayout              newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   dstQueueFamilyIndex;
+                       *m_colorImage,                                                                                                                  // VkImage                    image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }                                                   // VkImageSubresourceRange    subresourceRange;
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, 1u, &imageLayoutBarrier);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                const VkDeviceSize quadOffset = (m_vertices.size() / BlendTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
index 9981264..d7513f5 100644 (file)
@@ -35,6 +35,7 @@
 #include "vkQueryUtil.hpp"
 #include "vkRef.hpp"
 #include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
 #include "tcuImageCompare.hpp"
 #include "deUniquePtr.hpp"
 #include "deStringUtil.hpp"
@@ -140,6 +141,7 @@ private:
        const tcu::UVec2                                        m_renderSize;
        const VkFormat                                          m_colorFormat;
        const VkFormat                                          m_depthFormat;
+       VkImageSubresourceRange                         m_depthImageSubresourceRange;
 
        Move<VkImage>                                           m_colorImage;
        de::MovePtr<Allocation>                         m_colorImageAlloc;
@@ -292,6 +294,10 @@ DepthTestInstance::DepthTestInstance (Context&                             context,
                // Allocate and bind depth image memory
                m_depthImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_depthImage), MemoryRequirement::Any);
                VK_CHECK(vk.bindImageMemory(vkDevice, *m_depthImage, m_depthImageAlloc->getMemory(), m_depthImageAlloc->getOffset()));
+
+               const VkImageAspectFlags aspect = (mapVkFormat(m_depthFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT
+                                                                                                                                                                                                         : VK_IMAGE_ASPECT_DEPTH_BIT);
+               m_depthImageSubresourceRange    = makeImageSubresourceRange(aspect, 0u, depthImageParams.mipLevels, 0u, depthImageParams.arrayLayers);
        }
 
        // Create color attachment view
@@ -322,7 +328,7 @@ DepthTestInstance::DepthTestInstance (Context&                              context,
                        VK_IMAGE_VIEW_TYPE_2D,                                                  // VkImageViewType                      viewType;
                        m_depthFormat,                                                                  // VkFormat                                     format;
                        componentMappingRGBA,                                                   // VkComponentMapping           components;
-                       { VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u }   // VkImageSubresourceRange      subresourceRange;
+                       m_depthImageSubresourceRange,                                   // VkImageSubresourceRange      subresourceRange;
                };
 
                m_depthAttachmentView = createImageView(vk, vkDevice, &depthAttachmentViewParams);
@@ -634,8 +640,8 @@ DepthTestInstance::DepthTestInstance (Context&                              context,
                                0u,                                             // deUint32             writeMask;
                                0u,                                             // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f,                                                                                                          // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f,                                                                                                           // float                        maxDepthBounds;
                };
 
                const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -747,9 +753,43 @@ DepthTestInstance::DepthTestInstance (Context&                             context,
                        attachmentClearValues                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier imageLayoutBarriers[] =
+               {
+                       // color image layout transition
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                 // VkStructureType            sType;
+                               DE_NULL,                                                                                                                                // const void*                pNext;
+                               (VkAccessFlags)0,                                                                                                               // VkAccessFlags              srcAccessMask;
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                   // VkAccessFlags              dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                              // VkImageLayout              oldLayout;
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                               // VkImageLayout              newLayout;
+                               VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   srcQueueFamilyIndex;
+                               VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   dstQueueFamilyIndex;
+                               *m_colorImage,                                                                                                                  // VkImage                    image;
+                               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }                                                   // VkImageSubresourceRange    subresourceRange;
+                       },
+                       // depth image layout transition
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                 // VkStructureType            sType;
+                               DE_NULL,                                                                                                                                // const void*                pNext;
+                               (VkAccessFlags)0,                                                                                                               // VkAccessFlags              srcAccessMask;
+                               VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,                                                   // VkAccessFlags              dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                              // 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;
+                               *m_depthImage,                                                                                                                  // VkImage                    image;
+                               m_depthImageSubresourceRange,                                                                                   // VkImageSubresourceRange    subresourceRange;
+                       },
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                const VkDeviceSize              quadOffset              = (m_vertices.size() / DepthTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
index d799f42..b3be74f 100644 (file)
@@ -785,8 +785,8 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                      context,
                                0u,                                             // deUint32             writeMask;
                                0u                                              // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f                                                                                                           // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f                                                                                                            // float                        maxDepthBounds;
                };
 
                const VkPipelineDynamicStateCreateInfo dynamicStateParams =
@@ -899,9 +899,27 @@ ImageSamplingInstance::ImageSamplingInstance (Context&                                                     context,
                        &attachmentClearValue                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier preAttachmentBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                       DE_NULL,                                                                                // const void*                          pNext;
+                       0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                       *m_colorImage,                                                                  // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }   // VkImageSubresourceRange      subresourceRange;
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, 1u, &preAttachmentBarrier);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);
index 5d473d9..2636258 100644 (file)
@@ -414,7 +414,7 @@ void uploadTestTexture (const DeviceInterface&                      vk,
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
                DE_NULL,                                                                                // const void*                          pNext;
                0u,                                                                                             // VkAccessFlags                        srcAccessMask;
-               0u,                                                                                             // VkAccessFlags                        dstAccessMask;
+               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags                        dstAccessMask;
                VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
                VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                        newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
index d37cd1f..81aa144 100644 (file)
@@ -1253,8 +1253,8 @@ InputAssemblyInstance::InputAssemblyInstance (Context&                                                    context,
                                0u,                                             // deUint32             writeMask;
                                0u,                                             // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f                                                                                                           // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f                                                                                                            // float                        maxDepthBounds;
                };
 
                const VkPipelineDynamicStateCreateInfo dynamicStateParams =
@@ -1408,9 +1408,27 @@ InputAssemblyInstance::InputAssemblyInstance (Context&                                                   context,
                        &attachmentClearValue                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier attachmentLayoutBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                       DE_NULL,                                                                                // const void*                          pNext;
+                       0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                       *m_colorImage,                                                                  // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },  // VkImageSubresourceRange      subresourceRange;
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                const VkDeviceSize vertexBufferOffset = 0;
index 912f482..e09885d 100644 (file)
@@ -1653,8 +1653,8 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                                context,
                                0u,                                             // deUint32             writeMask;
                                0u,                                             // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f,                                                                                                          // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f,                                                                                                           // float                        maxDepthBounds;
                };
 
                const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -1765,9 +1765,43 @@ MultisampleRenderer::MultisampleRenderer (Context&                                                                               context,
                        clearValues                                                                                             // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier imageLayoutBarriers[] =
+               {
+                       // color attachment image
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                               DE_NULL,                                                                                // const void*                          pNext;
+                               0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                               *m_colorImage,                                                                  // VkImage                                      image;
+                               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },  // VkImageSubresourceRange      subresourceRange;
+                       },
+                       // resolve attachment image
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                               DE_NULL,                                                                                // const void*                          pNext;
+                               0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                               VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                               *m_resolveImage,                                                                // VkImage                                      image;
+                               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },  // VkImageSubresourceRange      subresourceRange;
+                       },
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                VkDeviceSize vertexBufferOffset = 0u;
index 618dc43..e894350 100644 (file)
@@ -883,8 +883,8 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context&
                                0u,                                             // deUint32             stencilWriteMask;
                                0u,                                             // deUint32             stencilReference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f,                                                                                                          // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f,                                                                                                           // float                        maxDepthBounds;
                };
 
                const VkPipelineTessellationStateCreateInfo tessellationStateParams =
@@ -994,9 +994,27 @@ PushConstantGraphicsTestInstance::PushConstantGraphicsTestInstance (Context&
                        attachmentClearValues                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier attachmentLayoutBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                       DE_NULL,                                                                                // const void*                          pNext;
+                       0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                       *m_colorImage,                                                                  // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },  // VkImageSubresourceRange      subresourceRange;
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                // update push constant
index fa57224..b45fb48 100644 (file)
@@ -35,6 +35,7 @@
 #include "vkQueryUtil.hpp"
 #include "vkRef.hpp"
 #include "vkRefUtil.hpp"
+#include "vkTypeUtil.hpp"
 #include "tcuImageCompare.hpp"
 #include "deMemory.h"
 #include "deRandom.hpp"
@@ -143,6 +144,7 @@ private:
        const tcu::UVec2                                        m_renderSize;
        const VkFormat                                          m_colorFormat;
        const VkFormat                                          m_stencilFormat;
+       VkImageSubresourceRange                         m_stencilImageSubresourceRange;
 
        VkImageCreateInfo                                       m_colorImageCreateInfo;
        Move<VkImage>                                           m_colorImage;
@@ -379,6 +381,10 @@ StencilTestInstance::StencilTestInstance (Context&                                 context,
                // Allocate and bind stencil image memory
                m_stencilImageAlloc = memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *m_stencilImage), MemoryRequirement::Any);
                VK_CHECK(vk.bindImageMemory(vkDevice, *m_stencilImage, m_stencilImageAlloc->getMemory(), m_stencilImageAlloc->getOffset()));
+
+               const VkImageAspectFlags aspect = (mapVkFormat(m_stencilFormat).order == tcu::TextureFormat::DS ? VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT
+                                                                                                                                                                                                               : VK_IMAGE_ASPECT_STENCIL_BIT);
+               m_stencilImageSubresourceRange  = makeImageSubresourceRange(aspect, 0u, stencilImageParams.mipLevels, 0u, stencilImageParams.arrayLayers);
        }
 
        // Create color attachment view
@@ -409,7 +415,7 @@ StencilTestInstance::StencilTestInstance (Context&                                  context,
                        VK_IMAGE_VIEW_TYPE_2D,                                                          // VkImageViewType                      viewType;
                        m_stencilFormat,                                                                        // VkFormat                                     format;
                        componentMappingRGBA,                                                           // VkComponentMapping           components;
-                       { VK_IMAGE_ASPECT_STENCIL_BIT, 0u, 1u, 0u, 1u },        // VkImageSubresourceRange      subresourceRange;
+                       m_stencilImageSubresourceRange,                                         // VkImageSubresourceRange      subresourceRange;
                };
 
                m_stencilAttachmentView = createImageView(vk, vkDevice, &stencilAttachmentViewParams);
@@ -689,8 +695,8 @@ StencilTestInstance::StencilTestInstance (Context&                                  context,
                        true,                                                                                                           // VkBool32                                                                     stencilTestEnable;
                        m_stencilOpStateFront,                                                                          // VkStencilOpState                                                     front;
                        m_stencilOpStateBack,                                                                           // VkStencilOpState                                                     back;
-                       -1.0f,                                                                                                          // float                                                                        minDepthBounds;
-                       +1.0f                                                                                                           // float                                                                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                                                                        minDepthBounds;
+                       1.0f                                                                                                            // float                                                                        maxDepthBounds;
                };
 
                const VkPipelineDynamicStateCreateInfo dynamicStateParams =
@@ -834,9 +840,43 @@ StencilTestInstance::StencilTestInstance (Context&                                 context,
                        attachmentClearValues                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier imageLayoutBarriers[] =
+               {
+                       // color image layout transition
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                 // VkStructureType            sType;
+                               DE_NULL,                                                                                                                                // const void*                pNext;
+                               (VkAccessFlags)0,                                                                                                               // VkAccessFlags              srcAccessMask;
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                                                                   // VkAccessFlags              dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                              // VkImageLayout              oldLayout;
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                                                               // VkImageLayout              newLayout;
+                               VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   srcQueueFamilyIndex;
+                               VK_QUEUE_FAMILY_IGNORED,                                                                                                // uint32_t                   dstQueueFamilyIndex;
+                               *m_colorImage,                                                                                                                  // VkImage                    image;
+                               { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u }                                                   // VkImageSubresourceRange    subresourceRange;
+                       },
+                       // stencil image layout transition
+                       {
+                               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                                                                 // VkStructureType            sType;
+                               DE_NULL,                                                                                                                                // const void*                pNext;
+                               (VkAccessFlags)0,                                                                                                               // VkAccessFlags              srcAccessMask;
+                               VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,                                                   // VkAccessFlags              dstAccessMask;
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                                                                              // 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;
+                               *m_stencilImage,                                                                                                                // VkImage                    image;
+                               m_stencilImageSubresourceRange,                                                                                 // VkImageSubresourceRange    subresourceRange;
+                       },
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(imageLayoutBarriers), imageLayoutBarriers);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                const VkDeviceSize              quadOffset              = (m_vertices.size() / StencilTest::QUAD_COUNT) * sizeof(Vertex4RGBA);
index 6dca81a..b732e3a 100755 (executable)
@@ -552,8 +552,8 @@ Move<VkPipeline> SimpleGraphicsPipelineBuilder::buildPipeline(tcu::UVec2 renderS
                        0u,                     // deUint32     writeMask;
                        0u,                     // deUint32     reference;
                },
-               -1.0f,                                                      // float                                    minDepthBounds;
-               +1.0f,                                                      // float                                    maxDepthBounds;
+               0.0f,                                                      // float                                    minDepthBounds;
+               1.0f,                                                      // float                                    maxDepthBounds;
        };
 
        const VkPipelineTessellationStateCreateInfo*    pTessCreateInfo         = DE_NULL;
@@ -992,6 +992,7 @@ protected:
        Move<VkImageView>                   m_depthAttachmentView;
        Move<VkRenderPass>                  m_renderPass;
        Move<VkFramebuffer>                 m_framebuffer;
+       VkImageMemoryBarrier                            m_imageLayoutBarriers[2];
 
        de::MovePtr<Allocation>             m_vertexBufferAlloc;
        Move<VkBuffer>                      m_vertexBuffer;
@@ -1154,6 +1155,39 @@ void BasicGraphicsTestInstance::buildFrameBuffer(tcu::UVec2 renderSize, VkFormat
                                                                                                  &m_depthImageAlloc);
        }
 
+       // Set up image layout transition barriers
+       {
+               const VkImageMemoryBarrier colorImageBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                         // VkStructureType                      sType;
+                       DE_NULL,                                                                                        // const void*                          pNext;
+                       0u,                                                                                                     // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                           // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                                      // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,                       // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                        // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                        // deUint32                                     dstQueueFamilyIndex;
+                       *m_colorImage,                                                                          // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },          // VkImageSubresourceRange      subresourceRange;
+               };
+               const VkImageMemoryBarrier depthImageBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                         // VkStructureType                      sType;
+                       DE_NULL,                                                                                        // const void*                          pNext;
+                       0u,                                                                                                     // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,           // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                                      // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,       // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                        // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                        // deUint32                                     dstQueueFamilyIndex;
+                       *m_depthImage,                                                                          // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_DEPTH_BIT, 0u, 1u, 0u, 1u },          // VkImageSubresourceRange      subresourceRange;
+               };
+
+               m_imageLayoutBarriers[0] = colorImageBarrier;
+               m_imageLayoutBarriers[1] = depthImageBarrier;
+       }
+
        // Create color attachment view
        {
                const VkImageViewCreateInfo colorAttachmentViewParams =
@@ -1271,6 +1305,9 @@ void BasicGraphicsTestInstance::configCommandBuffer(void)
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+               0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers);
+
        vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
@@ -1340,13 +1377,16 @@ void AdvGraphicsTest::initPrograms(SourceCollections& programCollection) const
 
        programCollection.glslSources.add("dummy_geo") << glu::GeometrySource(
                "#version 450 \n"
-               "layout (triangles) in;\n"
-               "layout (triangle_strip, max_vertices = 3) out;\n"
+               "layout(triangles) in;\n"
+               "layout(triangle_strip, max_vertices = 3) out;\n"
+               "layout(location = 0) in highp vec4 in_vtxColor[];\n"
+               "layout(location = 0) out highp vec4 vtxColor;\n"
                "void main (void)\n"
                "{\n"
                "  for(int ndx=0; ndx<3; ndx++)\n"
                "  {\n"
                "    gl_Position = gl_in[ndx].gl_Position;\n"
+               "    vtxColor    = in_vtxColor[ndx];\n"
                "    EmitVertex();\n"
                "  }\n"
                "  EndPrimitive();\n"
@@ -1517,6 +1557,9 @@ void AdvGraphicsTestInstance::configCommandBuffer(void)
 
        VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
 
+       vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+               0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(m_imageLayoutBarriers), m_imageLayoutBarriers);
+
        vk.cmdResetQueryPool(*m_cmdBuffer, *m_queryPool, 0u, TimestampTest::ENTRY_COUNT);
 
        vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
index f23921b..8b427e4 100644 (file)
@@ -957,8 +957,8 @@ VertexInputInstance::VertexInputInstance (Context&                                                                                          context,
                                0u,                                             // deUint32             writeMask;
                                0u,                                             // deUint32             reference;
                        },
-                       -1.0f,                                                                                                          // float                        minDepthBounds;
-                       +1.0f,                                                                                                          // float                        maxDepthBounds;
+                       0.0f,                                                                                                           // float                        minDepthBounds;
+                       1.0f,                                                                                                           // float                        maxDepthBounds;
                };
 
                const VkGraphicsPipelineCreateInfo graphicsPipelineParams =
@@ -1062,9 +1062,27 @@ VertexInputInstance::VertexInputInstance (Context&                                                                                               context,
                        &attachmentClearValue                                                                   // const VkClearValue*  pClearValues;
                };
 
+               const VkImageMemoryBarrier attachmentLayoutBarrier =
+               {
+                       VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // VkStructureType                      sType;
+                       DE_NULL,                                                                                // const void*                          pNext;
+                       0u,                                                                                             // VkAccessFlags                        srcAccessMask;
+                       VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags                        dstAccessMask;
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                        oldLayout;
+                       VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                        newLayout;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     srcQueueFamilyIndex;
+                       VK_QUEUE_FAMILY_IGNORED,                                                // deUint32                                     dstQueueFamilyIndex;
+                       *m_colorImage,                                                                  // VkImage                                      image;
+                       { VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, 1u },  // VkImageSubresourceRange      subresourceRange;
+               };
+
                m_cmdBuffer = allocateCommandBuffer(vk, vkDevice, &cmdBufferAllocateInfo);
 
                VK_CHECK(vk.beginCommandBuffer(*m_cmdBuffer, &cmdBufferBeginInfo));
+
+               vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, (VkDependencyFlags)0,
+                       0u, DE_NULL, 0u, DE_NULL, 1u, &attachmentLayoutBarrier);
+
                vk.cmdBeginRenderPass(*m_cmdBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
 
                vk.cmdBindPipeline(*m_cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *m_graphicsPipeline);