Revert "Revert "gfxstream: Add vkCmdPipelineBarrier2 implementat..."

Revert submission 3125001

BUG=346348303
TEST=atbd

Change-Id: Iefe1c2754ee522380647fa226e84fec653154da3
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cereal/api_log_decoder.py b/codegen/vulkan/vulkan-docs-next/scripts/cereal/api_log_decoder.py
index 97930f5..cd66055 100644
--- a/codegen/vulkan/vulkan-docs-next/scripts/cereal/api_log_decoder.py
+++ b/codegen/vulkan/vulkan-docs-next/scripts/cereal/api_log_decoder.py
@@ -34,6 +34,7 @@
         "vkCmdDrawIndexed",
         "vkCmdEndRenderPass",
         "vkCmdPipelineBarrier",
+        "vkCmdPipelineBarrier2",
         "vkCmdSetScissor",
         "vkCmdSetViewport",
         "vkCollectDescriptorPoolIdsGOOGLE",
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cereal/decoder.py b/codegen/vulkan/vulkan-docs-next/scripts/cereal/decoder.py
index 4f10ef2..ee69028 100644
--- a/codegen/vulkan/vulkan-docs-next/scripts/cereal/decoder.py
+++ b/codegen/vulkan/vulkan-docs-next/scripts/cereal/decoder.py
@@ -704,6 +704,7 @@
     "vkDestroyCommandPool" : emit_global_state_wrapped_decoding,
     "vkResetCommandPool" : emit_global_state_wrapped_decoding,
     "vkCmdPipelineBarrier" : emit_global_state_wrapped_decoding,
+    "vkCmdPipelineBarrier2" : emit_global_state_wrapped_decoding,
     "vkCmdBindPipeline" : emit_global_state_wrapped_decoding,
     "vkCmdBindDescriptorSets" : emit_global_state_wrapped_decoding,
 
diff --git a/codegen/vulkan/vulkan-docs-next/scripts/cereal/subdecode.py b/codegen/vulkan/vulkan-docs-next/scripts/cereal/subdecode.py
index 3a22dd1..c5b44a9 100644
--- a/codegen/vulkan/vulkan-docs-next/scripts/cereal/subdecode.py
+++ b/codegen/vulkan/vulkan-docs-next/scripts/cereal/subdecode.py
@@ -303,6 +303,7 @@
     "vkEndCommandBuffer": emit_global_state_wrapped_decoding_with_context,
     "vkResetCommandBuffer": emit_global_state_wrapped_decoding,
     "vkCmdPipelineBarrier": emit_global_state_wrapped_decoding,
+    "vkCmdPipelineBarrier2": emit_global_state_wrapped_decoding,
     "vkCmdBindPipeline": emit_global_state_wrapped_decoding,
     "vkCmdBindDescriptorSets": emit_global_state_wrapped_decoding,
     "vkCmdCopyQueryPoolResults": emit_global_state_wrapped_decoding,
diff --git a/host/vulkan/VkDecoder.cpp b/host/vulkan/VkDecoder.cpp
index 25ce474..f290c5f 100644
--- a/host/vulkan/VkDecoder.cpp
+++ b/host/vulkan/VkDecoder.cpp
@@ -11816,15 +11816,12 @@
                 android::base::beginTrace("vkCmdPipelineBarrier2 decode");
                 VkCommandBuffer commandBuffer;
                 const VkDependencyInfo* pDependencyInfo;
-                // Begin non wrapped dispatchable handle unboxing for commandBuffer;
+                // Begin global wrapped dispatchable handle unboxing for commandBuffer;
                 uint64_t cgen_var_0;
                 memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
                 *readStreamPtrPtr += 1 * 8;
                 *(VkCommandBuffer*)&commandBuffer =
                     (VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
-                auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
-                auto vk = dispatch_VkCommandBuffer(commandBuffer);
-                // End manual dispatchable handle unboxing for commandBuffer;
                 vkReadStream->alloc((void**)&pDependencyInfo, sizeof(const VkDependencyInfo));
                 reservedunmarshal_VkDependencyInfo(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
                                                    (VkDependencyInfo*)(pDependencyInfo),
@@ -11838,7 +11835,7 @@
                             ioStream, (unsigned long long)commandBuffer,
                             (unsigned long long)pDependencyInfo);
                 }
-                vk->vkCmdPipelineBarrier2(unboxed_commandBuffer, pDependencyInfo);
+                m_state->on_vkCmdPipelineBarrier2(&m_pool, commandBuffer, pDependencyInfo);
                 vkStream->unsetHandleMapping();
                 vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
                                          (uintptr_t)snapshotTraceBegin);
