[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,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 9be37c8..c385e19 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -21,6 +21,8 @@
#include "VkEventHandler.h"
#include <memory>
+struct EmulatorFeatureInfo;
+
namespace goldfish_vk {
class ResourceTracker : public VkEventHandler {
@@ -97,6 +99,7 @@
VkDeviceSize getMappedSize(VkDeviceMemory memory);
VkDeviceSize getNonCoherentExtendedSize(VkDevice device, VkDeviceSize basicSize) const;
bool isValidMemoryRange(const VkMappedMemoryRange& range) const;
+ void setupFeatures(const EmulatorFeatureInfo* features);
private:
class Impl;