Fix synchronization issues in descriptor_indexing tests
authorPawel Ksiezopolski <pawel.ksiezopolski@mobica.com>
Wed, 12 Jun 2019 19:21:27 +0000 (21:21 +0200)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Sat, 22 Jun 2019 17:39:23 +0000 (13:39 -0400)
Some of the operations in descriptor_indexing caused image contents to be discarded.

Affects tests:
dEQP-VK.descriptor_indexing.*

Components: Vulkan

VK-GL-CTS issue: 1803

Change-Id: If368012d5b8524ef81dd07da8d9be2f1cfb9a907

external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.cpp
external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTests.hpp
external/vulkancts/modules/vulkan/descriptor_indexing/vktDescriptorSetsIndexingTestsUtils.cpp

index aaa64a2..99326b7 100644 (file)
@@ -1018,11 +1018,9 @@ void CommonDescriptorInstance::copyBuffersToImages                                       (IterateCommonVariables&
                        *(variables.descriptorsImages[infoIdx]->image), // image
                        variables.descriptorsImages[infoIdx]->extent,   // imageExtent
                        variables.descriptorsImages[infoIdx]->format,   // imageFormat
-                       variables.descriptorsImages[infoIdx]->layout,   // oldImageLayout
-                       VK_IMAGE_LAYOUT_GENERAL,                                                // newImageLayout
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // oldImageLayout
+                       VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,               // newImageLayout
                        variables.descriptorsImages[infoIdx]->levels);  // mipLevelCount
-
-               variables.descriptorsImages[infoIdx]->layout = VK_IMAGE_LAYOUT_GENERAL;
        }
 }
 
@@ -1044,8 +1042,8 @@ void CommonDescriptorInstance::copyImagesToBuffers                                        (IterateCommonVariables&
                        *(variables.descriptorsImages[infoIdx]->image), // image
                        variables.descriptorsImages[infoIdx]->extent,   // imageExtent
                        variables.descriptorsImages[infoIdx]->format,   // imageFormat
-                       variables.descriptorsImages[infoIdx]->layout,   // oldImageLayout
-                       VK_IMAGE_LAYOUT_GENERAL,                                                // newImageLayout
+                       VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,               // oldImageLayout
+                       VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,               // newImageLayout
                        variables.descriptorsBufferInfos[infoIdx]);             // bufferInfo
        }
 }
@@ -1445,21 +1443,21 @@ void CommonDescriptorInstance::commandReadFrameBuffer                           (ut::BufferHandleAllocS
                0u,                                                                                     // baseMipLevel
                1u,                                                                                     // levelCount
                0u,                                                                                     // baseArrayLayer
-               1u,                                                                                     // layerCount
+               1u                                                                                      // layerCount
        };
 
-       const VkImageMemoryBarrier      imageBarrier =
+       const VkImageMemoryBarrier      barrierBefore =
        {
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,         // sType;
                DE_NULL,                                                                        // pNext;
                VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,           // srcAccessMask;
                VK_ACCESS_TRANSFER_READ_BIT,                            // dstAccessMask;
-               VK_IMAGE_LAYOUT_UNDEFINED,                                      // oldLayout
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,       // oldLayout
                VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,           // newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                        // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                        // dstQueueFamilyIndex;
                image,                                                                          // image;
-               subresourceRange,                                                       // subresourceRange;
+               subresourceRange                                                        // subresourceRange;
        };
 
        const VkBufferImageCopy         copyRegion =
@@ -1490,21 +1488,36 @@ void CommonDescriptorInstance::commandReadFrameBuffer                           (ut::BufferHandleAllocS
                bufferSize                                                                      // size;
        };
 
