diff options
Diffstat (limited to 'source/slang/slang-capability.cpp')
| -rw-r--r-- | source/slang/slang-capability.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/source/slang/slang-capability.cpp b/source/slang/slang-capability.cpp index e77901b5b..c717a0ab9 100644 --- a/source/slang/slang-capability.cpp +++ b/source/slang/slang-capability.cpp @@ -112,6 +112,20 @@ bool isDirectChildOfAbstractAtom(CapabilityAtom name) return _getInfo(name).abstractBase != CapabilityName::Invalid; } +bool isTargetVersionAtom(CapabilityName name) +{ + if (name >= CapabilityName::spirv_1_0 && name <= getLatestSpirvAtom()) + return true; + if (name >= CapabilityName::metallib_2_3 && name <= getLatestMetalAtom()) + return true; + return false; +} + +bool isSpirvExtensionAtom(CapabilityName name) +{ + return UnownedStringSlice(_getInfo(name).name).startsWith("SPV_"); +} + bool lookupCapabilityName(const UnownedStringSlice& str, CapabilityName& value); CapabilityName findCapabilityName(UnownedStringSlice const& name) @@ -122,6 +136,30 @@ CapabilityName findCapabilityName(UnownedStringSlice const& name) return result; } +CapabilityName getLatestSpirvAtom() +{ + static CapabilityName result = CapabilityName::Invalid; + if (result == CapabilityName::Invalid) + { + CapabilitySet latestSpirvCapSet = CapabilitySet(CapabilityName::spirv_latest); + auto latestSpirvCapSetElements = latestSpirvCapSet.getAtomSets()->getElements<CapabilityAtom>(); + result = (CapabilityName)latestSpirvCapSetElements[latestSpirvCapSetElements.getCount() - 2]; //-1 gets shader stage + } + return result; +} + +CapabilityName getLatestMetalAtom() +{ + static CapabilityName result = CapabilityName::Invalid; + if (result == CapabilityName::Invalid) + { + CapabilitySet latestMetalCapSet = CapabilitySet(CapabilityName::metallib_latest); + auto latestMetalCapSetElements = latestMetalCapSet.getAtomSets()->getElements<CapabilityAtom>(); + result = (CapabilityName)latestMetalCapSetElements[latestMetalCapSetElements.getCount() - 2]; //-1 gets shader stage + } + return result; +} + bool isCapabilityDerivedFrom(CapabilityAtom atom, CapabilityAtom base) { if (atom == base) |
