Revert "Revert "gfxstream: Add vkCmdPipelineBarrier2 implementat..."
Revert submission 3125001
BUG=346348303
TEST=atbd
Change-Id: Iefe1c2754ee522380647fa226e84fec653154da3
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) {