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)