diff --git a/host/vulkan/VkDecoderGlobalState.cpp b/host/vulkan/VkDecoderGlobalState.cpp
index c3ab84d..856d62d 100644
--- a/host/vulkan/VkDecoderGlobalState.cpp
+++ b/host/vulkan/VkDecoderGlobalState.cpp
@@ -4086,6 +4086,14 @@
         }
     }
 
+    void on_vkCmdPipelineBarrier2(android::base::BumpPool* pool,
+                                  VkCommandBuffer boxed_commandBuffer,
+                                  const VkDependencyInfo* pDependencyInfo) {
+        auto commandBuffer = unbox_VkCommandBuffer(boxed_commandBuffer);
+        auto vk = dispatch_VkCommandBuffer(boxed_commandBuffer);
+        vk->vkCmdPipelineBarrier2(commandBuffer, pDependencyInfo);
+    }
+
     bool mapHostVisibleMemoryToGuestPhysicalAddressLocked(VulkanDispatch* vk, VkDevice device,
                                                           VkDeviceMemory memory,
                                                           uint64_t physAddr) {
@@ -8358,6 +8366,12 @@
                                    pImageMemoryBarriers);
 }
 
+void VkDecoderGlobalState::on_vkCmdPipelineBarrier2(android::base::BumpPool* pool,
+                                                    VkCommandBuffer commandBuffer,
+                                                    const VkDependencyInfo* pDependencyInfo) {
+    mImpl->on_vkCmdPipelineBarrier2(pool, commandBuffer, pDependencyInfo);
+}
+
 VkResult VkDecoderGlobalState::on_vkAllocateMemory(android::base::BumpPool* pool, VkDevice device,
                                                    const VkMemoryAllocateInfo* pAllocateInfo,
                                                    const VkAllocationCallbacks* pAllocator,
diff --git a/host/vulkan/VkDecoderGlobalState.h b/host/vulkan/VkDecoderGlobalState.h
index 0655a19..bbdcb4d 100644
--- a/host/vulkan/VkDecoderGlobalState.h
+++ b/host/vulkan/VkDecoderGlobalState.h
@@ -387,6 +387,9 @@
                                  uint32_t imageMemoryBarrierCount,
                                  const VkImageMemoryBarrier* pImageMemoryBarriers);
 
+    void on_vkCmdPipelineBarrier2(android::base::BumpPool* pool, VkCommandBuffer commandBuffer,
+                                  const VkDependencyInfo* pDependencyInfo);
+
     // Do we need to wrap vk(Create|Destroy)Instance to
     // update our maps of VkDevices? Spec suggests no:
     // https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkDestroyInstance.html
diff --git a/host/vulkan/VkSubDecoder.cpp b/host/vulkan/VkSubDecoder.cpp
index b5035ee..d3c8ce2 100644
--- a/host/vulkan/VkSubDecoder.cpp
+++ b/host/vulkan/VkSubDecoder.cpp
@@ -1629,7 +1629,8 @@
                     transform_tohost_VkDependencyInfo(globalstate,
                                                       (VkDependencyInfo*)(pDependencyInfo));
                 }
-                vk->vkCmdPipelineBarrier2((VkCommandBuffer)dispatchHandle, pDependencyInfo);
+                this->on_vkCmdPipelineBarrier2(pool, (VkCommandBuffer)(boxed_dispatchHandle),
+                                               pDependencyInfo);
                 android::base::endTrace();
                 break;
             }
diff --git a/host/vulkan/testing/VkDecoderTestDispatch.h b/host/vulkan/testing/VkDecoderTestDispatch.h
index b965372..d8857d1 100644
--- a/host/vulkan/testing/VkDecoderTestDispatch.h
+++ b/host/vulkan/testing/VkDecoderTestDispatch.h
@@ -101,6 +101,11 @@
                                       imageMemoryBarrierCount, pImageMemoryBarriers);
     }
 
