| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // Copyright (c) 2017 Google Inc.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #ifndef SOURCE_OPT_FEATURE_MANAGER_H_
- #define SOURCE_OPT_FEATURE_MANAGER_H_
- #include "source/assembly_grammar.h"
- #include "source/extensions.h"
- #include "source/opt/module.h"
- namespace spvtools {
- namespace opt {
- // Tracks features enabled by a module. The IRContext has a FeatureManager.
- class FeatureManager {
- public:
- // Returns true if |ext| is an enabled extension in the module.
- bool HasExtension(Extension ext) const { return extensions_.contains(ext); }
- // Returns true if |cap| is an enabled capability in the module.
- bool HasCapability(spv::Capability cap) const {
- return capabilities_.contains(cap);
- }
- // Returns the capabilities the module declares.
- inline const CapabilitySet& GetCapabilities() const { return capabilities_; }
- // Returns the extensions the module imports.
- inline const ExtensionSet& GetExtensions() const { return extensions_; }
- uint32_t GetExtInstImportId_GLSLstd450() const {
- return extinst_importid_GLSLstd450_;
- }
- uint32_t GetExtInstImportId_OpenCL100DebugInfo() const {
- return extinst_importid_OpenCL100DebugInfo_;
- }
- uint32_t GetExtInstImportId_Shader100DebugInfo() const {
- return extinst_importid_Shader100DebugInfo_;
- }
- friend bool operator==(const FeatureManager& a, const FeatureManager& b);
- friend bool operator!=(const FeatureManager& a, const FeatureManager& b) {
- return !(a == b);
- }
- private:
- explicit FeatureManager(const AssemblyGrammar& grammar) : grammar_(grammar) {}
- // Analyzes |module| and records enabled extensions and capabilities.
- void Analyze(Module* module);
- // Add the extension |ext| to the feature manager.
- void AddExtension(Instruction* ext);
- // Analyzes |module| and records enabled extensions.
- void AddExtensions(Module* module);
- // Removes the given |extension| from the current FeatureManager.
- void RemoveExtension(Extension extension);
- // Adds the given |capability| and all implied capabilities into the current
- // FeatureManager.
- void AddCapability(spv::Capability capability);
- // Analyzes |module| and records enabled capabilities.
- void AddCapabilities(Module* module);
- // Removes the given |capability| from the current FeatureManager.
- void RemoveCapability(spv::Capability capability);
- // Analyzes |module| and records imported external instruction sets.
- void AddExtInstImportIds(Module* module);
- // Auxiliary object for querying SPIR-V grammar facts.
- const AssemblyGrammar& grammar_;
- // The enabled extensions.
- ExtensionSet extensions_;
- // The enabled capabilities.
- CapabilitySet capabilities_;
- // Common external instruction import ids, cached for performance.
- uint32_t extinst_importid_GLSLstd450_ = 0;
- // Common OpenCL100DebugInfo external instruction import ids, cached
- // for performance.
- uint32_t extinst_importid_OpenCL100DebugInfo_ = 0;
- // Common NonSemanticShader100DebugInfo external instruction import ids,
- // cached for performance.
- uint32_t extinst_importid_Shader100DebugInfo_ = 0;
- friend class IRContext;
- };
- } // namespace opt
- } // namespace spvtools
- #endif // SOURCE_OPT_FEATURE_MANAGER_H_
|