diff options
author | Roman Kiryanov <rkir@google.com> | 2019-04-26 14:18:14 -0700 |
---|---|---|
committer | Roman Kiryanov <rkir@google.com> | 2019-05-01 10:25:59 -0700 |
commit | 187c4584ebb772d5d0ef2ece11779e583a5656ba (patch) | |
tree | f2c2d15f2f62036b1f9117479a7eb139aaaf8ec8 | |
parent | 77379152398af03ccf7bb09ffcacb940f58047a4 (diff) | |
download | goldfish-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.cpp | 3 | ||||
-rw-r--r-- | system/vulkan_enc/ResourceTracker.cpp | 36 | ||||
-rw-r--r-- | system/vulkan_enc/ResourceTracker.h | 7 | ||||
-rw-r--r-- | system/vulkan_enc/vk_struct_id.h | 1 |
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 |