+       const VkImageMemoryBarrier      barrierAfter =
+       {
+               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // sType;
+               DE_NULL,                                                                                // pNext;
+               VK_ACCESS_TRANSFER_READ_BIT,                                    // srcAccessMask;
+               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // dstAccessMask;
+               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // oldLayout;
+               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // newLayout;
+               VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
+               image,                                                                                  // image
+               subresourceRange                                                                // subresourceRange
+       };
+
+
        m_vki.cmdPipelineBarrier(commandBuffer,                                                                                         // commandBuffer
                VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,  // srcStageMask, dstStageMask
                (VkDependencyFlags)0,                                                                                                                   // dependencyFlags
-               0u, (const VkMemoryBarrier*)DE_NULL,                                                                                    // memoryBarrierCount, pMemoryBarriers
-               0u, (const VkBufferMemoryBarrier*)DE_NULL,                                                                              // bufferBarrierCount, pBufferBarriers
-               1u, &imageBarrier);                                                                                                                             // imageBarrierCount, pImageBarriers
+               0u, DE_NULL,                                                                                                                                    // memoryBarrierCount, pMemoryBarriers
+               0u, DE_NULL,                                                                                                                                    // bufferBarrierCount, pBufferBarriers
+               1u, &barrierBefore);                                                                                                                            // imageBarrierCount, pImageBarriers
 
        m_vki.cmdCopyImageToBuffer(commandBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *buffer, 1u, &copyRegion);
 
        m_vki.cmdPipelineBarrier(commandBuffer,
-               VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT,
+               VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
                (VkDependencyFlags)0,
-               0, DE_NULL,
-               1, &bufferBarrier,
-               0u, DE_NULL);
+               0u, DE_NULL,
+               1u, &bufferBarrier,
+               1u, &barrierAfter);
 
        content = ut::BufferHandleAllocSp(new ut::BufferHandleAlloc(buffer, allocation));
 }
@@ -2233,7 +2246,7 @@ InputAttachmentInstance::InputAttachmentInstance                                  (Context&                                                                       context,
 void InputAttachmentInstance::createAndPopulateDescriptors                     (IterateCommonVariables&                                        variables)
 {
        createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
-               (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), m_testParams.frameResolution, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount);
+               VK_BUFFER_USAGE_TRANSFER_SRC_BIT, m_testParams.frameResolution, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount);
        createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
 
        for (deUint32 descriptorIdx = 0; descriptorIdx < variables.validDescriptorCount; ++descriptorIdx)
@@ -2242,6 +2255,7 @@ void InputAttachmentInstance::createAndPopulateDescriptors                        (IterateCommonVaria
                const tcu::PixelBufferAccess    pa                      = getPixelAccess(descriptorIdx, m_testParams.frameResolution, m_colorFormat, variables.descriptorsBufferInfos, variables.descriptorsBuffer);
                tcu::clear(pa, tcu::Vec4(component, component, component, 1.0f));
        }
+       vk::flushAlloc(m_vki, m_vkd, *variables.descriptorsBuffer->alloc);
 }
 
 Move<VkRenderPass> InputAttachmentInstance::createRenderPass           (const IterateCommonVariables&                          variables)
@@ -2279,17 +2293,17 @@ Move<VkRenderPass> InputAttachmentInstance::createRenderPass            (const IterateComm
                                variables.descriptorsImages[inputIdx]->format,  // VkFormat                                                     format;
                                VK_SAMPLE_COUNT_1_BIT,                                                  // VkSampleCountFlagBits                        samples;
                                VK_ATTACHMENT_LOAD_OP_LOAD,                                             // VkAttachmentLoadOp                           loadOp;
-                               VK_ATTACHMENT_STORE_OP_DONT_CARE,                               // VkAttachmentStoreOp                          storeOp;
+                               VK_ATTACHMENT_STORE_OP_STORE,                                   // VkAttachmentStoreOp                          storeOp;
                                VK_ATTACHMENT_LOAD_OP_DONT_CARE,                                // VkAttachmentLoadOp                           stencilLoadOp;
                                VK_ATTACHMENT_STORE_OP_DONT_CARE,                               // VkAttachmentStoreOp                          stencilStoreOp;
-                               variables.descriptorsImages[inputIdx]->layout,  // VkImageLayout                                        initialLayout;
-                               VK_IMAGE_LAYOUT_GENERAL,                                                // VkImageLayout                                        finalLayout;
+                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,               // VkImageLayout                                        initialLayout;
+                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL                // VkImageLayout                                        finalLayout;
                        };
 
                        const VkAttachmentReference             inputAttachmentRef =
                        {
                                inputIdx + 1,                                                           // deUint32                                                     attachment;
-                               VK_IMAGE_LAYOUT_GENERAL                                         // VkImageLayout                                        layout;
+                               VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL        // VkImageLayout                                        layout;
                        };
 
                        inputAttachmentRefs.push_back(inputAttachmentRef);
