summaryrefslogtreecommitdiff
path: root/source/slang/slang-capability.h
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-06-01 19:26:14 -0700
committerGitHub <noreply@github.com>2024-06-01 19:26:14 -0700
commitc5a453e56985022deb820cbbb2ff5cd6a8347e34 (patch)
tree019c81e8bfcc099f2ff17c1a58f625cf6a527d47 /source/slang/slang-capability.h
parent5799281bda2f9a174b825de4058c5e8c9aa5b27f (diff)
Support different SPIRV versions. (#4254)
Diffstat (limited to 'source/slang/slang-capability.h')
-rw-r--r--source/slang/slang-capability.h18
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);