Protected Memory Fixes - Barrier Layouts & Flags
authorMartin Freebody <martin.freebody@arm.com>
Mon, 14 Jan 2019 13:34:40 +0000 (13:34 +0000)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 18 Jan 2019 08:35:20 +0000 (03:35 -0500)
This change removes errors reported by core validation layer.

Affects: dEQP-VK.protected_memory.*

Components: Vulkan

Change-Id: Ic258ba2af077b2dc119db0d177613558464e0c9a

external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemAttachmentClearTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemAttachmentLoadTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemBlitImageTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemClearColorImageTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemCopyBufferToImageTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemCopyImageTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemImageValidator.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemImageValidator.hpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemShaderImageAccessTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemStorageBufferTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp

index 0c2d3d8..fd0a0be 100644 (file)
@@ -271,7 +271,7 @@ tcu::TestStatus AttachmentClearTestInstance::iterate()
                << tcu::TestLog::Message << "Stencil clear value: " << m_clearValue.depthStencil.stencil << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index f7f9926..66ae052 100644 (file)
@@ -213,7 +213,7 @@ tcu::TestStatus AttachmentLoadTestInstance::iterate()
                << tcu::TestLog::Message << "Stencil clear value: " << m_clearValue.depthStencil.stencil << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index 669826a..0039b88 100644 (file)
@@ -187,7 +187,7 @@ tcu::TestStatus BlitImageTestInstance::iterate()
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
                                                          vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -228,8 +228,8 @@ tcu::TestStatus BlitImageTestInstance::iterate()
                };
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -260,7 +260,7 @@ tcu::TestStatus BlitImageTestInstance::iterate()
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
                                                          vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -314,8 +314,8 @@ tcu::TestStatus BlitImageTestInstance::iterate()
                        }
                };
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                          vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -339,7 +339,7 @@ tcu::TestStatus BlitImageTestInstance::iterate()
                << tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index 3dce6e7..9785055 100644 (file)
@@ -182,7 +182,7 @@ tcu::TestStatus ClearColorImageTestInstance::iterate()
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
                                                          vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -207,8 +207,8 @@ tcu::TestStatus ClearColorImageTestInstance::iterate()
                        subresourceRange                                                                        // subresourceRange
                };
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                          vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -232,7 +232,7 @@ tcu::TestStatus ClearColorImageTestInstance::iterate()
                << tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index 43022ca..3c56960 100644 (file)
@@ -300,7 +300,7 @@ tcu::TestStatus CopyBufferToImageTestInstance::iterate()
                << tcu::TestLog::Message << "Fill value: " << m_fillValue << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index ed7cc88..07ad7f6 100644 (file)
@@ -187,7 +187,7 @@ tcu::TestStatus CopyImageTestInstance::iterate()
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
                                                          vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -228,8 +228,8 @@ tcu::TestStatus CopyImageTestInstance::iterate()
                };
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -260,7 +260,7 @@ tcu::TestStatus CopyImageTestInstance::iterate()
 
                vk.cmdPipelineBarrier(targetCmdBuffer,
                                                          vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -310,8 +310,8 @@ tcu::TestStatus CopyImageTestInstance::iterate()
                        }
                };
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                          vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -335,7 +335,7 @@ tcu::TestStatus CopyImageTestInstance::iterate()
                        << tcu::TestLog::Message << "Color clear value: " << tcu::Vec4(m_clearColorValue.float32) << tcu::TestLog::EndMessage;
 
        // Validate resulting image
-       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat))
+       if (m_validator.validateImage(ctx, m_refData, **colorImage, m_imageFormat, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL))
                return tcu::TestStatus::pass("Everything went OK");
        else
                return tcu::TestStatus::fail("Something went really wrong");
