Generalize SynchronizationOperations for sync2
authorPiotr Byszewski <piotr.byszewski@mobica.com>
Fri, 27 Nov 2020 10:44:40 +0000 (11:44 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 16 Feb 2021 08:21:25 +0000 (08:21 +0000)
This change generalize all barriers executed in
SynchronizationOperations that were missed while adding
support for VK_KHR_synchronization2.

Components: Vulkan

VK-GL-CTS issue: 2365

Affects:
dEQP-VK.synchronization.*
dEQP-VK.synchronization2.*

Change-Id: I67f6e2753373bd34d0aef0f3313c1d8993a60169

external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperation.hpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationTimelineSemaphoreTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationUtil.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationUtil.hpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp

index d338a63..10e75e4 100644 (file)
@@ -1093,7 +1093,7 @@ tcu::TestStatus SharingTestInstance::iterate (void)
                const vk::Unique<vk::VkCommandPool>             commandPoolA            (createCommandPool(m_vkdA, *m_deviceA, queueFamilyA));
                const vk::Unique<vk::VkCommandBuffer>   commandBufferA          (createCommandBuffer(m_vkdA, *m_deviceA, *commandPoolA));
                vk::SimpleAllocator                                             allocatorA                      (m_vkdA, *m_deviceA, vk::getPhysicalDeviceMemoryProperties(m_vkiA, m_physicalDeviceA));
-               OperationContext                                                operationContextA       (m_context, m_vkiA, m_vkdA, m_physicalDeviceA, *m_deviceA, allocatorA, m_context.getBinaryCollection(), m_pipelineCacheData);
+               OperationContext                                                operationContextA       (m_context, m_config.type, m_vkiA, m_vkdA, m_physicalDeviceA, *m_deviceA, allocatorA, m_context.getBinaryCollection(), m_pipelineCacheData);
 
                if (!checkQueueFlags(m_queueFamiliesA[m_queueANdx].queueFlags , m_supportWriteOp->getQueueFlags(operationContextA)))
                        TCU_THROW(NotSupportedError, "Operation not supported by the source queue");
@@ -1102,7 +1102,7 @@ tcu::TestStatus SharingTestInstance::iterate (void)
                const vk::Unique<vk::VkCommandPool>             commandPoolB            (createCommandPool(m_vkdB, *m_deviceB, queueFamilyB));
                const vk::Unique<vk::VkCommandBuffer>   commandBufferB          (createCommandBuffer(m_vkdB, *m_deviceB, *commandPoolB));
                vk::SimpleAllocator                                             allocatorB                      (m_vkdB, *m_deviceB, vk::getPhysicalDeviceMemoryProperties(m_vkiB, m_physicalDeviceB));
-               OperationContext                                                operationContextB       (m_context, m_vkiB, m_vkdB, m_physicalDeviceB, *m_deviceB, allocatorB, m_context.getBinaryCollection(), m_pipelineCacheData);
+               OperationContext                                                operationContextB       (m_context, m_config.type, m_vkiB, m_vkdB, m_physicalDeviceB, *m_deviceB, allocatorB, m_context.getBinaryCollection(), m_pipelineCacheData);
 
                if (!checkQueueFlags(m_queueFamiliesB[m_queueBNdx].queueFlags , m_supportReadOp->getQueueFlags(operationContextB)))
                        TCU_THROW(NotSupportedError, "Operation not supported by the destination queue");
index f0bb0b6..79e340d 100644 (file)
@@ -512,8 +512,18 @@ public:
                {
                        vk.cmdFillBuffer(cmdBuffer, m_resource.getBuffer().handle, m_resource.getBuffer().offset, m_resource.getBuffer().size, m_fillValue);
 
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, m_resource.getBuffer().handle, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       SynchronizationWrapperPtr synchronizationWrapper = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_READ_BIT,                                                    // VkAccessFlags2KHR                            dstAccessMask
+                               m_resource.getBuffer().handle,                                                  // VkBuffer                                                     buffer
+                               0u,                                                                                                             // VkDeviceSize                                         offset
+                               m_resource.getBuffer().size                                                             // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
                else if (m_bufferOp == BUFFER_OP_UPDATE)
                        vk.cmdUpdateBuffer(cmdBuffer, m_resource.getBuffer().handle, m_resource.getBuffer().offset, m_resource.getBuffer().size, reinterpret_cast<deUint32*>(&m_data[0]));
@@ -643,22 +653,41 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferCopy              copyRegion      = makeBufferCopy(0u, 0u, m_resource.getBuffer().size);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferCopy                      copyRegion                              = makeBufferCopy(0u, 0u, m_resource.getBuffer().size);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                if (m_mode == ACCESS_MODE_READ)
                {
                        vk.cmdCopyBuffer(cmdBuffer, m_resource.getBuffer().handle, **m_hostBuffer, 1u, &copyRegion);
 
                        // Insert a barrier so copied data is available to the host
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                                             // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                                                // VkAccessFlags2KHR                            dstAccessMask
+                               **m_hostBuffer,                                                                                 // VkBuffer                                                     buffer
+                               0u,                                                                                                             // VkDeviceSize                                         offset
+                               m_resource.getBuffer().size                                                             // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
                else
                {
-                       // // Insert a barrier so buffer data is available to the device
-                       // const VkBufferMemoryBarrier  barrier = makeBufferMemoryBarrier(VK_ACCESS_HOST_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
-                       // vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       // Insert a barrier so buffer data is available to the device
+                       //const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                       //      VK_PIPELINE_STAGE_HOST_BIT,                                                             // VkPipelineStageFlags2KHR                     srcStageMask
+                       //      VK_ACCESS_HOST_WRITE_BIT,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                       //      VK_PIPELINE_STAGE_TRANSFER_BIT,                                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                       //      VK_ACCESS_TRANSFER_READ_BIT,                                                    // VkAccessFlags2KHR                            dstAccessMask
+                       //      **m_hostBuffer,                                                                                 // VkBuffer                                                     buffer
+                       //      0u,                                                                                                             // VkDeviceSize                                         offset
+                       //      m_resource.getBuffer().size                                                             // VkDeviceSize                                         size
+                       //);
+                       //VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       //synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                        vk.cmdCopyBuffer(cmdBuffer, **m_hostBuffer, m_resource.getBuffer().handle, 1u, &copyRegion);
                }
@@ -883,23 +912,24 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy bufferCopyRegion        = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
-
-               const VkImageMemoryBarrier stagingImageTransferSrcLayoutBarrier = makeImageMemoryBarrier(
-                       VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
-                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                       **m_image, m_resource.getImage().subresourceRange);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         bufferCopyRegion                = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Staging image layout
                {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                               **m_image, m_resource.getImage().subresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               **m_image,                                                                              // VkImage                                                      image
+                               m_resource.getImage().subresourceRange                  // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                if (m_mode == ACCESS_MODE_READ)
@@ -908,15 +938,34 @@ public:
                        recordCopyCommand(cmdBuffer);
 
                        // Staging image layout
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &stagingImageTransferSrcLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_READ_BIT,                                    // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               **m_image,                                                                              // VkImage                                                      image
+                               m_resource.getImage().subresourceRange                  // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR imageDependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &imageDependencyInfo);
 
                        // Image -> Host buffer
                        vk.cmdCopyImageToBuffer(cmdBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **m_hostBuffer, 1u, &bufferCopyRegion);
 
                        // Insert a barrier so copied data is available to the host
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_bufferSize);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                             // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                                // VkAccessFlags2KHR                            dstAccessMask
+                               **m_hostBuffer,                                                                 // VkBuffer                                                     buffer
+                               0u,                                                                                             // VkDeviceSize                                         offset
+                               m_bufferSize                                                                    // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR bufferDependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &bufferDependencyInfo);
                }
                else
                {
@@ -924,18 +973,35 @@ public:
                        vk.cmdCopyBufferToImage(cmdBuffer, **m_hostBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &bufferCopyRegion);
 
                        // Staging image layout
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &stagingImageTransferSrcLayoutBarrier);
+                       {
+                               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                                       VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            srcAccessMask
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_TRANSFER_READ_BIT,                                    // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // VkImageLayout                                        newLayout
+                                       **m_image,                                                                              // VkImage                                                      image
+                                       m_resource.getImage().subresourceRange                  // VkImageSubresourceRange                      subresourceRange
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
+                       }
 
                        // Resource image layout
                        {
-                               const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                                       m_resource.getImage().handle, m_resource.getImage().subresourceRange);
-
-                               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                                       0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                                       m_resource.getImage().handle,                                   // VkImage                                                      image
+                                       m_resource.getImage().subresourceRange                  // VkImageSubresourceRange                      subresourceRange
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                        }
 
                        // Staging image -> Resource Image
@@ -1180,17 +1246,22 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk      = m_context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                {
-                       const VkImageMemoryBarrier layoutBarrier =
-                               makeImageMemoryBarrier(
-                                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                                       m_outResource.getImage().handle, m_outResource.getImage().subresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                                                                 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               m_outResource.getImage().handle,                                // VkImage                                                      image
+                               m_outResource.getImage().subresourceRange               // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                vk.cmdBlitImage(cmdBuffer,
@@ -1254,17 +1325,22 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk      = m_context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                {
-                       const VkImageMemoryBarrier layoutBarrier =
-                               makeImageMemoryBarrier(
-                                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                                       m_outResource.getImage().handle, m_outResource.getImage().subresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                                                                 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               m_outResource.getImage().handle,                                // VkImage                                                      image
+                               m_outResource.getImage().subresourceRange               // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                vk.cmdCopyImage(cmdBuffer,
@@ -1423,17 +1499,23 @@ public:
 
        void recordCommands (OperationContext& context, const VkCommandBuffer cmdBuffer, const VkDescriptorSet descriptorSet)
        {
-               const DeviceInterface&  vk      = context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(context.getSynchronizationType(), vk, DE_FALSE);
 
                // Change color attachment image layout
                {
-                       const VkImageMemoryBarrier colorAttachmentLayoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                               **m_colorAttachmentImage, m_colorImageSubresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,  // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                                        newLayout
+                               **m_colorAttachmentImage,                                               // VkImage                                                      image
+                               m_colorImageSubresourceRange                                    // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                {
@@ -1606,11 +1688,21 @@ public:
 
                if (m_mode == ACCESS_MODE_READ)
                {
-                       const DeviceInterface&  vk      = m_context.getDeviceInterface();
+                       const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+                       SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                        // Insert a barrier so data written by the shader is available to the host
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, m_pipelineStage, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               m_pipelineStage,                                                        // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                     // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags2KHR                            dstAccessMask
+                               **m_hostBuffer,                                                         // VkBuffer                                                     buffer
+                               0u,                                                                                     // VkDeviceSize                                         offset
+                               m_resource.getBuffer().size                                     // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
        }
 
@@ -1764,18 +1856,24 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy bufferCopyRegion        = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         bufferCopyRegion                = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Destination image layout
                {
-                       const VkImageMemoryBarrier barrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_SHADER_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
-                               *m_dstImage, m_resource.getImage().subresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, m_pipelineStage, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                      // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                       // VkAccessFlags2KHR                            srcAccessMask
+                               m_pipelineStage,                                                        // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        newLayout
+                               *m_dstImage,                                                            // VkImage                                                      image
+                               m_resource.getImage().subresourceRange          // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                // In write mode, source image must be filled with data.
@@ -1783,13 +1881,18 @@ public:
                {
                        // Layout for transfer
                        {
-                               const VkImageMemoryBarrier barrier = makeImageMemoryBarrier(
-                                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                                       *m_srcImage, m_resource.getImage().subresourceRange);
-
-                               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                                       0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
+                               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                      // VkPipelineStageFlags2KHR                     srcStageMask
+                                       (VkAccessFlags)0,                                                       // VkAccessFlags2KHR                            srcAccessMask
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                         // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_TRANSFER_WRITE_BIT,                           // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,           // VkImageLayout                                        newLayout
+                                       *m_srcImage,                                                            // VkImage                                                      image
+                                       m_resource.getImage().subresourceRange          // VkImageSubresourceRange                      subresourceRange
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                        }
 
                        // Host buffer -> Src image
@@ -1797,13 +1900,18 @@ public:
 
                        // Layout for shader reading
                        {
-                               const VkImageMemoryBarrier barrier = makeImageMemoryBarrier(
-                                       VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT,
-                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_GENERAL,
-                                       *m_srcImage, m_resource.getImage().subresourceRange);
-
-                               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, m_pipelineStage, (VkDependencyFlags)0,
-                                       0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
+                               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                         // VkPipelineStageFlags2KHR                     srcStageMask
+                                       VK_ACCESS_TRANSFER_WRITE_BIT,                           // VkAccessFlags2KHR                            srcAccessMask
+                                       m_pipelineStage,                                                        // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_SHADER_READ_BIT,                                      // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,           // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        newLayout
+                                       *m_srcImage,                                                            // VkImage                                                      image
+                                       m_resource.getImage().subresourceRange          // VkImageSubresourceRange                      subresourceRange
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                        }
                }
 
@@ -1817,13 +1925,18 @@ public:
                {
                        // Layout for transfer
                        {
-                               const VkImageMemoryBarrier barrier = makeImageMemoryBarrier(
-                                       VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
-                                       VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                                       *m_dstImage, m_resource.getImage().subresourceRange);
-
-                               vk.cmdPipelineBarrier(cmdBuffer, m_pipelineStage, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0,
-                                       0u, DE_NULL, 0u, DE_NULL, 1u, &barrier);
+                               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                                       m_pipelineStage,                                                        // VkPipelineStageFlags2KHR                     srcStageMask
+                                       VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags2KHR                            srcAccessMask
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                         // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_TRANSFER_READ_BIT,                            // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_GENERAL,                                        // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,           // VkImageLayout                                        newLayout
+                                       *m_dstImage,                                                            // VkImage                                                      image
+                                       m_resource.getImage().subresourceRange          // VkImageSubresourceRange                      subresourceRange
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                        }
 
                        // Dst image -> Host buffer
@@ -1831,8 +1944,17 @@ public:
 
                        // Insert a barrier so data written by the shader is available to the host
                        {
-                               const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_hostBufferSizeBytes);
-                               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                               const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TRANSFER_BIT,                         // VkPipelineStageFlags2KHR                     srcStageMask
+                                       VK_ACCESS_TRANSFER_WRITE_BIT,                           // VkAccessFlags2KHR                            srcAccessMask
+                                       VK_PIPELINE_STAGE_HOST_BIT,                                     // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags2KHR                            dstAccessMask
+                                       **m_hostBuffer,                                                         // VkBuffer                                                     buffer
+                                       0u,                                                                                     // VkDeviceSize                                         offset
+                                       m_hostBufferSizeBytes                                           // VkDeviceSize                                         size
+                               );
+                               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                        }
                }
        }
@@ -2479,24 +2601,48 @@ public:
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
                {
-                       const DeviceInterface&          vk                      = m_context.getDeviceInterface();
-                       const VkImageMemoryBarrier      barriers[]      = {
-                                makeImageMemoryBarrier(
-                                       (VkAccessFlags)0, VK_ACCESS_SHADER_WRITE_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
-                                       m_outResource.getImage().handle, m_outResource.getImage().subresourceRange),
-                                makeImageMemoryBarrier(
-                                       (VkAccessFlags) 0, VK_ACCESS_SHADER_READ_BIT,
-                                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL,
-                                       m_inResource.getImage().handle, m_inResource.getImage().subresourceRange),
-                       };
+                       const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+                       SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, m_pipelineStage, (VkDependencyFlags)0,
-                                                                 0u, DE_NULL, 0u, DE_NULL, DE_LENGTH_OF_ARRAY(barriers), barriers);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarriers2[]
+                       {
+                               makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                                       m_pipelineStage,                                                                // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_SHADER_WRITE_BIT,                                             // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_GENERAL,                                                // VkImageLayout                                        newLayout
+                                       m_outResource.getImage().handle,                                // VkImage                                                      image
+                                       m_outResource.getImage().subresourceRange               // VkImageSubresourceRange                      subresourceRange
+                               ),
+                               makeImageMemoryBarrier2(
+                                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                                       m_pipelineStage,                                                                // VkPipelineStageFlags2KHR                     dstStageMask
+                                       VK_ACCESS_SHADER_READ_BIT,                                              // VkAccessFlags2KHR                            dstAccessMask
+                                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                                       VK_IMAGE_LAYOUT_GENERAL,                                                // VkImageLayout                                        newLayout
+                                       m_inResource.getImage().handle,                                 // VkImage                                                      image
+                                       m_inResource.getImage().subresourceRange                // VkImageSubresourceRange                      subresourceRange
+                               )
+                       };
+                       VkDependencyInfoKHR dependencyInfo
+                       {
+                               VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,                          // VkStructureType                                      sType
+                               DE_NULL,                                                                                        // const void*                                          pNext
+                               VK_DEPENDENCY_BY_REGION_BIT,                                            // VkDependencyFlags                            dependencyFlags
+                               0u,                                                                                                     // deUint32                                                     memoryBarrierCount
+                               DE_NULL,                                                                                        // const VkMemoryBarrier2KHR*           pMemoryBarriers
+                               0u,                                                                                                     // deUint32                                                     bufferMemoryBarrierCount
+                               DE_NULL,                                                                                        // const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers
+                               2,                                                                                                      // deUint32                                                     imageMemoryBarrierCount
+                               imageMemoryBarriers2                                                            // const VkImageMemoryBarrier2KHR*      pImageMemoryBarriers
+                       };
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                // Execute shaders
-
                m_pipeline->recordCommands(m_context, cmdBuffer, *m_descriptorSet);
        }
 
@@ -2659,14 +2805,22 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
-
-               const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                       m_resource.getImage().handle, m_resource.getImage().subresourceRange);
-               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
+
+               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                                      // VkPipelineStageFlags2KHR                     srcStageMask
+                       (VkAccessFlags)0,                                                                       // VkAccessFlags2KHR                            srcAccessMask
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                         // VkPipelineStageFlags2KHR                     dstStageMask
+                       VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlags2KHR                            dstAccessMask
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                                      // VkImageLayout                                        oldLayout
+                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                           // VkImageLayout                                        newLayout
+                       m_resource.getImage().handle,                                           // VkImage                                                      image
+                       m_resource.getImage().subresourceRange                          // VkImageSubresourceRange                      subresourceRange
+               );
+               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                vk.cmdCopyBufferToImage(cmdBuffer, **m_hostBuffer, m_resource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
        }
@@ -2735,31 +2889,55 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Resource -> Image
                {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                                      // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                                       // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                         // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                                      // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                           // VkImageLayout                                        newLayout
+                               **m_image,                                                                                      // VkImage                                                      image
+                               m_subresourceRange                                                                      // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                        vk.cmdCopyBufferToImage(cmdBuffer, m_resource.getBuffer().handle, **m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
                }
                // Image -> Host buffer
                {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
-                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageLayoutBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                         // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                         // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_READ_BIT,                                            // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                           // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                           // VkImageLayout                                        newLayout
+                               **m_image,                                                                                      // VkImage                                                      image
+                               m_subresourceRange                                                                      // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR layoutDependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageLayoutBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &layoutDependencyInfo);
 
                        vk.cmdCopyImageToBuffer(cmdBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **m_hostBuffer, 1u, &copyRegion);
 
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                         // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                           // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                                     // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                                        // VkAccessFlags2KHR                            dstAccessMask
+                               **m_hostBuffer,                                                                         // VkBuffer                                                     buffer
+                               0u,                                                                                                     // VkDeviceSize                                         offset
+                               m_resource.getBuffer().size                                                     // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR bufferDependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &bufferDependencyInfo);
                }
        }
 
