[Mesa-dev] [PATCH 1/2] glsl: Fix varying struct locations when varying packing is disabled.

Timothy Arceri t_arceri at yahoo.com.au
Wed Dec 30 15:18:36 PST 2015


On Wed, 2015-12-30 at 08:49 -0500, Ilia Mirkin wrote:
> On Wed, Dec 30, 2015 at 6:26 AM, Kenneth Graunke <
> kenneth at whitecape.org> wrote:
> > varying_matches::record tries to compute the number of components
> > in
> > each varying, which varying_matches::assign_locations uses to
> > assign
> > locations.  With varying packing, it uses
> > glsl_type::component_slots()
> > to come up with a reasonable value.
> > 
> > Without varying packing, it fell back to an open-coded computation
> > that didn't bother to handle structs at all.  I believe we can
> > simply
> > use 4 * glsl_type::count_attribute_slots(false), which already
> > handles
> > these cases correctly.
> > 
> > Partially fixes rendering in GFXBench 4.0's tessellation benchmark.
> > (NVE0 is almost right after this, but i965 is still mostly
> > garbage.)
> > 
> > Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> > Cc: mesa-stable at lists.freedesktop.org
> > Cc: Timothy Arceri <timothy.arceri at collabora.com>
> > Cc: Ilia Mirkin <imirkin at alum.mit.edu>
> 
> That seems right... but 11.0/11.1 didn't have the
> count_attribute_slots(true/false) thing -- only true :(
> 
> I'd be fine with nominating commit 5dc22cadb for 11.0/11.1 stable
> though and then including this patch as well. Either way, this one is

Yeah I'd like to see that change in at least 11.1 too so I could
nominate this varying packing fix:

http://patchwork.freedesktop.org/patch/69126/
http://patchwork.freedesktop.org/patch/69127/


Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>

> 
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
> 
> > ---
> >  src/glsl/link_varyings.cpp | 15 ++-------------
> >  1 file changed, 2 insertions(+), 13 deletions(-)
> > 
> > diff --git a/src/glsl/link_varyings.cpp
> > b/src/glsl/link_varyings.cpp
> > index 9cc77fe..1ff25b8 100644
> > --- a/src/glsl/link_varyings.cpp
> > +++ b/src/glsl/link_varyings.cpp
> > @@ -959,19 +959,8 @@ varying_matches::record(ir_variable
> > *producer_var, ir_variable *consumer_var)
> >           type = type->fields.array;
> >        }
> > 
> > -      if (type->is_array()) {
> > -         slots = 1;
> > -         while (type->is_array()) {
> > -            slots *= type->length;
> > -            type = type->fields.array;
> > -         }
> > -         slots *= type->matrix_columns;
> > -      } else {
> > -         slots = type->matrix_columns;
> > -      }
> > -      if (type->without_array()->is_dual_slot_double())
> > -         slots *= 2;
> > -      this->matches[this->num_matches].num_components = 4 * slots;
> > +      slots = type->count_attribute_slots(false);
> > +      this->matches[this->num_matches].num_components = slots * 4;
> >     } else {
> >        this->matches[this->num_matches].num_components
> >           = var->type->component_slots();
> > --
> > 2.6.4
> > 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list