index 6bc186c..38dafa9 100644 (file)
@@ -111,7 +111,7 @@ void ImageValidator::initPrograms (vk::SourceCollections& programCollection) con
 }
 
 bool ImageValidator::validateImage (ProtectedContext& ctx, const ValidationData& refData,
-                                                                       const vk::VkImage image, const vk::VkFormat imageFormat) const
+                                                                       const vk::VkImage image, const vk::VkFormat imageFormat, const vk::VkImageLayout imageLayout) const
 {
        // Log out a few reference info
        {
@@ -197,7 +197,7 @@ bool ImageValidator::validateImage (ProtectedContext& ctx, const ValidationData&
        {
                vk::VkDescriptorBufferInfo      descRefUniform  = makeDescriptorBufferInfo(**refUniform, 0, refUniformSize);
                vk::VkDescriptorBufferInfo      descBuffer              = makeDescriptorBufferInfo(**helperBuffer, 0, helperBufferSize);
-               vk::VkDescriptorImageInfo       descSampledImg  = makeDescriptorImageInfo(*sampler, *imageView, vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
+               vk::VkDescriptorImageInfo       descSampledImg  = makeDescriptorImageInfo(*sampler, *imageView, imageLayout);
 
                vk::DescriptorSetUpdateBuilder()
                        .writeSingle(*descriptorSet, vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &descSampledImg)
index 47f5cf5..b92f7e9 100644 (file)
@@ -52,7 +52,8 @@ public:
        bool                                    validateImage   (ProtectedContext&              ctx,
                                                                                         const ValidationData&  refData,
                                                                                         const vk::VkImage              image,
-                                                                                        const vk::VkFormat             imageFormat) const;
+                                                                                        const vk::VkFormat             imageFormat,
+                                                                                        const vk::VkImageLayout imageLayout) const;
 
 private:
        const vk::VkFormat              m_imageFormat;
index 73e6413..e3c02c6 100644 (file)
@@ -233,9 +233,11 @@ private:
        void                                            uploadImage                             (vk::VkImage                    image,
                                                                                                                 const tcu::Texture2D&  texture2D);
        void                                            copyToProtectedImage    (vk::VkImage                    srcImage,
-                                                                                                                vk::VkImage                    dstImage);
+                                                                                                                vk::VkImage                    dstImage,
+                                                                                                                vk::VkImageLayout              dstImageLayout);
        void                                            calculateAtomicRef              (tcu::Texture2D&                texture2D);
        tcu::TestStatus                         validateResult                  (vk::VkImage                    image,
+                                                                                                                vk::VkImageLayout              imageLayout,
                                                                                                                 const tcu::Texture2D&  texture2D,
                                                                                                                 const tcu::Sampler&    refSampler);
 
@@ -599,7 +601,7 @@ void ImageAccessTestInstance::uploadImage (vk::VkImage image, const tcu::Texture
        vk.cmdCopyBufferToImage(*cmdBuffer, **stagingBuffer, image, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
        vk.cmdPipelineBarrier(*cmdBuffer,
                                                  (vk::VkPipelineStageFlags)vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
-                                                 (vk::VkPipelineStageFlags)vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                 (vk::VkPipelineStageFlags)vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
                                                  (vk::VkDependencyFlags)0u,
                                                  0u, (const vk::VkMemoryBarrier*)DE_NULL,
                                                  0u, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -612,7 +614,7 @@ void ImageAccessTestInstance::uploadImage (vk::VkImage image, const tcu::Texture
        }
 }
 
-void ImageAccessTestInstance::copyToProtectedImage (vk::VkImage srcImage, vk::VkImage dstImage)
+void ImageAccessTestInstance::copyToProtectedImage (vk::VkImage srcImage, vk::VkImage dstImage, vk::VkImageLayout dstImageLayout)
 {
        ProtectedContext&                                       ctx                                     (m_protectedContext);
        const vk::DeviceInterface&                      vk                                      = ctx.getDeviceInterface();
@@ -667,9 +669,9 @@ void ImageAccessTestInstance::copyToProtectedImage (vk::VkImage srcImage, vk::Vk
                vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,             // VkStructureType                      sType;
                DE_NULL,                                                                                // const void*                          pNext;
                vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                        srcAccessMask;
-               vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                        dstAccessMask;
+               vk::VK_ACCESS_SHADER_READ_BIT,                                  // VkAccessFlags                        dstAccessMask;
                vk::VK_IMAGE_LAYOUT_GENERAL,                                    // VkImageLayout                        oldLayout;
-               vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,   // VkImageLayout                        newLayout;
+               dstImageLayout,                                                                 // VkImageLayout                        newLayout;
                queueFamilyIndex,                                                               // deUint32                                     srcQueueFamilyIndex;
                queueFamilyIndex,                                                               // deUint32                                     dstQueueFamilyIndex;
                dstImage,                                                                               // VkImage                                      image;
@@ -704,7 +706,7 @@ void ImageAccessTestInstance::copyToProtectedImage (vk::VkImage srcImage, vk::Vk
        vk.cmdCopyImage(*cmdBuffer, srcImage, vk::VK_IMAGE_LAYOUT_GENERAL, dstImage, vk::VK_IMAGE_LAYOUT_GENERAL, 1u, &copyImageRegion);
        vk.cmdPipelineBarrier(*cmdBuffer,
                                                  vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
-                                                 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                 vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                  (vk::VkDependencyFlags)0,
                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                  0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -758,7 +760,7 @@ void ImageAccessTestInstance::clearImage (vk::VkImage image)
                vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,             // VkStructureType                      sType;
                DE_NULL,                                                                                // const void*                          pNext;
                vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                        srcAccessMask;
-               vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                        dstAccessMask;
+               vk::VK_ACCESS_SHADER_WRITE_BIT,                                 // VkAccessFlags                        dstAccessMask;
                vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,               // VkImageLayout                        oldLayout;
                vk::VK_IMAGE_LAYOUT_GENERAL,                                    // VkImageLayout                        newLayout;
                queueFamilyIndex,                                                               // deUint32                                     srcQueueFamilyIndex;
@@ -778,7 +780,7 @@ void ImageAccessTestInstance::clearImage (vk::VkImage image)
        vk.cmdClearColorImage(*cmdBuffer, image, vk::VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &clearColor, 1, &subresourceRange);
        vk.cmdPipelineBarrier(*cmdBuffer,
                                                  vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
-                                                 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                 vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                  (vk::VkDependencyFlags)0,
                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                  0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
@@ -860,8 +862,31 @@ tcu::TestStatus ImageAccessTestInstance::executeComputeTest (void)
                // Upload data to an unprotected image
                uploadImage(**unprotectedImage, *texture2D);
 
+               // Select vkImageLayout based upon accessType
+               vk::VkImageLayout imageSrcLayout = vk::VK_IMAGE_LAYOUT_UNDEFINED;
+
+               switch (m_params.accessType)
+               {
+                       case ACCESS_TYPE_SAMPLING:
+                       case ACCESS_TYPE_TEXEL_FETCH:
+                       {
+                               imageSrcLayout = vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+                               break;
+                       }
+                       case ACCESS_TYPE_IMAGE_LOAD:
+                       case ACCESS_TYPE_IMAGE_STORE:
+                       case ACCESS_TYPE_IMAGE_ATOMICS:
+                       {
+                               imageSrcLayout = vk::VK_IMAGE_LAYOUT_GENERAL;
+                               break;
+                       }
+                       default:
+                               DE_FATAL("Impossible");
+                               break;
+               }
+
                // Copy unprotected image to protected image
-               copyToProtectedImage(**unprotectedImage, **imageSrc);
+               copyToProtectedImage(**unprotectedImage, **imageSrc, imageSrcLayout);
        }
 
        // Clear dst image
@@ -986,7 +1011,7 @@ tcu::TestStatus ImageAccessTestInstance::executeComputeTest (void)
        {
                const vk::VkImage       resultImage             = m_params.accessType == ACCESS_TYPE_IMAGE_ATOMICS ? **imageSrc : **imageDst;
 
-               return validateResult(resultImage, *texture2D, refSampler);
+               return validateResult(resultImage, vk::VK_IMAGE_LAYOUT_GENERAL, *texture2D, refSampler);
        }
 }
 
@@ -1060,6 +1085,29 @@ tcu::TestStatus ImageAccessTestInstance::executeFragmentTest (void)
                }
        }
 
+       // Select vkImageLayout based upon accessType
+       vk::VkImageLayout imageLayout = vk::VK_IMAGE_LAYOUT_UNDEFINED;
+
+       switch (m_params.accessType)
+       {
+               case ACCESS_TYPE_SAMPLING:
+               case ACCESS_TYPE_TEXEL_FETCH:
+               {
+                       imageLayout = vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+                       break;
+               }
+               case ACCESS_TYPE_IMAGE_LOAD:
+               case ACCESS_TYPE_IMAGE_STORE:
+               case ACCESS_TYPE_IMAGE_ATOMICS:
+               {
+                       imageLayout = vk::VK_IMAGE_LAYOUT_GENERAL;
+                       break;
+               }
+               default:
+                       DE_FATAL("Impossible");
+                       break;
+       }
+
        // Upload source image
        {
                de::MovePtr<vk::ImageWithMemory>        unprotectedImage        = createImage2D(ctx, PROTECTION_DISABLED, queueFamilyIndex,
@@ -1071,7 +1119,7 @@ tcu::TestStatus ImageAccessTestInstance::executeFragmentTest (void)
                uploadImage(**unprotectedImage, *texture2D);
 
                // Copy unprotected image to protected image
-               copyToProtectedImage(**unprotectedImage, **imageSrc);
+               copyToProtectedImage(**unprotectedImage, **imageSrc, imageLayout);
        }
 
        // Clear dst image
@@ -1325,7 +1373,7 @@ tcu::TestStatus ImageAccessTestInstance::executeFragmentTest (void)
                        vk::VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                       // srcAccessMask
                        vk::VK_ACCESS_SHADER_READ_BIT,                                          // dstAccessMask
                        vk::VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,           // oldLayout
-                       vk::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,           // newLayout
+                       imageLayout,                                                                            // newLayout
                        queueFamilyIndex,                                                                       // srcQueueFamilyIndex
                        queueFamilyIndex,                                                                       // dstQueueFamilyIndex
                        **colorImage,                                                                           // image
@@ -1338,7 +1386,7 @@ tcu::TestStatus ImageAccessTestInstance::executeFragmentTest (void)
                        }
                };
                vk.cmdPipelineBarrier(*cmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                         vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
                                                          vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
@@ -1363,7 +1411,7 @@ tcu::TestStatus ImageAccessTestInstance::executeFragmentTest (void)
                const vk::VkImage       resultImage             = m_params.accessType == ACCESS_TYPE_IMAGE_ATOMICS      ?       **imageSrc      :
                                                                                          m_params.accessType == ACCESS_TYPE_IMAGE_STORE        ?       **imageDst      : **colorImage;
 
-               return validateResult(resultImage, *texture2D, refSampler);
+               return validateResult(resultImage, imageLayout, *texture2D, refSampler);
        }
 }
 
@@ -1384,7 +1432,7 @@ void ImageAccessTestInstance::calculateAtomicRef (tcu::Texture2D& texture2D)
        }
 }
 
-tcu::TestStatus ImageAccessTestInstance::validateResult (vk::VkImage image, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
+tcu::TestStatus ImageAccessTestInstance::validateResult (vk::VkImage image, vk::VkImageLayout imageLayout, const tcu::Texture2D& texture2D, const tcu::Sampler& refSampler)
 {
        de::Random                      rnd                     (getSeedValue(m_params));
        ValidationData          refData;
@@ -1399,7 +1447,7 @@ tcu::TestStatus ImageAccessTestInstance::validateResult (vk::VkImage image, cons
                refData.values[ndx] = texture2D.sample(refSampler, cx, cy, lod);
        }
 
-       if (!m_validator.validateImage(m_protectedContext, refData, image, m_params.imageFormat))
+       if (!m_validator.validateImage(m_protectedContext, refData, image, m_params.imageFormat, imageLayout))
                return tcu::TestStatus::fail("Something went really wrong");
        else
                return tcu::TestStatus::pass("Everything went OK");
index 5f0cc7b..fda0eb9 100644 (file)
@@ -142,7 +142,7 @@ void static addBufferCopyCmd (const vk::DeviceInterface&    vk,
        };
        vk.cmdPipelineBarrier(cmdBuffer,
                                                  vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                 vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                 vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
                                                  (vk::VkDependencyFlags)0,
                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                  1, &dstWriteStartBarrier,
@@ -160,7 +160,7 @@ void static addBufferCopyCmd (const vk::DeviceInterface&    vk,
        {
                vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
                DE_NULL,                                                                                        // const void*                  pNext
-               vk::VK_ACCESS_TRANSFER_WRITE_BIT,                                       // VkAccessFlags                srcAccessMask
+               vk::VK_ACCESS_SHADER_WRITE_BIT,                                         // VkAccessFlags                srcAccessMask
                vk::VK_ACCESS_SHADER_READ_BIT,                                          // VkAccessFlags                dstAccessMask
                queueFamilyIndex,                                                                       // uint32_t                             srcQueueFamilyIndex
                queueFamilyIndex,                                                                       // uint32_t                             dstQueueFamilyIndex
@@ -169,8 +169,8 @@ void static addBufferCopyCmd (const vk::DeviceInterface&    vk,
                VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
        };
        vk.cmdPipelineBarrier(cmdBuffer,
-                                                 vk::VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
-                                                 vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                 vk::VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,
+                                                 vk::VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
                                                  (vk::VkDependencyFlags)0,
                                                  0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                  1, &dstWriteEndBarrier,
@@ -517,7 +517,7 @@ tcu::TestStatus StorageBufferTestInstance<T>::executeFragmentTest(void)
                        }
                };
                vk.cmdPipelineBarrier(*cmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+                                                         vk::VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
                                                          vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
index 37c3791..509851f 100644 (file)
@@ -204,6 +204,21 @@ struct TestParameters
        {}
 };
 
+static vk::VkCompositeAlphaFlagBitsKHR firstSupportedCompositeAlpha(const vk::VkSurfaceCapabilitiesKHR& capabilities)
+{
+       deUint32 alphaMode = 1u;
+
+       for (;alphaMode < capabilities.supportedCompositeAlpha; alphaMode = alphaMode<<1u)
+       {
+               if ((alphaMode & capabilities.supportedCompositeAlpha) != 0)
+               {
+                       break;
+               }
+       }
+
+       return (vk::VkCompositeAlphaFlagBitsKHR)alphaMode;
+}
+
 std::vector<vk::VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (vk::wsi::Type                                                               wsiType,
                                                                                                                                                   TestDimension                                                                dimension,
                                                                                                                                                   const ProtectedContext&                                              context,
@@ -232,7 +247,7 @@ std::vector<vk::VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (vk::w
                0u,
                (const deUint32*)DE_NULL,
                defaultTransform,
-               vk::VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
+               firstSupportedCompositeAlpha(capabilities),
                vk::VK_PRESENT_MODE_FIFO_KHR,
                VK_FALSE,                                                       // clipped
                (vk::VkSwapchainKHR)0                           // oldSwapchain
@@ -703,7 +718,7 @@ vk::VkSwapchainCreateInfoKHR getBasicSwapchainParameters (vk::wsi::Type                                     wsiT
                0u,
                (const deUint32*)DE_NULL,
                transform,
-               vk::VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
+               firstSupportedCompositeAlpha(capabilities),
                vk::VK_PRESENT_MODE_FIFO_KHR,
                VK_FALSE,                                                       // clipped
                (vk::VkSwapchainKHR)0                           // oldSwapchain
@@ -1094,7 +1109,7 @@ tcu::TestStatus basicRenderTest (Context& baseCtx, vk::wsi::Type wsiType)
                                                                                                                                                          *swapchain,
                                                                                                                                                          std::numeric_limits<deUint64>::max(),
                                                                                                                                                          imageReadySemaphore,
-                                                                                                                                                         imageReadyFence,
+                                                                                                                                                         0,
                                                                                                                                                          &imageNdx);
 
                                if (acquireResult == vk::VK_SUBOPTIMAL_KHR)
@@ -1143,7 +1158,7 @@ tcu::TestStatus basicRenderTest (Context& baseCtx, vk::wsi::Type wsiType)
                                };
 
                                renderer.recordFrame(commandBuffer, imageNdx, frameNdx);
-                               VK_CHECK(vkd.queueSubmit(context.getQueue(), 1u, &submitInfo, (vk::VkFence)0));
+                               VK_CHECK(vkd.queueSubmit(context.getQueue(), 1u, &submitInfo, imageReadyFence));
                                VK_CHECK(vkd.queuePresentKHR(context.getQueue(), &presentInfo));
                        }
                }