summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-parameter-binding.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-01-27 18:17:16 -0800
committerGitHub <noreply@github.com>2025-01-27 18:17:16 -0800
commitf030a5ab62235152055fe8a616dd6d0d7ba1c275 (patch)
treee4851bd271a04feaa8c3dc9eeb228d3550b9b56e /source/slang/slang-parameter-binding.cpp
parentda3dc98f96cc7be2accb5c6f86aa6f6e5502bada (diff)
Properly plumbing layout for global varyings. (#6198)
* Properly plumbing layout for global varyings. * Fix test.
Diffstat (limited to 'source/slang/slang-parameter-binding.cpp')
-rw-r--r--source/slang/slang-parameter-binding.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/slang/slang-parameter-binding.cpp b/source/slang/slang-parameter-binding.cpp
index 825e0f4af..55c487e4e 100644
--- a/source/slang/slang-parameter-binding.cpp
+++ b/source/slang/slang-parameter-binding.cpp
@@ -712,6 +712,15 @@ RefPtr<TypeLayout> getTypeLayoutForGlobalShaderParameter(
return createTypeLayoutWith(layoutContext, specializationConstantRule, type);
}
+ if (varDecl->hasModifier<InModifier>())
+ {
+ return createTypeLayoutWith(layoutContext, rules->getVaryingInputRules(), type);
+ }
+ else if (varDecl->hasModifier<OutModifier>())
+ {
+ return createTypeLayoutWith(layoutContext, rules->getVaryingOutputRules(), type);
+ }
+
// TODO(tfoley): there may be other cases that we need to handle here
// An "ordinary" global variable is implicitly a uniform
@@ -1120,6 +1129,25 @@ static void addExplicitParameterBindings_GLSL(
return;
}
+ if (auto foundVaryingInput = typeLayout->FindResourceInfo(LayoutResourceKind::VaryingInput))
+ {
+ info[kResInfo].resInfo = foundVaryingInput;
+
+ if (auto layoutAttr = varDecl.getDecl()->findModifier<GLSLLocationAttribute>())
+ info[kResInfo].semanticInfo.index = layoutAttr->value;
+ else
+ return;
+ }
+ if (auto foundVaryingOutput = typeLayout->FindResourceInfo(LayoutResourceKind::VaryingOutput))
+ {
+ info[kResInfo].resInfo = foundVaryingOutput;
+
+ if (auto layoutAttr = varDecl.getDecl()->findModifier<GLSLLocationAttribute>())
+ info[kResInfo].semanticInfo.index = layoutAttr->value;
+ else
+ return;
+ }
+
// For remaining cases, we only want to apply GLSL-style layout modifers
// when compiling for Khronos and WGSL targets.
//