diff options
author | Jason Macnak <natsu@google.com> | 2023-04-06 16:36:19 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-04-06 16:36:19 +0000 |
commit | be44201e770212ad75a78de92d249b0a686e3f49 (patch) | |
tree | a93c90965be9e73410bd1ad27a616ae7f284efc0 | |
parent | 0557963f6923304236ea9bf9dae5d470e005b789 (diff) | |
parent | 66e397bbba070734241df91ae7570bdfadc820ea (diff) | |
download | goldfish-opengl-be44201e770212ad75a78de92d249b0a686e3f49.tar.gz |
Merge "Ensure AHBs use the reserved emulated memory type index"
-rw-r--r-- | system/vulkan_enc/AndroidHardwareBuffer.cpp | 12 | ||||
-rw-r--r-- | system/vulkan_enc/AndroidHardwareBuffer.h | 5 | ||||
-rw-r--r-- | system/vulkan_enc/ResourceTracker.cpp | 25 |
3 files changed, 29 insertions, 13 deletions
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.cpp b/system/vulkan_enc/AndroidHardwareBuffer.cpp index f31c04d9..4a464210 100644 --- a/system/vulkan_enc/AndroidHardwareBuffer.cpp +++ b/system/vulkan_enc/AndroidHardwareBuffer.cpp @@ -62,10 +62,13 @@ getAndroidHardwareBufferUsageFromVkUsage(const VkImageCreateFlags vk_create, return ahw_usage; } +void updateMemoryTypeBitsForAndroidHardwareBuffers(uint32_t* memoryTypeBits) { + constexpr const uint32_t kReservedAndroidHardwareBufferMemoryTypeIndex = 0; + *memoryTypeBits = 1u << kReservedAndroidHardwareBufferMemoryTypeIndex; +} + VkResult getAndroidHardwareBufferPropertiesANDROID( Gralloc* grallocHelper, - const VkPhysicalDeviceMemoryProperties* memProps, - VkDevice, const AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) { @@ -232,8 +235,9 @@ VkResult getAndroidHardwareBufferPropertiesANDROID( if (!colorBufferHandle) { return VK_ERROR_INVALID_EXTERNAL_HANDLE; } - assert(memProps->memoryTypeCount < VK_MAX_MEMORY_TYPES); - pProperties->memoryTypeBits = (1u << memProps->memoryTypeCount) - 1; + + updateMemoryTypeBitsForAndroidHardwareBuffers(&pProperties->memoryTypeBits); + pProperties->allocationSize = grallocHelper->getAllocatedSize(handle); diff --git a/system/vulkan_enc/AndroidHardwareBuffer.h b/system/vulkan_enc/AndroidHardwareBuffer.h index 9c9cb94f..cab626ba 100644 --- a/system/vulkan_enc/AndroidHardwareBuffer.h +++ b/system/vulkan_enc/AndroidHardwareBuffer.h @@ -32,10 +32,11 @@ getAndroidHardwareBufferUsageFromVkUsage( const VkImageCreateFlags vk_create, const VkImageUsageFlags vk_usage); +void updateMemoryTypeBitsForAndroidHardwareBuffers( + uint32_t* memoryTypeBits); + VkResult getAndroidHardwareBufferPropertiesANDROID( Gralloc* grallocHelper, - const VkPhysicalDeviceMemoryProperties* memProps, - VkDevice, const AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp index 624239c2..106321ae 100644 --- a/system/vulkan_enc/ResourceTracker.cpp +++ b/system/vulkan_enc/ResourceTracker.cpp @@ -1657,18 +1657,14 @@ public: #ifdef VK_USE_PLATFORM_ANDROID_KHR VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID( - void* context, VkResult, - VkDevice device, + void*, VkResult, + VkDevice, const AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) { - const VkPhysicalDeviceMemoryProperties& memoryProperties = - getPhysicalDeviceMemoryProperties(context, device, VK_NULL_HANDLE); auto grallocHelper = ResourceTracker::threadingCallbacks.hostConnectionGetFunc()->grallocHelper(); return getAndroidHardwareBufferPropertiesANDROID( - grallocHelper, - &memoryProperties, - device, buffer, pProperties); + grallocHelper, buffer, pProperties); } VkResult on_vkGetMemoryAndroidHardwareBufferANDROID( @@ -4252,6 +4248,13 @@ public: info.isSysmemBackedMemory = true; } #endif +#ifdef VK_USE_PLATFORM_ANDROID_KHR + if (extImgCiPtr && + (extImgCiPtr->handleTypes & + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) { + updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits); + } +#endif if (info.baseRequirementsKnown) { transformImageMemoryRequirementsForGuestLocked(*pImage, &memReqs); @@ -5288,6 +5291,14 @@ public: if (res != VK_SUCCESS) return res; +#ifdef VK_USE_PLATFORM_ANDROID_KHR + if (extBufCiPtr && + (extBufCiPtr->handleTypes & + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) { + updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits); + } +#endif + AutoLock<RecursiveLock> lock(mLock); auto it = info_VkBuffer.find(*pBuffer); |