1 // Copyright 2024 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "gfxstream/host/Features.h"
16 #include <sstream>
17 #include <vector>
18 namespace gfxstream {
19 namespace host {
20 
FeatureSet(const FeatureSet & rhs)21 FeatureSet::FeatureSet(const FeatureSet& rhs) : FeatureSet() {
22     *this = rhs;
23 }
24 
checkAllDependentFeaturesAreEnabled()25 FeatureResult FeatureDependencyHandler::checkAllDependentFeaturesAreEnabled() {
26     // Only check for direct dependencies. Since we're verifying all enabled features, this should cover the whole span.
27     bool allDependenciesAreEnabled = true;
28     std::stringstream ss;
29     for (auto const&[feature, dependentFeatures] : VK_FEATURE_DEPENDENCY_MAP) {
30         if (feature->enabled && !dependentFeatures.empty()) {
31             for (auto const& dep : dependentFeatures) {
32                 if (!dep->enabled) {
33                     ss << "Feature: " << feature->name << " requests missing dependency: " << dep->name << "\n";
34                     allDependenciesAreEnabled = false;
35                 }
36             }
37         }
38     }
39     return {allDependenciesAreEnabled, ss.str()};
40 };
41 
operator =(const FeatureSet & rhs)42 FeatureSet& FeatureSet::operator=(const FeatureSet& rhs) {
43     for (const auto& [featureName, featureInfo] : rhs.map) {
44         *map[featureName] = *featureInfo;
45     }
46     return *this;
47 }
48 
49 }  // host
50 }  // gfxstream
51