On Thu, 2016-01-14 at 14:15 +0200, Tapani Pälli wrote: > If shader declares uniform explicit location in one stage but > implicit in another, explicit location should be used. Patch marks > implicit uniforms as explicit if they were explicit in previous > stage. > This makes sure that we don't treat them implicit later when > assigning > locations. > > Fixes following CTS test: > ES31-CTS.explicit_uniform_location.uniform-loc-implicit-in-some > -stages3 > > v2: move check to cross_validate_globals (Timothy) > > Signed-off-by: Tapani Pälli <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]> > --- > src/glsl/linker.cpp | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp > index 564c471..3f40c0b 100644 > --- a/src/glsl/linker.cpp > +++ b/src/glsl/linker.cpp > @@ -992,7 +992,17 @@ cross_validate_globals(struct gl_shader_program > *prog, > > existing->data.location = var->data.location; > existing->data.explicit_location = true; > - } > + } else { > + /* Check if uniform with implicit location was marked > explicit > + * by earlier shader stage. If so, mark it explicit > in this stage > + * too to make sure later processing does not treat > it as > + * implicit one. > + */ > + if (existing->data.explicit_location) { > + var->data.location = existing->data.location; > + var->data.explicit_location = true; > + } > + } > > /* From the GLSL 4.20 specification: > * "A link error will result if two compilation units in > a program _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
