[Mesa-dev] [PATCH] st/mesa: Reduce array updates due to current changes.

Mathias Fröhlich Mathias.Froehlich at gmx.net
Tue Feb 26 05:17:51 UTC 2019


Hi,

Thanks, Brian and Marek for the review!

best
Mathias

On Monday, 25 February 2019 22:44:37 CET Marek Olšák wrote:
> Reviewed-by: Marek Olšák <marek.olsak at amd.com>
> 
> Marek
> 
> On Sun, Feb 24, 2019 at 1:46 AM <Mathias.Froehlich at gmx.net> wrote:
> 
> > From: Mathias Fröhlich <mathias.froehlich at web.de>
> >
> > Hi Brian,
> >
> > Following a small optimization in the gallium state tracker to
> > avoid flagging ST_NEW_VERTEX_ARRAYS a bit more often:
> >
> > please review!
> >
> > best
> >
> > Mathias
> >
> >
> >
> >
> > Since using bitmasks we can easily check if we have any
> > current value that is potentially uploaded on array setup.
> > So check for any potential vertex program input that is not
> > already a vao enabled array. Only flag array update if there is
> > a potential overlap.
> >
> > Signed-off-by: Mathias Fröhlich <Mathias.Froehlich at web.de>
> > ---
> >  src/mesa/state_tracker/st_context.c | 2 +-
> >  src/mesa/state_tracker/st_context.h | 9 +++++++++
> >  2 files changed, 10 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/state_tracker/st_context.c
> > b/src/mesa/state_tracker/st_context.c
> > index 0a0bd8ba1ca..45451531df9 100644
> > --- a/src/mesa/state_tracker/st_context.c
> > +++ b/src/mesa/state_tracker/st_context.c
> > @@ -224,7 +224,7 @@ st_invalidate_state(struct gl_context *ctx)
> >     if (new_state & _NEW_PIXEL)
> >        st->dirty |= ST_NEW_PIXEL_TRANSFER;
> >
> > -   if (new_state & _NEW_CURRENT_ATTRIB)
> > +   if (new_state & _NEW_CURRENT_ATTRIB && st_vp_uses_current_values(ctx))
> >        st->dirty |= ST_NEW_VERTEX_ARRAYS;
> >
> >     /* Update the vertex shader if ctx->Light._ClampVertexColor was
> > changed. */
> > diff --git a/src/mesa/state_tracker/st_context.h
> > b/src/mesa/state_tracker/st_context.h
> > index ed69e3d4873..324a7f24178 100644
> > --- a/src/mesa/state_tracker/st_context.h
> > +++ b/src/mesa/state_tracker/st_context.h
> > @@ -28,6 +28,7 @@
> >  #ifndef ST_CONTEXT_H
> >  #define ST_CONTEXT_H
> >
> > +#include "main/arrayobj.h"
> >  #include "main/mtypes.h"
> >  #include "state_tracker/st_api.h"
> >  #include "main/fbobject.h"
> > @@ -398,6 +399,14 @@ st_user_clip_planes_enabled(struct gl_context *ctx)
> >            ctx->Transform.ClipPlanesEnabled;
> >  }
> >
> > +
> > +static inline bool
> > +st_vp_uses_current_values(const struct gl_context *ctx)
> > +{
> > +   const uint64_t inputs = ctx->VertexProgram._Current->info.inputs_read;
> > +   return _mesa_draw_current_bits(ctx) & inputs;
> > +}
> > +
> >  /** clear-alloc a struct-sized object, with casting */
> >  #define ST_CALLOC_STRUCT(T)   (struct T *) calloc(1, sizeof(struct T))
> >
> > --
> > 2.20.1
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev






More information about the mesa-dev mailing list