[Mesa-dev] [PATCH] glsl/linker: Fix out variables linking during single stage

Timothy Arceri tarceri at itsqueeze.com
Fri Oct 26 22:21:54 UTC 2018


On Wed, Oct 24, 2018, at 3:28 AM, Vadym Shovkoplias wrote:
> Since out variables are copied from shader objects instruction
> streams to linked shader instruction steam it should be cloned
> at first to keep source instruction steam unaltered.
> 
> Fixes: 966a797e433 glsl/linker: Link all out vars from a shader
> objects on a single stage
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105731
> Signed-off-by: Vadym Shovkoplias <vadym.shovkoplias at globallogic.com>

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

Also please either update the existing piglit or add a new one to better cover the use of the freed vars. From the bug report it seems adding another out var is enough to do it. Thanks.

> ---
>  src/compiler/glsl/linker.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
> index 7db34ebf95..8b1b03322a 100644
> --- a/src/compiler/glsl/linker.cpp
> +++ b/src/compiler/glsl/linker.cpp
> @@ -2269,10 +2269,11 @@ link_output_variables(struct gl_linked_shader 
> *linked_shader,
>           if (ir->ir_type != ir_type_variable)
>              continue;
>  
> -         ir_variable *const var = (ir_variable *) ir;
> +         ir_variable *var = (ir_variable *) ir;
>  
>           if (var->data.mode == ir_var_shader_out &&
>                 !symbols->get_variable(var->name)) {
> +            var = var->clone(linked_shader, NULL);
>              symbols->add_variable(var);
>              linked_shader->ir->push_head(var);
>           }
> -- 
> 2.18.0
> 


More information about the mesa-dev mailing list