@@ -2872,20 +3050,31 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_outResource.getImage().extent, m_outResource.getImage().subresourceLayers);
-
-               const VkBufferMemoryBarrier bufferLayoutBarrier =
-                       makeBufferMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_READ_BIT,
-                               m_inResource.getBuffer().handle, 0, m_inResource.getBuffer().size);
-               const VkImageMemoryBarrier imageLayoutBarrier =
-                       makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                               m_outResource.getImage().handle, m_outResource.getImage().subresourceRange);
-               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL,
-                                                         1u, &bufferLayoutBarrier, 1u, &imageLayoutBarrier);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_outResource.getImage().extent, m_outResource.getImage().subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
+
+               const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                       VK_ACCESS_TRANSFER_READ_BIT,                                    // VkAccessFlags2KHR                            dstAccessMask
+                       m_inResource.getBuffer().handle,                                // VkBuffer                                                     buffer
+                       0u,                                                                                             // VkDeviceSize                                         offset
+                       m_inResource.getBuffer().size                                   // VkDeviceSize                                         size
+               );
+               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                       VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                       m_outResource.getImage().handle,                                // VkImage                                                      image
+                       m_outResource.getImage().subresourceRange               // VkImageSubresourceRange                      subresourceRange
+               );
+               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2, &imageMemoryBarrier2);
+               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                vk.cmdCopyBufferToImage(cmdBuffer, m_inResource.getBuffer().handle, m_outResource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
        }
