diff options
author | Andrey Tuganov <andreyt@google.com> | 2017-03-10 15:58:15 -0500 |
---|---|---|
committer | David Neto <dneto@google.com> | 2017-03-14 13:39:43 -0400 |
commit | b0116331718113de20af5b0a1cc869ccc95b13fa (patch) | |
tree | bc0f3f75643f5c58b66064ff105e5e88eecc2a30 /source/val | |
parent | 1fb8c37b5718118b49eec59dc383cfa3f98643c0 (diff) | |
download | spirv-tools-b0116331718113de20af5b0a1cc869ccc95b13fa.tar.gz |
Validator checks if operands require extension
If required extension is not found, returning new error
SPV_ERROR_MISSING_EXTENSION.
Diffstat (limited to 'source/val')
-rw-r--r-- | source/val/validation_state.cpp | 16 | ||||
-rw-r--r-- | source/val/validation_state.h | 15 |
2 files changed, 20 insertions, 11 deletions
diff --git a/source/val/validation_state.cpp b/source/val/validation_state.cpp index 5845cb19..12e864d3 100644 --- a/source/val/validation_state.cpp +++ b/source/val/validation_state.cpp @@ -311,14 +311,14 @@ void ValidationState_t::RegisterExtension(Extension ext) { module_extensions_.Add(ext); } -bool ValidationState_t::HasAnyOf(const CapabilitySet& capabilities) const { - bool found = false; - bool any_queried = false; - capabilities.ForEach([&found, &any_queried, this](SpvCapability c) { - any_queried = true; - found = found || this->module_capabilities_.Contains(c); - }); - return !any_queried || found; +bool ValidationState_t::HasAnyOfCapabilities( + const CapabilitySet& capabilities) const { + return module_capabilities_.HasAnyOf(capabilities); +} + +bool ValidationState_t::HasAnyOfExtensions( + const ExtensionSet& extensions) const { + return module_extensions_.HasAnyOf(extensions); } void ValidationState_t::set_addressing_model(SpvAddressingModel am) { diff --git a/source/val/validation_state.h b/source/val/validation_state.h index dbc4ca61..a61fbabb 100644 --- a/source/val/validation_state.h +++ b/source/val/validation_state.h @@ -192,9 +192,18 @@ class ValidationState_t { return module_capabilities_.Contains(cap); } - /// Returns true if any of the capabilities are enabled, or if the given - /// capabilities is the empty set. - bool HasAnyOf(const libspirv::CapabilitySet& capabilities) const; + /// Returns true if the extension is enabled in the module. + bool HasExtension(Extension ext) const { + return module_extensions_.Contains(ext); + } + + /// Returns true if any of the capabilities is enabled, or if |capabilities| + /// is an empty set. + bool HasAnyOfCapabilities(const libspirv::CapabilitySet& capabilities) const; + + /// Returns true if any of the extensions is enabled, or if |extensions| + /// is an empty set. + bool HasAnyOfExtensions(const libspirv::ExtensionSet& extensions) const; /// Sets the addressing model of this module (logical/physical). void set_addressing_model(SpvAddressingModel am); |