@@ -2420,7 +2434,7 @@ void SamplerInstance::createAndPopulateDescriptors                                        (IterateCommonVariables&
                };
 
                createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
-                       (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, 1, m_testParams.usesMipMaps);
+                       VK_BUFFER_USAGE_TRANSFER_SRC_BIT, imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, 1, m_testParams.usesMipMaps);
                createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
 
                PixelBufferAccess pa = getPixelAccess(0, imageExtent, m_colorFormat, variables.descriptorsBufferInfos, variables.descriptorsBuffer, m_testParams.usesMipMaps ? 1 : 0);
@@ -2539,7 +2553,7 @@ void SampledImageInstance::createAndPopulateDescriptors                           (IterateCommonVariabl
        const VkExtent3D&                       imageExtent = m_testParams.usesMipMaps ? bigImageExtent : smallImageExtent;
 
        createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer,
-               (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT), imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
+               VK_BUFFER_USAGE_TRANSFER_SRC_BIT, imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
        createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
 
        PixelBufferAccess                       pixelAccess;
@@ -2650,7 +2664,7 @@ void CombinedImageInstance::createAndPopulateDescriptors                  (IterateCommonVariabl
        variables.descriptorSamplers.push_back(ut::SamplerSp(new Move<VkSampler>(vk::createSampler(m_vki, m_vkd, &createInfo))));
 
        const VkExtent3D&                       imageExtent = m_testParams.usesMipMaps ? bigImageExtent : smallImageExtent;
-       createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer, (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT),
+       createImages(variables.descriptorsImages, variables.descriptorsBufferInfos, variables.descriptorsBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
                imageExtent, m_colorFormat, VK_IMAGE_LAYOUT_UNDEFINED, variables.validDescriptorCount, m_testParams.usesMipMaps);
        createImagesViews(variables.descriptorImageViews, variables.descriptorsImages, m_colorFormat);
 
index d0af3a4..c8a59c1 100644 (file)
@@ -66,7 +66,6 @@ struct ImageHandleAlloc
        AllocMv                 alloc;
        VkExtent3D              extent;
        VkFormat                format;
-       VkImageLayout   layout;
        deUint32                levels;
 
        bool                    usesMipMaps                     (void) const { return levels > 0; }
@@ -79,7 +78,6 @@ struct ImageHandleAlloc
                                                                                 AllocMv&                       alloc_,
                                                                                 const VkExtent3D&      extent_,
                                                                                 VkFormat                       format_,
-                                                                                VkImageLayout          layout_,
                                                                                 bool                           usesMipMaps_ = false);
 private:
                                        ImageHandleAlloc        (const ImageHandleAlloc&) {}
@@ -186,7 +184,7 @@ void                                        recordCopyImageToBuffer (VkCommandBuffer                                cmd,
                                                                                                 VkImageLayout                                  newImageLayout,
                                                                                                 const VkDescriptorBufferInfo&  bufferInfo);
 
-VkAccessFlags                  pipelineAcceesFromStage (VkPipelineStageFlagBits                stage,
+VkAccessFlags                  pipelineAccessFromStage (VkPipelineStageFlagBits                stage,
                                                                                                bool                                                    readORwrite);
 
 bool                                   isDynamicDescriptor             (VkDescriptorType                               descriptorType);
index b6b1765..3c18aed 100644 (file)
@@ -62,13 +62,11 @@ ImageHandleAlloc::ImageHandleAlloc  (Move<VkImage>&                                 image_,
                                                                         AllocMv&                                               alloc_,
                                                                         const VkExtent3D&                              extent_,
                                                                         VkFormat                                               format_,
-                                                                        VkImageLayout                                  layout_,
                                                                         bool                                                   usesMipMaps_)
        : image         (image_)
        , alloc         (alloc_)
        , extent        (extent_)
        , format        (format_)
-       , layout        (layout_)
        , levels        (usesMipMaps_ ? computeMipMapCount(extent_) : 1)
 {
 }
@@ -247,7 +245,7 @@ void createImageAndBind                             (ut::ImageHandleAllocSp&                output,
 
        VK_CHECK(dinterface.bindImageMemory(device, *image, allocation->getMemory(), allocation->getOffset()));
 
-       output = ImageHandleAllocSp(new ImageHandleAlloc(image, allocation, extent, colorFormat, initialLayout, withMipMaps));
+       output = ImageHandleAllocSp(new ImageHandleAlloc(image, allocation, extent, colorFormat, withMipMaps));
 }
 
 void recordCopyBufferToImage           (VkCommandBuffer                                cmd,
@@ -308,14 +306,14 @@ void recordCopyBufferToImage              (VkCommandBuffer                                cmd,
                1u,                                                                                             // layerCount
        };
 
-       const VkImageMemoryBarrier      transitionBarrier =
+       const VkImageMemoryBarrier      barrierBefore =
        {
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // sType;
                DE_NULL,                                                                                // pNext;
                0,                                                                                              // srcAccessMask;
                VK_ACCESS_TRANSFER_WRITE_BIT,                                   // dstAccessMask;
                oldImageLayout,                                                                 // oldLayout;
-               newImageLayout,                                                                 // newLayout;
+               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
                image,                                                                                  // image
@@ -326,7 +324,7 @@ void recordCopyBufferToImage                (VkCommandBuffer                                cmd,
        {
                VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                // sType;
                DE_NULL,                                                                                // pNext;
-               pipelineAcceesFromStage(srcStageMask, false),   // srcAccessMask;
+               pipelineAccessFromStage(srcStageMask, false),   // srcAccessMask;
                VK_ACCESS_TRANSFER_READ_BIT,                                    // dstAccessMask;
                VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
@@ -335,14 +333,14 @@ void recordCopyBufferToImage              (VkCommandBuffer                                cmd,
                bufferInfo.range                                                                // size;
        };
 
-       const VkImageMemoryBarrier      imageBarrier =
+       const VkImageMemoryBarrier      barrierAfter =
        {
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // sType;
                DE_NULL,                                                                                // pNext;
                VK_ACCESS_TRANSFER_WRITE_BIT,                                   // srcAccessMask;
-               pipelineAcceesFromStage(dstStageMask, true)
-               | pipelineAcceesFromStage(dstStageMask, false), // dstAccessMask;
-               oldImageLayout,                                                                 // oldLayout;
+               pipelineAccessFromStage(dstStageMask, true)
+               | pipelineAccessFromStage(dstStageMask, false), // dstAccessMask;
+               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // oldLayout;
                newImageLayout,                                                                 // newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
@@ -353,18 +351,18 @@ void recordCopyBufferToImage              (VkCommandBuffer                                cmd,
        interface.cmdPipelineBarrier(cmd,
                srcStageMask, VK_PIPELINE_STAGE_TRANSFER_BIT,   // srcStageMask, dstStageMask
                (VkDependencyFlags)0,                                                   // dependencyFlags
-               0u, (const VkMemoryBarrier*)DE_NULL,                    // memoryBarrierCount, pMemoryBarriers
+               0u, DE_NULL,                                                                    // memoryBarrierCount, pMemoryBarriers
                1u, &bufferBarrier,                                                             // bufferBarrierCount, pBufferBarriers
-               1u, &transitionBarrier);                                                // imageBarrierCount, pImageBarriers
+               1u, &barrierBefore);                                                    // imageBarrierCount, pImageBarriers
 
-       interface.cmdCopyBufferToImage(cmd, bufferInfo.buffer, image, newImageLayout, static_cast<deUint32>(copyRegions.size()), copyRegions.data());
+       interface.cmdCopyBufferToImage(cmd, bufferInfo.buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, static_cast<deUint32>(copyRegions.size()), copyRegions.data());
 
        interface.cmdPipelineBarrier(cmd,
                VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask,   // srcStageMask, dstStageMask
                (VkDependencyFlags)0,                                                   // dependencyFlags
-               0u, (const VkMemoryBarrier*)DE_NULL,                    // memoryBarrierCount, pMemoryBarriers
-               0u, (const VkBufferMemoryBarrier*)DE_NULL,              // bufferBarrierCount, pBufferBarriers
-               1u, &imageBarrier);                                                             // imageBarrierCount, pImageBarriers
+               0u, DE_NULL,                                                                    // memoryBarrierCount, pMemoryBarriers
+               0u, DE_NULL,                                                                    // bufferBarrierCount, pBufferBarriers
+               1u, &barrierAfter);                                                             // imageBarrierCount, pImageBarriers
 }
 
 void recordCopyImageToBuffer           (VkCommandBuffer                                cmd,
@@ -406,51 +404,53 @@ void recordCopyImageToBuffer              (VkCommandBuffer                                cmd,
                1u,                                                                                             // layerCount
        };
 
-       const VkImageMemoryBarrier      imageBarrier =
+       const VkImageMemoryBarrier      barrierBefore =
        {
                VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // sType;
                DE_NULL,                                                                                // pNext;
-               pipelineAcceesFromStage(srcStageMask, false),   // srcAccessMask;
+               pipelineAccessFromStage(srcStageMask, false),   // srcAccessMask;
                VK_ACCESS_TRANSFER_READ_BIT,                                    // dstAccessMask;
                oldImageLayout,                                                                 // oldLayout
-               newImageLayout,                                                                 // newLayout;
+               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
                image,                                                                                  // image;
                subresourceRange,                                                               // subresourceRange;
        };
 
-       const VkBufferMemoryBarrier     bufferBarrier =
+       const VkImageMemoryBarrier      barrierAfter =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                // sType;
+               VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,                 // sType;
                DE_NULL,                                                                                // pNext;
-               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // srcAccessMask;
-               pipelineAcceesFromStage(dstStageMask, true),    // dstAccessMask;
+               VK_ACCESS_TRANSFER_READ_BIT,                                    // srcAccessMask;
+               pipelineAccessFromStage(dstStageMask, true)
+               | pipelineAccessFromStage(dstStageMask, false), // dstAccessMask;
+               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // oldLayout;
+               newImageLayout,                                                                 // newLayout;
                VK_QUEUE_FAMILY_IGNORED,                                                // srcQueueFamilyIndex;
                VK_QUEUE_FAMILY_IGNORED,                                                // dstQueueFamilyIndex;
-               bufferInfo.buffer,                                                              // buffer;
-               bufferInfo.offset,                                                              // offset;
-               bufferInfo.range                                                                // size;
+               image,                                                                                  // image
+               subresourceRange                                                                // subresourceRange
        };
 
        interface.cmdPipelineBarrier(cmd,                                       // commandBuffer
                srcStageMask, VK_PIPELINE_STAGE_TRANSFER_BIT,   // srcStageMask, dstStageMask
                (VkDependencyFlags)0,                                                   // dependencyFlags
-               0u, (const VkMemoryBarrier*)DE_NULL,                    // memoryBarrierCount, pMemoryBarriers
-               0u, (const VkBufferMemoryBarrier*)DE_NULL,              // bufferBarrierCount, pBufferBarriers
-               1u, &imageBarrier);                                                             // imageBarrierCount, pImageBarriers
+               0u, DE_NULL,                                                                    // memoryBarrierCount, pMemoryBarriers
+               0u, DE_NULL,                                                                    // bufferBarrierCount, pBufferBarriers
+               1u, &barrierBefore);                                                    // imageBarrierCount, pImageBarriers
 
-       interface.cmdCopyImageToBuffer(cmd, image, newImageLayout, bufferInfo.buffer, 1u, &copyRegion);
+       interface.cmdCopyImageToBuffer(cmd, image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, bufferInfo.buffer, 1u, &copyRegion);
 
        interface.cmdPipelineBarrier(cmd,
                VK_PIPELINE_STAGE_TRANSFER_BIT, dstStageMask,
                (VkDependencyFlags)0,
-               0, DE_NULL,
-               1, &bufferBarrier,
-               0u, DE_NULL);
+               0u, DE_NULL,
+               0u, DE_NULL,
+               0u, &barrierAfter);
 }
 
-VkAccessFlags pipelineAcceesFromStage (VkPipelineStageFlagBits stage, bool readORwrite)
+VkAccessFlags pipelineAccessFromStage (VkPipelineStageFlagBits stage, bool readORwrite)
 {
        VkAccessFlags access[2];
        VkAccessFlags& readAccess = access[1];