@@ -3016,26 +3205,41 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_imageExtent, m_subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Host buffer -> Image
                {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               **m_image,                                                                              // VkImage                                                      image
+                               m_subresourceRange                                                              // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                        vk.cmdCopyBufferToImage(cmdBuffer, **m_hostBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1u, &copyRegion);
                }
                // Image -> Resource
                {
-                       const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                               VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT,
-                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                               **m_image, m_subresourceRange);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_READ_BIT,                                    // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               **m_image,                                                                              // VkImage                                                      image
+                               m_subresourceRange                                                              // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                        vk.cmdCopyImageToBuffer(cmdBuffer, **m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_resource.getBuffer().handle, 1u, &copyRegion);
                }
@@ -3101,15 +3305,25 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_resource.getImage().extent, m_resource.getImage().subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                vk.cmdCopyImageToBuffer(cmdBuffer, m_resource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, **m_hostBuffer, 1u, &copyRegion);
 
                // Insert a barrier so data written by the transfer is available to the host
                {
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, VK_WHOLE_SIZE);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                             // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                                // VkAccessFlags2KHR                            dstAccessMask
+                               **m_hostBuffer,                                                                 // VkBuffer                                                     buffer
+                               0u,                                                                                             // VkDeviceSize                                         offset
+                               VK_WHOLE_SIZE                                                                   // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
        }
 
