goldfish-opengl: update AHB with host color buffer memory index

- use host defined memory index instead hardcoding to zero
- updateMemoryBitsForAndroidHardwareBuffers --> updateMemoryBits
    -- maybe a namesapce can be added later,
    -- gfxstream::guest::vk::ahb::updateMemoryBits

BUG=215538934
TEST=compile

Change-Id: Ifcdb877f0502249ec5fdfe5964fca9cd4f91bd5e
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.cpp b/system/vulkan_enc/AndroidHardwareBuffer.cpp
index 4a46421..09946ee 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.cpp
+++ b/system/vulkan_enc/AndroidHardwareBuffer.cpp
@@ -62,9 +62,8 @@
    return ahw_usage;
 }
 
-void updateMemoryTypeBitsForAndroidHardwareBuffers(uint32_t* memoryTypeBits) {
-    constexpr const uint32_t kReservedAndroidHardwareBufferMemoryTypeIndex = 0;
-    *memoryTypeBits = 1u << kReservedAndroidHardwareBufferMemoryTypeIndex;
+void updateMemoryTypeBits(uint32_t* memoryTypeBits, uint32_t colorBufferMemoryIndex) {
+   *memoryTypeBits = 1u << colorBufferMemoryIndex;
 }
 
 VkResult getAndroidHardwareBufferPropertiesANDROID(
@@ -236,8 +235,6 @@
         return VK_ERROR_INVALID_EXTERNAL_HANDLE;
     }
 
-    updateMemoryTypeBitsForAndroidHardwareBuffers(&pProperties->memoryTypeBits);
-
     pProperties->allocationSize =
         grallocHelper->getAllocatedSize(handle);
 
diff --git a/system/vulkan_enc/AndroidHardwareBuffer.h b/system/vulkan_enc/AndroidHardwareBuffer.h
index cab626b..c5e64ee 100644
--- a/system/vulkan_enc/AndroidHardwareBuffer.h
+++ b/system/vulkan_enc/AndroidHardwareBuffer.h
@@ -32,8 +32,7 @@
     const VkImageCreateFlags vk_create,
     const VkImageUsageFlags vk_usage);
 
-void updateMemoryTypeBitsForAndroidHardwareBuffers(
-    uint32_t* memoryTypeBits);
+void updateMemoryTypeBits(uint32_t* memoryTypeBits, uint32_t colorBufferMemoryIndex);
 
 VkResult getAndroidHardwareBufferPropertiesANDROID(
     Gralloc* grallocHelper,
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 2f9a292..e74392f 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -912,6 +912,11 @@
     void setupCaps(void) {
         VirtGpuDevice& instance = VirtGpuDevice::getInstance((enum VirtGpuCapset)3);
         mCaps = instance.getCaps();
+
+        // Delete once goldfish Linux drivers are gone
+        if (mCaps.gfxstreamCapset.protocolVersion == 0) {
+            mCaps.gfxstreamCapset.colorBufferMemoryIndex = 0xFFFFFFFF;
+        }
     }
 
     void setupFeatures(const EmulatorFeatureInfo* features) {
@@ -1657,12 +1662,25 @@
 
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
     VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
-            void*, VkResult,
-            VkDevice,
+            void* context, VkResult,
+            VkDevice device,
             const AHardwareBuffer* buffer,
             VkAndroidHardwareBufferPropertiesANDROID* pProperties) {
         auto grallocHelper =
             ResourceTracker::threadingCallbacks.hostConnectionGetFunc()->grallocHelper();
+
+        // Delete once goldfish Linux drivers are gone
+	if (mCaps.gfxstreamCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
+            const VkPhysicalDeviceMemoryProperties& memProps =
+                getPhysicalDeviceMemoryProperties(context, device, VK_NULL_HANDLE);
+
+            mCaps.gfxstreamCapset.colorBufferMemoryIndex =
+                (1u << memProps.memoryTypeCount) - 1;
+        }
+
+        updateMemoryTypeBits(&pProperties->memoryTypeBits,
+                             mCaps.gfxstreamCapset.colorBufferMemoryIndex);
+
         return getAndroidHardwareBufferPropertiesANDROID(
             grallocHelper, buffer, pProperties);
     }
@@ -4228,11 +4246,15 @@
             info.isSysmemBackedMemory = true;
         }
 #endif
+
+// Delete `protocolVersion` check goldfish drivers are gone.
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
         if (extImgCiPtr &&
+            mCaps.gfxstreamCapset.protocolVersion &&
             (extImgCiPtr->handleTypes &
              VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
-            updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits);
+            updateMemoryTypeBits(&memReqs.memoryTypeBits,
+                                 mCaps.gfxstreamCapset.colorBufferMemoryIndex);
         }
 #endif
 
@@ -5271,11 +5293,14 @@
 
         if (res != VK_SUCCESS) return res;
 
+// Delete `protocolVersion` check goldfish drivers are gone.
 #ifdef VK_USE_PLATFORM_ANDROID_KHR
         if (extBufCiPtr &&
+            mCaps.gfxstreamCapset.protocolVersion &&
             (extBufCiPtr->handleTypes &
              VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
-            updateMemoryTypeBitsForAndroidHardwareBuffers(&memReqs.memoryTypeBits);
+            updateMemoryTypeBits(&memReqs.memoryTypeBits,
+                                 mCaps.gfxstreamCapset.colorBufferMemoryIndex);
         }
 #endif