[Mesa-dev] [PATCH v2 05/11] nir: Add a structure splitting pass

Jason Ekstrand jason at jlekstrand.net
Wed Aug 22 15:21:05 UTC 2018


On Mon, Aug 20, 2018 at 6:41 PM Caio Marcelo de Oliveira Filho <
caio.oliveira at intel.com> wrote:

> On Sat, Jul 28, 2018 at 10:44:36PM -0700, Jason Ekstrand wrote:
> > This pass doesn't really do much now because nir_lower_vars_to_ssa can
> > already see through structures and considers them to be "split".  This
> > pass exists to help other passes more easily see through structure
> > variables.  If a back-end does implement arrays using scratch or
> > indirects on registers, having more smaller arrays is likely to have
> > better memory efficiency.
> > ---
> >  src/compiler/Makefile.sources     |   1 +
> >  src/compiler/nir/meson.build      |   1 +
> >  src/compiler/nir/nir.h            |   1 +
> >  src/compiler/nir/nir_split_vars.c | 271 ++++++++++++++++++++++++++++++
> >  4 files changed, 274 insertions(+)
> >  create mode 100644 src/compiler/nir/nir_split_vars.c
>
> With the fix below, this patch is
>
> Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
>
>
> > +static void
> > +init_field_for_type(struct field *field, struct field *parent,
> > +                    const struct glsl_type *type,
> > +                    const char *name,
> > +                    struct split_var_state *state)
> > +{
> > +   *field = (struct field) {
> > +      .parent = parent,
> > +      .type = type,
> > +   };
> > +
> > +   const struct glsl_type *struct_type = glsl_without_array(type);
> > +   if (glsl_type_is_struct(struct_type)) {
> > +      field->num_fields = glsl_get_length(struct_type),
> > +      field->fields = ralloc_array(state->mem_ctx, struct field,
> > +                                   field->num_fields);
> > +      for (unsigned i = 0; i < field->num_fields; i++) {
> > +         char *field_name = NULL;
> > +         if (name) {
> > +            ralloc_asprintf(state->mem_ctx, "%s_%s", name,
> > +                            glsl_get_struct_elem_name(struct_type, i));
>
> Store the result of asprintf:
>
>     field_name = ralloc_asprintf(...);
>

Fixed.


> And from previous review:
>
>     Maybe if no name for the parent is available, use something in
>     this place ("unnamed", or whatever).  That way the rest of the
>     hierarchy doesn't lose the meaning completely.
>

I've made it name the variable "{unnamed $type}" where $type is the name of
the structure type.

--Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180822/e7a14f1f/attachment.html>


More information about the mesa-dev mailing list