@@ -3162,20 +3376,32 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                      = m_context.getDeviceInterface();
-               const VkBufferImageCopy copyRegion      = makeBufferImageCopy(m_inResource.getImage().extent, m_subresourceLayers);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkBufferImageCopy         copyRegion                              = makeBufferImageCopy(m_inResource.getImage().extent, m_subresourceLayers);
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                {
-                       const VkImageMemoryBarrier imageLayoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_READ_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
-                               m_inResource.getImage().handle, m_subresourceRange);
-                       const VkBufferMemoryBarrier bufferLayoutBarrier = makeBufferMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                               m_outResource.getBuffer().handle, 0, m_outResource.getBuffer().size);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL,
-                                                                 1u, &bufferLayoutBarrier, 1u, &imageLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_READ_BIT,                                    // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                               m_inResource.getImage().handle,                                 // VkImage                                                      image
+                               m_inResource.getImage().subresourceRange                // VkImageSubresourceRange                      subresourceRange
+                       );
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                               m_outResource.getBuffer().handle,                               // VkBuffer                                                     buffer
+                               0u,                                                                                             // VkDeviceSize                                         offset
+                               m_outResource.getBuffer().size                                  // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                vk.cmdCopyImageToBuffer(cmdBuffer, m_inResource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, m_outResource.getBuffer().handle, 1u, &copyRegion);
@@ -3301,14 +3527,21 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk      = m_context.getDeviceInterface();
-
-               const VkImageMemoryBarrier layoutBarrier = makeImageMemoryBarrier(
-                       (VkAccessFlags)0, VK_ACCESS_TRANSFER_WRITE_BIT,
-                       VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
-                       m_resource.getImage().handle, m_resource.getImage().subresourceRange);
-
-               vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 0u, DE_NULL, 1u, &layoutBarrier);
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
+
+               const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                       VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                       (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                       VK_PIPELINE_STAGE_TRANSFER_BIT,                                 // VkPipelineStageFlags2KHR                     dstStageMask
+                       VK_ACCESS_TRANSFER_WRITE_BIT,                                   // VkAccessFlags2KHR                            dstAccessMask
+                       VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                       VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,                   // VkImageLayout                                        newLayout
+                       m_resource.getImage().handle,                                   // VkImage                                                      image
+                       m_resource.getImage().subresourceRange                  // VkImageSubresourceRange                      subresourceRange
+               );
+               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
 
                if (m_mode == CLEAR_MODE_COLOR)
                        vk.cmdClearColorImage(cmdBuffer, m_resource.getImage().handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &m_clearValue.color, 1u, &m_resource.getImage().subresourceRange);
