[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