diff options
| author | Yong He <yonghe@outlook.com> | 2024-06-01 19:26:14 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-01 19:26:14 -0700 |
| commit | c5a453e56985022deb820cbbb2ff5cd6a8347e34 (patch) | |
| tree | 019c81e8bfcc099f2ff17c1a58f625cf6a527d47 /source/slang/slang-capability.h | |
| parent | 5799281bda2f9a174b825de4058c5e8c9aa5b27f (diff) | |
Support different SPIRV versions. (#4254)
Diffstat (limited to 'source/slang/slang-capability.h')
| -rw-r--r-- | source/slang/slang-capability.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/source/slang/slang-capability.h b/source/slang/slang-capability.h index 8bd03147e..5ee79670b 100644 --- a/source/slang/slang-capability.h +++ b/source/slang/slang-capability.h @@ -191,7 +191,7 @@ public: const CapabilityTargetSets* context; CapabilityTargetSets::ConstIterator targetNode{}; CapabilityStageSets::ConstIterator stageNode{}; - const std::optional<CapabilityAtomSet>* atomSetNode; + const std::optional<CapabilityAtomSet>* atomSetNode = {}; public: operator bool() const @@ -258,10 +258,12 @@ public: if (tmp.targetNode == this->context->end()) return tmp; tmp.stageNode = (*tmp.targetNode).second.shaderStageSets.begin(); - if (tmp.stageNode == (*tmp.targetNode).second.shaderStageSets.end()) + while (tmp.stageNode == (*tmp.targetNode).second.shaderStageSets.end()) { - tmp++; - return tmp; + tmp.targetNode++; + if (tmp.targetNode == this->context->end()) + return end(); + tmp.stageNode = (*tmp.targetNode).second.shaderStageSets.begin(); } tmp.atomSetNode = &(*tmp.stageNode).second.atomSet; if (!tmp.atomSetNode->has_value()) @@ -298,6 +300,9 @@ bool isCapabilityDerivedFrom(CapabilityAtom atom, CapabilityAtom base); /// Find a capability atom with the given `name`, or return CapabilityAtom::Invalid. CapabilityName findCapabilityName(UnownedStringSlice const& name); +CapabilityName getLatestSpirvAtom(); +CapabilityName getLatestMetalAtom(); + /// Gets the capability names. void getCapabilityNames(List<UnownedStringSlice>& ioNames); @@ -305,6 +310,11 @@ UnownedStringSlice capabilityNameToString(CapabilityName name); bool isDirectChildOfAbstractAtom(CapabilityAtom name); + + /// Return true if `name` represents an atom for a target version, e.g. spirv_1_5. +bool isTargetVersionAtom(CapabilityName name); +bool isSpirvExtensionAtom(CapabilityName name); + void printDiagnosticArg(StringBuilder& sb, CapabilityAtom atom); void printDiagnosticArg(StringBuilder& sb, CapabilityName name); |
