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/AndroidHardwareBuffer.cpp b/system/vulkan_enc/AndroidHardwareBuffer.cpp
index f31c04d..4a46421 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.cpp
+++ b/system/vulkan_enc/AndroidHardwareBuffer.cpp
@@ -62,10 +62,13 @@
    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 @@
     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 9c9cb94..cab626b 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.h
+++ b/system/vulkan_enc/AndroidHardwareBuffer.h
@@ -32,10 +32,11 @@
     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 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);