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.pa...@intel.com>


Reviewed-by: Timothy Arceri <timothy.arc...@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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to