[vulkan] Set the features on first connection

bug: 111137294
bug: 121377497

This CL introduces a mechanism for Vulkan ResourceTracker to become
aware of what host-side features are available. On the first connection,
we father the feature strings and set feature fields, and this should be
communicated to Vulkan as well.

Change-Id: I90e4e31477d201271a47163491dc239ea5c26678
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 5ac4d7b..916a817 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -15,6 +15,7 @@
 
 #include "ResourceTracker.h"
 
+#include "../OpenglSystemCommon/EmulatorFeatureInfo.h"
 #include "Resources.h"
 #include "VkEncoder.h"
 
@@ -237,6 +238,12 @@
         return offset + size <= info.mappedSize;
     }
 
+    void setupFeatures(const EmulatorFeatureInfo* features) {
+        if (!features || mFeatureInfo) return;
+        mFeatureInfo.reset(new EmulatorFeatureInfo);
+        *mFeatureInfo = *features;
+    }
+
     VkResult on_vkEnumerateInstanceVersion(
         void*,
         VkResult,
@@ -392,7 +399,7 @@
 
 private:
     mutable Lock mLock;
-
+    std::unique_ptr<EmulatorFeatureInfo> mFeatureInfo;
 };
 ResourceTracker::ResourceTracker() : mImpl(new ResourceTracker::Impl()) { }
 ResourceTracker::~ResourceTracker() { }
@@ -457,6 +464,10 @@
     return mImpl->isValidMemoryRange(range);
 }
 
+void ResourceTracker::setupFeatures(const EmulatorFeatureInfo* features) {
+    mImpl->setupFeatures(features);
+}
+
 VkResult ResourceTracker::on_vkEnumerateInstanceVersion(
     void* context,
     VkResult input_result,