@@ -3497,17 +3730,23 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk      = m_context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Change color attachment image layout
                {
-                       const VkImageMemoryBarrier colorAttachmentLayoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                               m_colorImage, m_colorSubresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,  // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                                        newLayout
+                               m_colorImage,                                                                   // VkImage                                                      image
+                               m_colorSubresourceRange                                                 // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                {
@@ -3931,17 +4170,23 @@ public:
 
        void recordCommands (OperationContext& context, const VkCommandBuffer cmdBuffer, const VkDescriptorSet descriptorSet)
        {
-               const DeviceInterface&  vk      = context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(context.getSynchronizationType(), vk, DE_FALSE);
 
                // Change color attachment image layout
                {
-                       const VkImageMemoryBarrier colorAttachmentLayoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                               **m_colorAttachmentImage, m_colorImageSubresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,  // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                                        newLayout
+                               **m_colorAttachmentImage,                                               // VkImage                                                      image
+                               m_colorImageSubresourceRange                                    // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                {
@@ -4079,13 +4324,23 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk      = m_context.getDeviceInterface();
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                m_pipeline->recordCommands(m_context, cmdBuffer, *m_descriptorSet);
 
                // Insert a barrier so data written by the shader is available to the host
-               const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_hostBuffer, 0u, m_hostBufferSizeBytes);
-               vk.cmdPipelineBarrier(cmdBuffer, m_pipelineStage, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+               const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                       m_pipelineStage,                                                        // VkPipelineStageFlags2KHR                     srcStageMask
+                       VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags2KHR                            srcAccessMask
+                       VK_PIPELINE_STAGE_HOST_BIT,                                     // VkPipelineStageFlags2KHR                     dstStageMask
+                       VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags2KHR                            dstAccessMask
+                       **m_hostBuffer,                                                         // VkBuffer                                                     buffer
+                       0u,                                                                                     // VkDeviceSize                                         offset
+                       m_hostBufferSizeBytes                                           // VkDeviceSize                                         size
+               );
+               VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+               synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
        }
 
        SyncInfo getInSyncInfo (void) const
@@ -4436,18 +4691,24 @@ public:
 
        void recordCommands (const VkCommandBuffer cmdBuffer)
        {
-               const DeviceInterface&  vk                              = m_context.getDeviceInterface();
-               const VkDeviceSize              dataSizeBytes   = m_resource.getBuffer().size;
+               const DeviceInterface&          vk                                              = m_context.getDeviceInterface();
+               const VkDeviceSize                      dataSizeBytes                   = m_resource.getBuffer().size;
+               SynchronizationWrapperPtr       synchronizationWrapper  = getSynchronizationWrapper(m_context.getSynchronizationType(), vk, DE_FALSE);
 
                // Change color attachment image layout
                {
-                       const VkImageMemoryBarrier colorAttachmentLayoutBarrier = makeImageMemoryBarrier(
-                               (VkAccessFlags)0, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
-                               VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
-                               **m_colorAttachmentImage, m_colorImageSubresourceRange);
-
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, (VkDependencyFlags)0,
-                               0u, DE_NULL, 0u, DE_NULL, 1u, &colorAttachmentLayoutBarrier);
+                       const VkImageMemoryBarrier2KHR imageMemoryBarrier2 = makeImageMemoryBarrier2(
+                               VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,                              // VkPipelineStageFlags2KHR                     srcStageMask
+                               (VkAccessFlags)0,                                                               // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,  // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,                   // VkAccessFlags2KHR                            dstAccessMask
+                               VK_IMAGE_LAYOUT_UNDEFINED,                                              // VkImageLayout                                        oldLayout
+                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,               // VkImageLayout                                        newLayout
+                               **m_colorAttachmentImage,                                               // VkImage                                                      image
+                               m_colorImageSubresourceRange                                    // VkImageSubresourceRange                      subresourceRange
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, DE_NULL, &imageMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
 
                {
@@ -4470,8 +4731,17 @@ public:
 
                // Insert a barrier so data written by the shader is available to the host
                {
-                       const VkBufferMemoryBarrier     barrier = makeBufferMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT, VK_ACCESS_HOST_READ_BIT, **m_outputBuffer, 0u, m_resource.getBuffer().size);
-                       vk.cmdPipelineBarrier(cmdBuffer, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0u, DE_NULL, 1u, &barrier, 0u, DE_NULL);
+                       const VkBufferMemoryBarrier2KHR bufferMemoryBarrier2 = makeBufferMemoryBarrier2(
+                               VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,                    // VkPipelineStageFlags2KHR                     srcStageMask
+                               VK_ACCESS_SHADER_WRITE_BIT,                                             // VkAccessFlags2KHR                            srcAccessMask
+                               VK_PIPELINE_STAGE_HOST_BIT,                                             // VkPipelineStageFlags2KHR                     dstStageMask
+                               VK_ACCESS_HOST_READ_BIT,                                                // VkAccessFlags2KHR                            dstAccessMask
+                               **m_outputBuffer,                                                               // VkBuffer                                                     buffer
+                               0u,                                                                                             // VkDeviceSize                                         offset
+                               m_resource.getBuffer().size                                             // VkDeviceSize                                         size
+                       );
+                       VkDependencyInfoKHR dependencyInfo = makeCommonDependencyInfo(DE_NULL, &bufferMemoryBarrier2);
+                       synchronizationWrapper->cmdPipelineBarrier(cmdBuffer, &dependencyInfo);
                }
        }
 
@@ -4601,8 +4871,9 @@ private:
 
 } // anonymous ns
 
-OperationContext::OperationContext (Context& context, PipelineCacheData& pipelineCacheData)
+OperationContext::OperationContext (Context& context, SynchronizationType syncType, PipelineCacheData& pipelineCacheData)
        : m_context                             (context)
+       , m_syncType                    (syncType)
        , m_vki                                 (context.getInstanceInterface())
        , m_vk                                  (context.getDeviceInterface())
        , m_physicalDevice              (context.getPhysicalDevice())
@@ -4613,8 +4884,14 @@ OperationContext::OperationContext (Context& context, PipelineCacheData& pipelin
 {
 }
 
-OperationContext::OperationContext (Context& context, PipelineCacheData& pipelineCacheData, const DeviceInterface& vk, const VkDevice device, vk::Allocator& allocator)
+OperationContext::OperationContext (Context&                           context,
+                                                                       SynchronizationType             syncType,
+                                                                       const DeviceInterface&  vk,
+                                                                       const VkDevice                  device,
+                                                                       vk::Allocator&                  allocator,
+                                                                       PipelineCacheData&              pipelineCacheData)
        : m_context                             (context)
+       , m_syncType                    (syncType)
        , m_vki                                 (context.getInstanceInterface())
        , m_vk                                  (vk)
        , m_physicalDevice              (context.getPhysicalDevice())
@@ -4626,6 +4903,7 @@ OperationContext::OperationContext (Context& context, PipelineCacheData& pipelin
 }
 
 OperationContext::OperationContext (Context&                                           context,
+                                                                       SynchronizationType                             syncType,
                                                                        const vk::InstanceInterface&    vki,
                                                                        const vk::DeviceInterface&              vkd,
                                                                        vk::VkPhysicalDevice                    physicalDevice,
@@ -4634,6 +4912,7 @@ OperationContext::OperationContext (Context&                                              context,
                                                                        vk::BinaryCollection&                   programCollection,
                                                                        PipelineCacheData&                              pipelineCacheData)
        : m_context                             (context)
+       , m_syncType                    (syncType)
        , m_vki                                 (vki)
        , m_vk                                  (vkd)
        , m_physicalDevice              (physicalDevice)
index 66422b4..5548d8c 100644 (file)
@@ -129,24 +129,28 @@ enum OperationName
 class OperationContext
 {
 public:
-                                                                       OperationContext                (Context&                       context,
-                                                                                                                        PipelineCacheData&     pipelineCacheData);
+                                                                       OperationContext                (Context&                                               context,
+                                                                                                                        SynchronizationType                    syncType,
+                                                                                                                        PipelineCacheData&                             pipelineCacheData);
 
-                                                                       OperationContext                (Context&                                       context,
-                                                                                                                        PipelineCacheData&                     pipelineCacheData,
-                                                                                                                        const vk::DeviceInterface&     vk,
-                                                                                                                        const vk::VkDevice                     device,
-                                                                                                                        vk::Allocator&                         allocator);
+                                                                       OperationContext                (Context&                                               context,
+                                                                                                                        SynchronizationType                    syncType,
+                                                                                                                        const vk::DeviceInterface&             vkd,
+                                                                                                                        const vk::VkDevice                             device,
+                                                                                                                        vk::Allocator&                                 allocator,
+                                                                                                                        PipelineCacheData&                             pipelineCacheData);
 
-                                                                       OperationContext                (Context&                                                       context,
-                                                                                                                        const vk::InstanceInterface&           vki,
-                                                                                                                        const vk::DeviceInterface&                     vkd,
-                                                                                                                        vk::VkPhysicalDevice                           physicalDevice,
-                                                                                                                        vk::VkDevice                                           device,
-                                                                                                                        vk::Allocator&                                         allocator,
-                                                                                                                        vk::BinaryCollection&                          programCollection,
-                                                                                                                        PipelineCacheData&                                     pipelineCacheData);
+                                                                       OperationContext                (Context&                                               context,
+                                                                                                                        SynchronizationType                    syncType,
+                                                                                                                        const vk::InstanceInterface&   vki,
+                                                                                                                        const vk::DeviceInterface&             vkd,
+                                                                                                                        vk::VkPhysicalDevice                   physicalDevice,
+                                                                                                                        vk::VkDevice                                   device,
+                                                                                                                        vk::Allocator&                                 allocator,
+                                                                                                                        vk::BinaryCollection&                  programCollection,
+                                                                                                                        PipelineCacheData&                             pipelineCacheData);
 
+       SynchronizationType                             getSynchronizationType  (void) const { return m_syncType; }
        const vk::InstanceInterface&    getInstanceInterface    (void) const { return m_vki; }
        const vk::DeviceInterface&              getDeviceInterface              (void) const { return m_vk; }
        vk::VkPhysicalDevice                    getPhysicalDevice               (void) const { return m_physicalDevice; }
@@ -162,6 +166,7 @@ public:
 
 private:
        const vkt::Context&                             m_context;
+       const SynchronizationType               m_syncType;
        const vk::InstanceInterface&    m_vki;
        const vk::DeviceInterface&              m_vk;
        const vk::VkPhysicalDevice              m_physicalDevice;
index 1883a34..823fc88 100644 (file)
@@ -378,7 +378,7 @@ public:
                : TestInstance          (context)
                , m_type                        (type)
                , m_queues                      (MultiQueues::getInstance(context, type, timelineSemaphore))
-               , m_opContext           (new OperationContext(context, pipelineCacheData, m_queues->getDeviceInterface(), m_queues->getDevice(), m_queues->getAllocator()))
+               , m_opContext           (new OperationContext(context, type, m_queues->getDeviceInterface(), m_queues->getDevice(), m_queues->getAllocator(), pipelineCacheData))
                , m_resourceDesc        (resourceDesc)
                , m_writeOp                     (writeOp)
                , m_readOp                      (readOp)
index f228b31..78ba6c4 100644 (file)
@@ -57,7 +57,7 @@ public:
        BaseTestInstance (Context& context, SynchronizationType type, const ResourceDescription& resourceDesc, const OperationSupport& writeOp, const OperationSupport& readOp, PipelineCacheData& pipelineCacheData)
                : TestInstance  (context)
                , m_type                (type)
-               , m_opContext   (context, pipelineCacheData)
+               , m_opContext   (context, type, pipelineCacheData)
                , m_resource    (new Resource(m_opContext, resourceDesc, writeOp.getOutResourceUsageFlags() | readOp.getInResourceUsageFlags()))
                , m_writeOp             (writeOp.build(m_opContext, *m_resource))
                , m_readOp              (readOp.build(m_opContext, *m_resource))
@@ -369,7 +369,7 @@ public:
        TimelineSemaphoreTestInstance (Context& context, SynchronizationType type, const ResourceDescription& resourceDesc, const de::SharedPtr<OperationSupport>& writeOp, const de::SharedPtr<OperationSupport>& readOp, PipelineCacheData& pipelineCacheData)
                : TestInstance  (context)
                , m_type                (type)
-               , m_opContext   (context, pipelineCacheData)
+               , m_opContext   (context, type, pipelineCacheData)
        {
                if (!context.getTimelineSemaphoreFeatures().timelineSemaphore)
                        TCU_THROW(NotSupportedError, "Timeline semaphore not supported");
index f809447..a15c822 100644 (file)
@@ -606,8 +606,8 @@ public:
                                                                                                                                                                                                                                                                                                                                 m_context.getPhysicalDevice())));
                UniquePtr<SimpleAllocator>                                                      allocatorB                                      (new SimpleAllocator(vkB, *deviceB, vk::getPhysicalDeviceMemoryProperties(m_context.getInstanceInterface(),
                                                                                                                                                                                                                                                                                                                                  m_context.getPhysicalDevice())));
-               UniquePtr<OperationContext>                                                     operationContextA                       (new OperationContext(m_context, m_pipelineCacheData, vkA, deviceA, *allocatorA));
-               UniquePtr<OperationContext>                                                     operationContextB                       (new OperationContext(m_context, m_pipelineCacheData, vkB, *deviceB, *allocatorB));
+               UniquePtr<OperationContext>                                                     operationContextA                       (new OperationContext(m_context, m_type, vkA, deviceA, *allocatorA, m_pipelineCacheData));
+               UniquePtr<OperationContext>                                                     operationContextB                       (new OperationContext(m_context, m_type, vkB, *deviceB, *allocatorB, m_pipelineCacheData));
                const deUint32                                                                          universalQueueFamilyIndex       = m_context.getUniversalQueueFamilyIndex();
                const VkQueue                                                                           queueA                                          = m_context.getUniversalQueue();
                const VkQueue                                                                           queueB                                          = getDeviceQueue(vkB, *deviceB, m_context.getUniversalQueueFamilyIndex(), 0);
@@ -1283,7 +1283,7 @@ public:
                                                                                                         *m_device,
                                                                                                         getPhysicalDeviceMemoryProperties(context.getInstanceInterface(),
                                                                                                                                                                           context.getPhysicalDevice())))