+    void vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,
+                               const VkDependencyInfo* pDependencyInfo) {
+        mDgs->on_vkCmdPipelineBarrier2(mBp, commandBuffer, pDependencyInfo);
+    }
+
     void vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage,
                                 VkImageLayout srcImageLayout, VkBuffer dstBuffer,
                                 uint32_t regionCount, const VkBufferImageCopy* pRegions) {
diff --git a/scripts/print_gfx_logs/vulkan_printer.py b/scripts/print_gfx_logs/vulkan_printer.py
index fcc6f86..378a94f 100644
--- a/scripts/print_gfx_logs/vulkan_printer.py
+++ b/scripts/print_gfx_logs/vulkan_printer.py
@@ -136,6 +136,10 @@
     printer.write_struct("pImageMemoryBarriers", struct_VkImageMemoryBarrier, False, imageMemoryBarrierCount, indent)
     return
 
+def OP_vkCmdPipelineBarrier2(printer, indent: int):
+    printer.write_struct("pDependencyInfo", struct_VkDependencyInfo, False, None, indent)
+    return
+
 def OP_vkCmdSetScissor(printer, indent: int):
     firstScissor = printer.write_int("firstScissor", 4, indent, signed=False, big_endian=False)
     scissorCount = printer.write_int("scissorCount", 4, indent, signed=False, big_endian=False)
@@ -559,6 +563,18 @@
     offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
     size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
 
+def struct_VkBufferMemoryBarrier2(printer, indent: int):
+    printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2", indent)
+    srcStageMask = printer.write_int("srcStageMask", 4, indent, signed=False, big_endian=False)
+    srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+    dstStageMask = printer.write_int("dstStageMask", 4, indent, signed=False, big_endian=False)
+    dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+    srcQueueFamilyIndex = printer.write_int("srcQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+    dstQueueFamilyIndex = printer.write_int("dstQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+    buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+    offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
+    size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
+
 def struct_VkClearAttachment(printer, indent: int):
     aspectMask = printer.write_int("aspectMask", 4, indent, signed=False, big_endian=False)
     colorAttachment = printer.write_int("colorAttachment", 4, indent, signed=False, big_endian=False)
@@ -595,6 +611,16 @@
     printer.write_enum("b", VkComponentSwizzle, indent)
     printer.write_enum("a", VkComponentSwizzle, indent)
 
+def struct_VkDependencyInfo(printer, indent: int):
+    printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_DEPENDENCY_INFO", indent)
+    dependencyFlags = printer.write_int("dependencyFlags", 4, indent, signed=False, big_endian=False)
+    memoryBarrierCount = printer.write_int("memoryBarrierCount", 4, indent, signed=False, big_endian=False)
+    printer.write_struct("pMemoryBarriers", struct_VkMemoryBarrier2, False, memoryBarrierCount, indent)
+    bufferMemoryBarrierCount = printer.write_int("bufferMemoryBarrierCount", 4, indent, signed=False, big_endian=False)
+    printer.write_struct("pBufferMemoryBarriers", struct_VkBufferMemoryBarrier2, False, bufferMemoryBarrierCount, indent)
+    imageMemoryBarrierCount = printer.write_int("imageMemoryBarrierCount", 4, indent, signed=False, big_endian=False)
+    printer.write_struct("pImageMemoryBarriers", struct_VkImageMemoryBarrier2, False, imageMemoryBarrierCount, indent)
+
 def struct_VkDescriptorBufferInfo(printer, indent: int):
     buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
     offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
@@ -704,6 +730,19 @@
     image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
     printer.write_struct("subresourceRange", struct_VkImageSubresourceRange, False, None, indent)
 
+def struct_VkImageMemoryBarrier2(printer, indent: int):
+    printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2", indent)
+    srcStageMask = printer.write_int("srcStageMask", 4, indent, signed=False, big_endian=False)
+    srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+    dstStageMask = printer.write_int("dstStageMask", 4, indent, signed=False, big_endian=False)
+    dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+    printer.write_enum("oldLayout", VkImageLayout, indent)
+    printer.write_enum("newLayout", VkImageLayout, indent)
+    srcQueueFamilyIndex = printer.write_int("srcQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+    dstQueueFamilyIndex = printer.write_int("dstQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+    image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+    printer.write_struct("subresourceRange", struct_VkImageSubresourceRange, False, None, indent)
+
 def struct_VkImageSubresourceLayers(printer, indent: int):
     aspectMask = printer.write_int("aspectMask", 4, indent, signed=False, big_endian=False)
     mipLevel = printer.write_int("mipLevel", 4, indent, signed=False, big_endian=False)
@@ -736,6 +775,13 @@
     srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
     dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
 
+def struct_VkMemoryBarrier2(printer, indent: int):
+    printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_MEMORY_BARRIER_2", indent)
+    srcStageMask = printer.write_int("srcStageMask", 4, indent, signed=False, big_endian=False)
+    srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+    dstStageMask = printer.write_int("dstStageMask", 4, indent, signed=False, big_endian=False)
+    dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+
 def struct_VkMemoryRequirements(printer, indent: int):
     size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
     alignment = printer.write_int("alignment", 8, indent, signed=False, big_endian=False)