aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2023-04-06 17:12:31 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-06 17:12:31 +0000
commitbb398c8dcbbc784ba85d40fba542adeeb5e308ca (patch)
treea93c90965be9e73410bd1ad27a616ae7f284efc0
parentab3651fb4b69afe7fa854632b8bafcf48d3ad1a6 (diff)
parentbe44201e770212ad75a78de92d249b0a686e3f49 (diff)
downloadgoldfish-opengl-bb398c8dcbbc784ba85d40fba542adeeb5e308ca.tar.gz
Merge "Ensure AHBs use the reserved emulated memory type index" am: be44201e77
Original change: https://android-review.googlesource.com/c/device/generic/goldfish-opengl/+/2492496 Change-Id: Icca1f538739f25c74cbce2e4f94a77c3a03cf5e4 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--system/vulkan_enc/AndroidHardwareBuffer.cpp12
-rw-r--r--system/vulkan_enc/AndroidHardwareBuffer.h5
-rw-r--r--system/vulkan_enc/ResourceTracker.cpp25
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);