[vulkan] Record create info for images/buffers
bug: 122080810
This CL records the basic create info
for each Vulkan image and buffer created on the guest.
This data will be needed if we perform "export"
allocation of external memory with a dedicated VkImage/Buffer.
In this case, we need to retrieve the
image dimensions/format or buffer size,
and calculate AHardwareBuffer_Desc parameters from that.
Change-Id: I0d24e34dbfdf043ec126a8ae4132358fbe29e771
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index cb7ab69..17bb4fc 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -1062,7 +1062,22 @@
const VkAllocationCallbacks *pAllocator,
VkImage *pImage) {
VkEncoder* enc = (VkEncoder*)context;
- return enc->vkCreateImage(device, pCreateInfo, pAllocator, pImage);
+
+ VkResult res = enc->vkCreateImage(device, pCreateInfo, pAllocator, pImage);
+
+ if (res != VK_SUCCESS) return res;
+
+ AutoLock lock(mLock);
+
+ auto it = info_VkImage.find(*pImage);
+ if (it == info_VkImage.end()) return VK_ERROR_INITIALIZATION_FAILED;
+
+ auto& info = it->second;
+
+ info.createInfo = *pCreateInfo;
+ info.createInfo.pNext = nullptr;
+
+ return res;
}
void on_vkDestroyImage(
@@ -1124,7 +1139,22 @@
const VkAllocationCallbacks *pAllocator,
VkBuffer *pBuffer) {
VkEncoder* enc = (VkEncoder*)context;
- return enc->vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+
+ VkResult res = enc->vkCreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
+
+ if (res != VK_SUCCESS) return res;
+
+ AutoLock lock(mLock);
+
+ auto it = info_VkBuffer.find(*pBuffer);
+ if (it == info_VkBuffer.end()) return VK_ERROR_INITIALIZATION_FAILED;
+
+ auto& info = it->second;
+
+ info.createInfo = *pCreateInfo;
+ info.createInfo.pNext = nullptr;
+
+ return res;
}
void on_vkDestroyBuffer(