-               , m_operationContext    (new OperationContext(context, pipelineCacheData, m_deviceInterface, *m_device, *m_allocator))
+               , m_operationContext    (new OperationContext(context, type, m_deviceInterface, *m_device, *m_allocator, pipelineCacheData))
                , m_queueA                              (DE_NULL)
                , m_queueB                              (DE_NULL)
                , m_rng                                 (1234)
index 2408794..d5f9d75 100644 (file)
@@ -863,7 +863,7 @@ public:
                                                        PipelineCacheData&                                      pipelineCacheData)
                : TestInstance          (context)
                , m_type                        (type)
-               , m_opContext           (context, pipelineCacheData)
+               , m_opContext           (context, type, pipelineCacheData)
                , m_resourceDesc        (resourceDesc)
        {
                de::Random      rng             (1234);
@@ -1364,7 +1364,7 @@ public:
                , m_allocator           (new SimpleAllocator(*m_deviceDriver, *m_device,
                                                                                                 getPhysicalDeviceMemoryProperties(context.getInstanceInterface(),
                                                                                                                                                                   context.getPhysicalDevice())))
-               , m_opContext           (context, pipelineCacheData, *m_deviceDriver, *m_device, *m_allocator)
+               , m_opContext           (context, type, *m_deviceDriver, *m_device, *m_allocator, pipelineCacheData)
        {
                const DeviceInterface&                                          vk                                                      = *m_deviceDriver;
                const VkDevice                                                          device                                          = *m_device;
@@ -1781,7 +1781,7 @@ public:
                , m_allocator           (new SimpleAllocator(*m_deviceDriver, *m_device,
                                                                                                 getPhysicalDeviceMemoryProperties(context.getInstanceInterface(),
                                                                                                                                                                   context.getPhysicalDevice())))
-               , m_opContext           (context, pipelineCacheData, *m_deviceDriver, *m_device, *m_allocator)
+               , m_opContext           (context, type, *m_deviceDriver, *m_device, *m_allocator, pipelineCacheData)
        {
                const DeviceInterface&                                                                  vk                              = *m_deviceDriver;
                const VkDevice                                                                                  device                  = *m_device;
index e4997dd..1ee8e00 100644 (file)
@@ -395,7 +395,7 @@ protected:
                std::size_t             signalSemaphoreValueIndexPlusOne;
        };
 
-       bool isStageFlagAllowed(VkPipelineStageFlags2KHR stage)
+       bool isStageFlagAllowed(VkPipelineStageFlags2KHR stage) const
        {
                // synchronization2 suports more stages then legacy synchronization
                // and so SynchronizationWrapper can only be used for cases that
@@ -440,7 +440,7 @@ protected:
                return (allowedStages.find(static_cast<deUint32>(stage)) != allowedStages.end());
        }
 
-       bool isAccessFlagAllowed(VkAccessFlags2KHR access)
+       bool isAccessFlagAllowed(VkAccessFlags2KHR access) const
        {
                // synchronization2 suports more access flags then legacy synchronization
                // and so SynchronizationWrapper can only be used for cases that
@@ -563,7 +563,7 @@ public:
                }
        }
 
-       void cmdPipelineBarrier(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdPipelineBarrier(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                DE_ASSERT(pDependencyInfo);
 
@@ -673,7 +673,7 @@ public:
                );
        }
 
-       void cmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                DE_ASSERT(pDependencyInfo);
 
@@ -689,14 +689,14 @@ public:
                m_vk.cmdSetEvent(commandBuffer, event, static_cast<VkPipelineStageFlags>(srcStageMask));
        }
 
