Ensure AHBs use the reserved emulated memory type index
... so that the guest never tries to map AHB memory.
Bug: b/272079201
Test: cts -m CtsNativeHardwareTestCases
Test: cts -m CtsDeqpTestCases --module-arg
CtsDeqpTestCases:include-filter:dEQP-VK.api.external.memory.android_hardware_buffer*
Change-Id: I0b8030bdfdcedc5429191a3e76c9ff6355e9acbf
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 624239c..106321a 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -1657,18 +1657,14 @@
#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 @@
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 @@
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);