aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Kiryanov <rkir@google.com>2019-04-26 14:18:14 -0700
committerRoman Kiryanov <rkir@google.com>2019-05-01 10:25:59 -0700
commit187c4584ebb772d5d0ef2ece11779e583a5656ba (patch)
treef2c2d15f2f62036b1f9117479a7eb139aaaf8ec8
parent77379152398af03ccf7bb09ffcacb940f58047a4 (diff)
downloadgoldfish-opengl-187c4584ebb772d5d0ef2ece11779e583a5656ba.tar.gz
Add a wrapper for vkCreateImageView
We need to update arguments for vkCreateImageView before sending them to the host. Bug: 131176903 Test: make Change-Id: I44e0bc845435cbfebe60cad1e5f8594cb0e9f673 Merged-In: Ia83af721caabedad3a194d3776882ac75690bb02 Signed-off-by: Roman Kiryanov <rkir@google.com>
-rw-r--r--system/vulkan/func_table.cpp3
-rw-r--r--system/vulkan_enc/ResourceTracker.cpp36
-rw-r--r--system/vulkan_enc/ResourceTracker.h7
-rw-r--r--system/vulkan_enc/vk_struct_id.h1
4 files changed, 46 insertions, 1 deletions
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index 44e385de..f5b380e2 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -666,7 +666,8 @@ static VkResult entry_vkCreateImageView(
AEMU_SCOPED_TRACE("vkCreateImageView");
auto vkEnc = HostConnection::get()->vkEncoder();
VkResult vkCreateImageView_VkResult_return = (VkResult)0;
- vkCreateImageView_VkResult_return = vkEnc->vkCreateImageView(device, pCreateInfo, pAllocator, pView);
+ auto resources = ResourceTracker::get();
+ vkCreateImageView_VkResult_return = resources->on_vkCreateImageView(vkEnc, VK_SUCCESS, device, pCreateInfo, pAllocator, pView);
return vkCreateImageView_VkResult_return;
}
static void entry_vkDestroyImageView(
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 623859a5..4e86c20a 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -3122,6 +3122,32 @@ public:
return VK_SUCCESS;
}
+ VkResult on_vkCreateImageView(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const VkImageViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImageView* pView) {
+
+ VkEncoder* enc = (VkEncoder*)context;
+ (void)input_result;
+
+ VkImageViewCreateInfo localCreateInfo = vk_make_orphan_copy(*pCreateInfo);
+
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+ const VkExternalFormatANDROID* extFormatAndroidPtr =
+ vk_find_struct<VkExternalFormatANDROID>(pCreateInfo);
+ if (extFormatAndroidPtr) {
+ if (extFormatAndroidPtr->externalFormat) {
+ localCreateInfo.format =
+ vk_format_from_android(extFormatAndroidPtr->externalFormat);
+ }
+ }
+#endif
+
+ return enc->vkCreateImageView(device, &localCreateInfo, pAllocator, pView);
+ }
+
uint32_t getApiVersionFromInstance(VkInstance instance) const {
AutoLock lock(mLock);
uint32_t api = kMinApiVersion;
@@ -3763,6 +3789,16 @@ VkResult ResourceTracker::on_vkResetCommandBuffer(
context, input_result, commandBuffer, flags);
}
+VkResult ResourceTracker::on_vkCreateImageView(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const VkImageViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImageView* pView) {
+ return mImpl->on_vkCreateImageView(
+ context, input_result, device, pCreateInfo, pAllocator, pView);
+}
+
void ResourceTracker::deviceMemoryTransform_tohost(
VkDeviceMemory* memory, uint32_t memoryCount,
VkDeviceSize* offset, uint32_t offsetCount,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 1f073c8f..6429d6f4 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -334,6 +334,13 @@ public:
VkCommandBuffer commandBuffer,
VkCommandBufferResetFlags flags);
+ VkResult on_vkCreateImageView(
+ void* context, VkResult input_result,
+ VkDevice device,
+ const VkImageViewCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkImageView* pView);
+
bool isMemoryTypeHostVisible(VkDevice device, uint32_t typeIndex) const;
uint8_t* getMappedPointer(VkDeviceMemory memory);
VkDeviceSize getMappedSize(VkDeviceMemory memory);
diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h
index c2c9ad90..893389c7 100644
--- a/system/vulkan_enc/vk_struct_id.h
+++ b/system/vulkan_enc/vk_struct_id.h
@@ -42,6 +42,7 @@ REGISTER_VK_STRUCT_ID(VkSemaphoreCreateInfo, VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_
REGISTER_VK_STRUCT_ID(VkExportSemaphoreCreateInfoKHR, VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR);
REGISTER_VK_STRUCT_ID(VkSamplerYcbcrConversionCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO);
REGISTER_VK_STRUCT_ID(VkImportColorBufferGOOGLE, VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE);
+REGISTER_VK_STRUCT_ID(VkImageViewCreateInfo, VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO);
#ifdef VK_USE_PLATFORM_ANDROID_KHR
// These two should be under Android