aboutsummaryrefslogtreecommitdiff
path: root/source/val
diff options
context:
space:
mode:
authorAndrey Tuganov <andreyt@google.com>2017-03-10 15:58:15 -0500
committerDavid Neto <dneto@google.com>2017-03-14 13:39:43 -0400
commitb0116331718113de20af5b0a1cc869ccc95b13fa (patch)
treebc0f3f75643f5c58b66064ff105e5e88eecc2a30 /source/val
parent1fb8c37b5718118b49eec59dc383cfa3f98643c0 (diff)
downloadspirv-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.cpp16
-rw-r--r--source/val/validation_state.h15
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);