diff options
| author | Yong He <yonghe@outlook.com> | 2025-02-27 16:57:52 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-27 16:57:52 -0800 |
| commit | 6f2ce72b038b34e84819ddfc5d658166ed879eaa (patch) | |
| tree | 486a85523114a428ccf4deee05bcbab0d4b9528b /source/slang/slang-emit-spirv.cpp | |
| parent | 90b3817498d9cf664346f04dcea71f48ce81993e (diff) | |
Map `SV_InstanceID` to `gl_InstanceIndex-gl_BaseInstance` (#6468)
* Map `SV_InstanceID` to `gl_InstanceIndex-gl_BaseInstance`
* Fix ci.
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
| -rw-r--r-- | source/slang/slang-emit-spirv.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp index e0367be89..802df915e 100644 --- a/source/slang/slang-emit-spirv.cpp +++ b/source/slang/slang-emit-spirv.cpp @@ -4417,8 +4417,11 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex continue; } } - paramsSet.add(spvGlobalInst); referencedBuiltinIRVars.add(globalInst); + // Don't add duplicate vars to the interface list. + bool paramAdded = paramsSet.add(spvGlobalInst); + if (!paramAdded) + continue; // Don't add a global param to the interface if it is a // specialization constant. @@ -5288,6 +5291,17 @@ struct SPIRVEmitContext : public SourceEmitterBase, public SPIRVEmitSharedContex { IRBuilder builder(m_irModule); builder.setInsertBefore(inst); + if (auto builtinVarDecor = inst->findDecoration<IRTargetBuiltinVarDecoration>()) + { + switch (builtinVarDecor->getBuiltinVarName()) + { + case IRTargetBuiltinVarName::SpvInstanceIndex: + return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInInstanceIndex, inst); + case IRTargetBuiltinVarName::SpvBaseInstance: + requireSPIRVCapability(SpvCapabilityDrawParameters); + return getBuiltinGlobalVar(inst->getFullType(), SpvBuiltInBaseInstance, inst); + } + } if (auto layout = getVarLayout(inst)) { if (auto systemValueAttr = layout->findAttr<IRSystemValueSemanticAttr>()) |
