[vulkan] Allow Vulkan 1.1 from host (guest codegen, ResourceTracker
changes)

bug: 111137294
Change-Id: I18993bf3bcfae07367f204ddaa64882dbe6b1c79
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index baee1e1..24a5777 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -389,15 +389,16 @@
     }
 
     // TODO: Upgrade to 1.1
-    static constexpr uint32_t kMaxApiVersion = VK_MAKE_VERSION(1, 0, 65);
+    static constexpr uint32_t kMaxApiVersion = VK_MAKE_VERSION(1, 1, 0);
     static constexpr uint32_t kMinApiVersion = VK_MAKE_VERSION(1, 0, 0);
 
     void setInstanceInfo(VkInstance instance,
                          uint32_t enabledExtensionCount,
-                         const char* const* ppEnabledExtensionNames) {
+                         const char* const* ppEnabledExtensionNames,
+                         uint32_t apiVersion) {
         AutoLock lock(mLock);
         auto& info = info_VkInstance[instance];
-        info.highestApiVersion = kMaxApiVersion;
+        info.highestApiVersion = apiVersion;
 
         if (!ppEnabledExtensionNames) return;
 
@@ -689,16 +690,6 @@
         }
     }
 
-    VkResult on_vkEnumerateInstanceVersion(
-        void*,
-        VkResult,
-        uint32_t* apiVersion) {
-        if (apiVersion) {
-            *apiVersion = kMaxApiVersion;
-        }
-        return VK_SUCCESS;
-    }
-
     VkResult on_vkEnumerateInstanceExtensionProperties(
         void* context,
         VkResult,
@@ -983,7 +974,7 @@
     }
 
     VkResult on_vkCreateInstance(
-        void*,
+        void* context,
         VkResult input_result,
         const VkInstanceCreateInfo* createInfo,
         const VkAllocationCallbacks*,
@@ -991,10 +982,17 @@
 
         if (input_result != VK_SUCCESS) return input_result;
 
+        VkEncoder* enc = (VkEncoder*)context;
+
+        uint32_t apiVersion;
+        VkResult enumInstanceVersionRes =
+            enc->vkEnumerateInstanceVersion(&apiVersion);
+
         setInstanceInfo(
             *pInstance,
             createInfo->enabledExtensionCount,
-            createInfo->ppEnabledExtensionNames);
+            createInfo->ppEnabledExtensionNames,
+            apiVersion);
 
         return input_result;
     }
@@ -2855,13 +2853,6 @@
     mImpl->setColorBufferFunctions(create, close);
 }
 
-VkResult ResourceTracker::on_vkEnumerateInstanceVersion(
-    void* context,
-    VkResult input_result,
-    uint32_t* apiVersion) {
-    return mImpl->on_vkEnumerateInstanceVersion(context, input_result, apiVersion);
-}
-
 VkResult ResourceTracker::on_vkEnumerateInstanceExtensionProperties(
     void* context,
     VkResult input_result,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index c899e52..57eadda 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -47,11 +47,6 @@
 
     GOLDFISH_VK_LIST_HANDLE_TYPES(HANDLE_REGISTER_DECL)
 
-    VkResult on_vkEnumerateInstanceVersion(
-        void* context,
-        VkResult input_result,
-        uint32_t* apiVersion);
-
     VkResult on_vkEnumerateInstanceExtensionProperties(
         void* context,
         VkResult input_result,
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 8eb589d..4261d71 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -9667,9 +9667,31 @@
 VkResult VkEncoder::vkEnumerateInstanceVersion(
     uint32_t* pApiVersion)
 {
-    AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion resourceEvent");
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion encode");
+    mImpl->log("start vkEnumerateInstanceVersion");
+    auto stream = mImpl->stream();
+    auto countingStream = mImpl->countingStream();
+    auto resources = mImpl->resources();
+    auto pool = mImpl->pool();
+    stream->setHandleMapping(resources->unwrapMapping());
+    countingStream->rewind();
+    {
+        countingStream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
+    }
+    uint32_t packetSize_vkEnumerateInstanceVersion = 4 + 4 + (uint32_t)countingStream->bytesWritten();
+    countingStream->rewind();
+    uint32_t opcode_vkEnumerateInstanceVersion = OP_vkEnumerateInstanceVersion;
+    stream->write(&opcode_vkEnumerateInstanceVersion, sizeof(uint32_t));
+    stream->write(&packetSize_vkEnumerateInstanceVersion, sizeof(uint32_t));
+    stream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion readParams");
+    stream->read((uint32_t*)pApiVersion, sizeof(uint32_t));
+    AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion returnUnmarshal");
     VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
-    vkEnumerateInstanceVersion_VkResult_return = mImpl->resources()->on_vkEnumerateInstanceVersion(this, VK_SUCCESS, pApiVersion);
+    stream->read(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
+    countingStream->clearPool();
+    stream->clearPool();
+    pool->freeAll();
     mImpl->log("finish vkEnumerateInstanceVersion");;
     return vkEnumerateInstanceVersion_VkResult_return;
 }