-       void cmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR flag) override
+       void cmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR flag) const override
        {
                DE_ASSERT(isStageFlagAllowed(flag));
                VkPipelineStageFlags legacyStageMask = static_cast<VkPipelineStageFlags>(flag);
                m_vk.cmdResetEvent(commandBuffer, event, legacyStageMask);
        }
 
-       void cmdWaitEvents(VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdWaitEvents(VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                DE_ASSERT(pDependencyInfo);
 
@@ -899,22 +899,22 @@ public:
                });
        }
 
-       void cmdPipelineBarrier(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdPipelineBarrier(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                m_vk.cmdPipelineBarrier2KHR(commandBuffer, pDependencyInfo);
        }
 
-       void cmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                m_vk.cmdSetEvent2KHR(commandBuffer, event, pDependencyInfo);
        }
 
-       void cmdWaitEvents(VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfo) override
+       void cmdWaitEvents(VkCommandBuffer commandBuffer, deUint32 eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfo) const override
        {
                m_vk.cmdWaitEvents2KHR(commandBuffer, eventCount, pEvents, pDependencyInfo);
        }
 
-       void cmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR flag) override
+       void cmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR flag) const override
        {
                m_vk.cmdResetEvent2KHR(commandBuffer, event, flag);
        }
index f167bd4..774c10b 100644 (file)
@@ -198,18 +198,18 @@ public:
                                                                                                 bool                                                                           usingSignalTimelineSemaphore = DE_FALSE) = 0;
 
        virtual void                    cmdPipelineBarrier      (vk::VkCommandBuffer                                            commandBuffer,
-                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) = 0;
+                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) const = 0;
 
        virtual void                    cmdSetEvent                     (vk::VkCommandBuffer                                            commandBuffer,
                                                                                                 vk::VkEvent                                                            event,
-                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) = 0;
+                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) const = 0;
        virtual void                    cmdResetEvent           (vk::VkCommandBuffer                                            commandBuffer,
                                                                                                 vk::VkEvent                                                            event,
-                                                                                                vk::VkPipelineStageFlags2KHR                           flag) = 0;
+                                                                                                vk::VkPipelineStageFlags2KHR                           flag) const = 0;
        virtual void                    cmdWaitEvents           (vk::VkCommandBuffer                                            commandBuffer,
                                                                                                 deUint32                                                                       eventCount,
                                                                                                 const vk::VkEvent*                                                     pEvents,
-                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) = 0;
+                                                                                                const vk::VkDependencyInfoKHR*                         pDependencyInfo) const = 0;
 
        virtual vk::VkResult    queueSubmit                     (vk::VkQueue                                                            queue,
                                                                                                 vk::VkFence                                                            fence) = 0;
