summaryrefslogtreecommitdiff
path: root/source/slang/slang-lower-to-ir.cpp
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-lower-to-ir.cpp
parent5799281bda2f9a174b825de4058c5e8c9aa5b27f (diff)
Support different SPIRV versions. (#4254)
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
-rw-r--r--source/slang/slang-lower-to-ir.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index 80e73fe2b..403e2a921 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -11599,6 +11599,9 @@ RefPtr<IRModule> TargetProgram::createIRModuleForLayout(DiagnosticSink* sink)
builder->addLayoutDecoration(irModule->getModuleInst(), irGlobalScopeVarLayout);
+ auto latestSpirvAtom = getLatestSpirvAtom();
+ auto latestMetalAtom = getLatestMetalAtom();
+
for( auto entryPointLayout : programLayout->entryPoints )
{
auto funcDeclRef = entryPointLayout->entryPoint;
@@ -11617,6 +11620,19 @@ RefPtr<IRModule> TargetProgram::createIRModuleForLayout(DiagnosticSink* sink)
builder->addImportDecoration(irFunc, getMangledName(astBuilder, funcDeclRef).getUnownedSlice());
}
+ for (auto atomSet : as<FuncDecl>(funcDeclRef.getDecl())->inferredCapabilityRequirements.getAtomSets())
+ {
+ for (auto atomVal : atomSet)
+ {
+ auto atom = (CapabilityName)atomVal;
+ if (atom >= CapabilityName::spirv_1_0 && atom <= latestSpirvAtom ||
+ atom >= CapabilityName::metallib_2_3 && atom <= latestMetalAtom)
+ {
+ builder->addRequireCapabilityAtomDecoration(irFunc, atom);
+ }
+ }
+ }
+
auto irEntryPointLayout = lowerEntryPointLayout(context, entryPointLayout);
builder->addLayoutDecoration(irFunc, irEntryPointLayout);