Downgrade ICD's view of VkApplicationInfo::apiVersion for 1.3 ICD

Certain 1.3 ICDs in the wild seem to misbehave on seeing
VkApplicationInfo::apiVersion = 1.4.

Bug: b/403118763
Flag: NONE bugfix
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a9972152370858f05df2b79daf90fd2930ff6001)
Merged-In: Ic6ec11ecca68add499db864af4a6e96ef8076aa4
Change-Id: Ic6ec11ecca68add499db864af4a6e96ef8076aa4
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp
index 28c1b5f..caa3020 100644
--- a/vulkan/libvulkan/driver.cpp
+++ b/vulkan/libvulkan/driver.cpp
@@ -439,6 +439,19 @@
     if (!is_instance_ || !instance_info_.pApplicationInfo)
         return VK_SUCCESS;
 
+    // certain 1.3 icds in the wild may misbehave if the app requests
+    // the 1.4 instance api. since there are no actual instance api
+    // differences between these versions, downgrade the instance api
+    // to 1.3 for such icds.
+    if (icd_api_version_ >= VK_API_VERSION_1_3 &&
+            icd_api_version_ < VK_API_VERSION_1_4 &&
+            instance_info_.pApplicationInfo->apiVersion >= VK_API_VERSION_1_4) {
+        application_info_ = *instance_info_.pApplicationInfo;
+        application_info_.apiVersion = icd_api_version_;
+        instance_info_.pApplicationInfo = &application_info_;
+        return VK_SUCCESS;
+    }
+
     if (icd_api_version_ > VK_API_VERSION_1_0 ||
         instance_info_.pApplicationInfo->apiVersion < VK_API_VERSION_1_1)
         return VK_SUCCESS;