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-lower-to-ir.cpp | |
| parent | 5799281bda2f9a174b825de4058c5e8c9aa5b27f (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.cpp | 16 |
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); |