index 2271d48..418016d 100644 (file)
@@ -1644,7 +1644,7 @@ tcu::TestStatus Win32KeyedMutexTestInstance::iterate (void)
                const vk::Unique<vk::VkCommandBuffer>   commandBufferWrite      (allocateCommandBuffer(m_vkd, *m_device, *commandPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
                const vk::Unique<vk::VkCommandBuffer>   commandBufferRead       (allocateCommandBuffer(m_vkd, *m_device, *commandPool, vk::VK_COMMAND_BUFFER_LEVEL_PRIMARY));
                vk::SimpleAllocator                                             allocator                       (m_vkd, *m_device, vk::getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice));
-               OperationContext                                                operationContext        (m_context, m_vki, m_vkd, m_physicalDevice, *m_device, allocator, m_context.getBinaryCollection(), m_pipelineCacheData);
+               OperationContext                                                operationContext        (m_context, SynchronizationType::LEGACY, m_vki, m_vkd, m_physicalDevice, *m_device, allocator, m_context.getBinaryCollection(), m_pipelineCacheData);
 
                if (!checkQueueFlags(m_queueFamilies[m_queueNdx].queueFlags, vk::VK_QUEUE_GRAPHICS_BIT))
                        TCU_THROW(NotSupportedError, "Operation not supported by the source queue");