Fix pipeline barrier issues in protected memory tests
authorJohn Anthony <john.anthony@arm.com>
Wed, 19 Sep 2018 14:44:43 +0000 (16:44 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 25 Sep 2018 10:31:29 +0000 (06:31 -0400)
Set correct stage mask for pipeline barriers, and remove pipeline
barriers that are not needed.

Components: Vulkan

VK-GL-CTS issue: 1373

Affects:
dEQP-VK.protected_memory.buffer.*
dEQP-VK.protected_memory.attachment.*

Change-Id: I6dae7ad02c66649281a35465939437a5fb26dd0e

external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemAttachmentClearTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemAttachmentLoadTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemCopyImageToBufferTests.cpp
external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemFillUpdateCopyBufferTests.cpp

index fbff6e1..f987f14 100644 (file)
@@ -253,6 +253,7 @@ tcu::TestStatus AttachmentClearTestInstance::iterate()
        vk.cmdEndRenderPass(*cmdBuffer);
 
        {
+               // Image validator reads image in compute shader
                const vk::VkImageMemoryBarrier  endImgBarrier           =
                {
                        vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                     // sType
@@ -273,8 +274,8 @@ tcu::TestStatus AttachmentClearTestInstance::iterate()
                        }
                };
                vk.cmdPipelineBarrier(*cmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                          vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                         vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
index 79b7386..ca2587b 100644 (file)
@@ -181,6 +181,7 @@ tcu::TestStatus AttachmentLoadTestInstance::iterate()
        vk.cmdEndRenderPass(*cmdBuffer);
 
        {
+               // Image validator reads image in compute shader
                const vk::VkImageMemoryBarrier  endImgBarrier           =
                {
                        vk::VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                     // sType
@@ -201,8 +202,8 @@ tcu::TestStatus AttachmentLoadTestInstance::iterate()
                        }
                };
                vk.cmdPipelineBarrier(*cmdBuffer,
-                                                               vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                                vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
+                                                               vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                                (vk::VkDependencyFlags)0,
                                                                0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                                0, (const vk::VkBufferMemoryBarrier*)DE_NULL,
index 90b04df..5e78eaa 100644 (file)
@@ -189,7 +189,7 @@ tcu::TestStatus CopyImageToBufferTestInstance<T>::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,
@@ -231,39 +231,14 @@ tcu::TestStatus CopyImageToBufferTestInstance<T>::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,
                                                          1, &initializeBarrier);
        }
 
-       // Start destination buffer barrier
-       {
-               const vk::VkBufferMemoryBarrier startBufferBarrier              =
-               {
-                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
-                       DE_NULL,                                                                                        // const void*                  pNext
-                       0,                                                                                                      // VkAccessFlags                srcAccessMask
-                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,                                       // VkAccessFlags                dstAccessMask
-                       queueFamilyIndex,                                                                       // uint32_t                             srcQueueFamilyIndex
-                       queueFamilyIndex,                                                                       // uint32_t                             dstQueueFamilyIndex
-                       **dstBuffer,                                                                            // VkBuffer                             buffer
-                       0u,                                                                                                     // VkDeviceSize                 offset
-                       VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
-               };
-
-               vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-                                                         (vk::VkDependencyFlags)0,
-                                                         0, (const vk::VkMemoryBarrier*)DE_NULL,
-                                                         1, &startBufferBarrier,
-                                                         0, (const vk::VkImageMemoryBarrier*)DE_NULL);
-       }
-
-
        // Copy image to buffer
        const vk::VkImageSubresourceLayers      subresourceLayers       =
        {
@@ -286,6 +261,7 @@ tcu::TestStatus CopyImageToBufferTestInstance<T>::iterate()
        vk.cmdCopyImageToBuffer(targetCmdBuffer, **colorImage, vk::VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **dstBuffer, 1u, &copyRegion);
 
        {
+               // Buffer validator reads buffer in compute shader
                const vk::VkBufferMemoryBarrier endBufferBarrier                =
                {
                        vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
@@ -299,8 +275,8 @@ tcu::TestStatus CopyImageToBufferTestInstance<T>::iterate()
                        VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
                };
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                               vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                                vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                               vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                                (vk::VkDependencyFlags)0,
                                                                0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                                1, &endBufferBarrier,
index f6b51dc..c5900d0 100644 (file)
@@ -192,25 +192,6 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
        switch (m_cmdType) {
                case FILL_BUFFER:
                        {
-                               const vk::VkBufferMemoryBarrier startFillBufferBarrier =
-                               {
-                                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,    // VkStructureType              sType
-                                       DE_NULL,                                                                                // const void*                  pNext
-                                       0,                                                                                              // VkAccessFlags                srcAccessMask
-                                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                dstAccessMask
-                                       queueFamilyIndex,                                                               // uint32_t                             srcQueueFamilyIndex
-                                       queueFamilyIndex,                                                               // uint32_t                             dstQueueFamilyIndex
-                                       **dstBuffer,                                                                    // VkBuffer                             buffer
-                                       0u,                                                                                             // VkDeviceSize                 offset
-                                       VK_WHOLE_SIZE,                                                                  // VkDeviceSize                 size
-                               };
-                               vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-                                                                         (vk::VkDependencyFlags) 0,
-                                                                         0, (const vk::VkMemoryBarrier *) DE_NULL,
-                                                                         1, &startFillBufferBarrier,
-                                                                         0, (const vk::VkImageMemoryBarrier *) DE_NULL);
                                // Fill buffer
                                vk.cmdFillBuffer(targetCmdBuffer, **dstBuffer, 0u, VK_WHOLE_SIZE, m_fillValue);
                                break;
@@ -218,25 +199,6 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
 
                case UPDATE_BUFFER:
                        {
-                               const vk::VkBufferMemoryBarrier startUpdateBufferBarrier =
-                               {
-                                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,    // VkStructureType              sType
-                                       DE_NULL,                                                                                // const void*                  pNext
-                                       0,                                                                                              // VkAccessFlags                srcAccessMask
-                                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                dstAccessMask
-                                       queueFamilyIndex,                                                               // uint32_t                             srcQueueFamilyIndex
-                                       queueFamilyIndex,                                                               // uint32_t                             dstQueueFamilyIndex
-                                       **dstBuffer,                                                                    // VkBuffer                             buffer
-                                       0u,                                                                                             // VkDeviceSize                 offset
-                                       VK_WHOLE_SIZE,                                                                  // VkDeviceSize                 size
-                               };
-                               vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-                                                                         (vk::VkDependencyFlags) 0,
-                                                                         0, (const vk::VkMemoryBarrier *) DE_NULL,
-                                                                         1, &startUpdateBufferBarrier,
-                                                                         0, (const vk::VkImageMemoryBarrier *) DE_NULL);
                                // Update buffer
                                deUint32 data[BUFFER_SIZE];
                                for (size_t ndx = 0; ndx < BUFFER_SIZE; ndx++)
@@ -247,30 +209,9 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
 
                case COPY_BUFFER:
                        {
-                               // Start src buffer barrier
-                               const vk::VkBufferMemoryBarrier startBufferBarrier =
-                               {
-                                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,    // VkStructureType              sType
-                                       DE_NULL,                                                                                // const void*                  pNext
-                                       0,                                                                                              // VkAccessFlags                srcAccessMask
-                                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,                               // VkAccessFlags                dstAccessMask
-                                       queueFamilyIndex,                                                               // uint32_t                             srcQueueFamilyIndex
-                                       queueFamilyIndex,                                                               // uint32_t                             dstQueueFamilyIndex
-                                       **srcBuffer,                                                                    // VkBuffer                             buffer
-                                       0u,                                                                                             // VkDeviceSize                 offset
-                                       VK_WHOLE_SIZE,                                                                  // VkDeviceSize                 size
-                               };
-                               vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
-                                                                         vk::VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
-                                                                         (vk::VkDependencyFlags) 0,
-                                                                         0, (const vk::VkMemoryBarrier *) DE_NULL,
-                                                                         1, &startBufferBarrier,
-                                                                         0, (const vk::VkImageMemoryBarrier *) DE_NULL);
                                vk.cmdFillBuffer(targetCmdBuffer, **srcBuffer, 0u, VK_WHOLE_SIZE, m_fillValue);
 
-                               // Barrier to change accessMask to transfer read bit for source buffer
-                               const vk::VkBufferMemoryBarrier startCopyBufferBarrier  =
+                               const vk::VkBufferMemoryBarrier copyBufferBarrier       =
                                {
                                        vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
                                        DE_NULL,                                                                                        // const void*                  pNext
@@ -283,32 +224,14 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
                                        VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
                                };
 
-                               // Image barrier for destination buffer
-                               const vk::VkBufferMemoryBarrier dstBufferBarrier                =
-                               {
-                                       vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
-                                       DE_NULL,                                                                                        // const void*                  pNext
-                                       0,                                                                                                      // VkAccessFlags                srcAccessMask
-                                       vk::VK_ACCESS_TRANSFER_WRITE_BIT,                                       // VkAccessFlags                dstAccessMask
-                                       queueFamilyIndex,                                                                       // uint32_t                             srcQueueFamilyIndex
-                                       queueFamilyIndex,                                                                       // uint32_t                             dstQueueFamilyIndex
-                                       **dstBuffer,                                                                            // VkBuffer                             buffer
-                                       0u,                                                                                                     // VkDeviceSize                 offset
-                                       VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
-                               };
-
-                               const vk::VkBufferMemoryBarrier memoryBarriers[2] =
-                               {
-                                       startCopyBufferBarrier,
-                                       dstBufferBarrier
-                               };
                                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,
-                                                                         2, memoryBarriers,
+                                                                         1, &copyBufferBarrier,
                                                                          0, (const vk::VkImageMemoryBarrier*)DE_NULL);
+
                                // Copy buffer
                                const vk::VkBufferCopy                          copyBufferRegion                =
                                {
@@ -326,6 +249,7 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
        }
 
        {
+               // Buffer validator reads buffer in compute shader
                const vk::VkBufferMemoryBarrier endBufferBarrier                =
                {
                        vk::VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,            // VkStructureType              sType
@@ -339,8 +263,8 @@ tcu::TestStatus FillUpdateCopyBufferTestInstance<T>::iterate()
                        VK_WHOLE_SIZE,                                                                          // VkDeviceSize                 size
                };
                vk.cmdPipelineBarrier(targetCmdBuffer,
-                                                         vk::VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
                                                          vk::VK_PIPELINE_STAGE_TRANSFER_BIT,
+                                                         vk::VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
                                                          (vk::VkDependencyFlags)0,
                                                          0, (const vk::VkMemoryBarrier*)DE_NULL,
                                                          1, &endBufferBarrier,