summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2019-02-12 15:13:00 -0800
committerGitHub <noreply@github.com>2019-02-12 15:13:00 -0800
commit73af7100416e1627d1de0aaa94983f56406a9d49 (patch)
tree1ca58d931c3033f5b5fd27f69b806951de9ebd08 /source
parentfb6432b58e52caef333ddcfd33fc468d044f8a61 (diff)
Track stage for varying sub-fields (#842)
Fixes #841 This reverts a small change made in #815 that seemed innocent at the time: we stopped tracking an explicit `Stage` to go with every `VarLayout` that is part of an entry-point varying parameter, and instead only associated the stage with the top-level parameter. That change ended up breaking the logic to emit the `flat` modifier automatically for integer type fragment-shader inputs for GLSL, but we didn't have a regression test to catch that case. This change adds a regression test to cover this case, and adds the small number of lines that were removed from `parameter-binding.cpp`. A few other test outputs had to be updated for the change (these are outputs that were changed in #815 for the same reason).
Diffstat (limited to 'source')
-rw-r--r--source/slang/parameter-binding.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/slang/parameter-binding.cpp b/source/slang/parameter-binding.cpp
index 89226cdd9..f0abfe31c 100644
--- a/source/slang/parameter-binding.cpp
+++ b/source/slang/parameter-binding.cpp
@@ -2016,6 +2016,19 @@ static RefPtr<TypeLayout> processEntryPointVaryingParameter(
EntryPointParameterState const& state,
RefPtr<VarLayout> varLayout)
{
+ // Make sure to associate a stage with every
+ // varying parameter (including sub-fields of
+ // `struct`-type parameters), since downstream
+ // code generation will need to look at the
+ // stage (possibly on individual leaf fields) to
+ // decide when to emit things like the `flat`
+ // interpolation modifier.
+ //
+ if( varLayout )
+ {
+ varLayout->stage = state.stage;
+ }
+
// The default handling of varying parameters should not apply
// to geometry shader output streams; they have their own special rules.
if( auto gsStreamType = as<HLSLStreamOutputType>(type) )