[Mesa-dev] [PATCH] glsl: Make sure that packed varyings reflect always_active_io properly.

Timothy Arceri tarceri at itsqueeze.com
Sat Jun 23 00:21:08 UTC 2018


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

On 23/06/18 06:11, Eric Anholt wrote:
> The always_active_io flag was only set according to the first variable
> that got packed in, so NIR io compaction would end up compacting XFB
> varyings that shouldn't move at that point.
> ---
> 
> This doesn't fix my XFB issues on V3D, but seems like a step in the
> right direction.  Packing always_active_io variables with
> non-always_active_io variables seems questionable to me, though.
> 
>   src/compiler/glsl/lower_packed_varyings.cpp | 9 +++++++--
>   1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp
> index 5c1eed719f26..5bd6c92ed992 100644
> --- a/src/compiler/glsl/lower_packed_varyings.cpp
> +++ b/src/compiler/glsl/lower_packed_varyings.cpp
> @@ -729,12 +729,17 @@ lower_packed_varyings_visitor::get_packed_varying_deref(
>         unpacked_var->insert_before(packed_var);
>         this->packed_varyings[slot] = packed_var;
>      } else {
> +      ir_variable *var = this->packed_varyings[slot];
> +
> +      /* The slot needs to be marked as always active if any variable that got
> +       * packed there was.
> +       */
> +      var->data.always_active_io |= unpacked_var->data.always_active_io;
> +
>         /* For geometry shader inputs, only update the packed variable name the
>          * first time we visit each component.
>          */
>         if (this->gs_input_vertices == 0 || vertex_index == 0) {
> -         ir_variable *var = this->packed_varyings[slot];
> -
>            if (var->is_name_ralloced())
>               ralloc_asprintf_append((char **) &var->name, ",%s", name);
>            else
> 


More information about the mesa-dev mailing list