[Mesa-dev] [PATCH v2] glsl: mark explicit uniforms as explicit in other stages too
Timothy Arceri
timothy.arceri at collabora.com
Thu Jan 14 04:34:49 PST 2016
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 <tapani.palli at intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>
> ---
> 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
More information about the mesa-dev
mailing list