[Mesa-dev] [PATCH 2/6] i965/vec4: Move perf_debug about register spilling into the visitor.

Kenneth Graunke kenneth at whitecape.org
Fri Jul 3 09:30:41 PDT 2015


On Friday, July 03, 2015 11:11:45 AM Pohjolainen, Topi wrote:
> On Wed, Jul 01, 2015 at 03:03:32PM -0700, Kenneth Graunke wrote:
> > This patch makes us only issue the performance warning about register
> > spilling if we actually spilled registers.  We also use scratch space
> > for indirect addressing and the like.
> > 
> > This is basically commit c51163b0cf7aff0375b1a5ea4cb3da9d9e164044 for
> > the vec4 backend.
> > 
> > Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> > ---
> >  src/mesa/drivers/dri/i965/brw_gs.c     |  4 ----
> >  src/mesa/drivers/dri/i965/brw_vec4.cpp | 16 +++++++++++++---
> >  src/mesa/drivers/dri/i965/brw_vs.c     |  4 ----
> >  3 files changed, 13 insertions(+), 11 deletions(-)
> > 
> > diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c
> > index 52c7303..7f947e0 100644
> > --- a/src/mesa/drivers/dri/i965/brw_gs.c
> > +++ b/src/mesa/drivers/dri/i965/brw_gs.c
> > @@ -268,10 +268,6 @@ brw_codegen_gs_prog(struct brw_context *brw,
> >  
> >     /* Scratch space is used for register spilling */
> >     if (c.base.last_scratch) {
> > -      perf_debug("Geometry shader triggered register spilling.  "
> > -                 "Try reducing the number of live vec4 values to "
> > -                 "improve performance.\n");
> > -
> >        c.prog_data.base.base.total_scratch
> >           = brw_get_scratch_size(c.base.last_scratch*REG_SIZE);
> >  
> > diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> > index 2a56564..60f73e2 100644
> > --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> > +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> > @@ -1827,9 +1827,19 @@ vec4_visitor::run(gl_clip_plane *clip_planes)
> >        }
> >     }
> >  
> > -   while (!reg_allocate()) {
> > -      if (failed)
> > -         return false;
> > +   bool allocated_without_spills = reg_allocate();
> > +
> > +   if (!allocated_without_spills) {
> > +      compiler->shader_perf_log(log_data,
> > +                                "%s shader triggered register spilling.  "
> > +                                "Try reducing the number of live vec4 values "
> > +                                "to improve performance.\n",
> > +                                stage_name);
> > +
> > +      while (!reg_allocate()) {
> 
> I tried to understand a little how repeating calls to reg_allocate() differ
> from previous in result wise. I didn't really get it but that doesn't really
> prevent me from reviewing this patch. This patch preserves the logic while
> corresponding to the intent in commit message.

The interface is indeed weird.  reg_allocate() may fail to allocate
without spilling, at which point it will spill a register, and return
false.  The caller is expected to call it again to retry.

I don't know why it doesn't just do that itself.

> Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> 
> > +         if (failed)
> > +            return false;
> > +      }
> >     }
> >  
> >     opt_schedule_instructions();
> > diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
> > index 6e9848f..edbcbcf 100644
> > --- a/src/mesa/drivers/dri/i965/brw_vs.c
> > +++ b/src/mesa/drivers/dri/i965/brw_vs.c
> > @@ -196,10 +196,6 @@ brw_codegen_vs_prog(struct brw_context *brw,
> >  
> >     /* Scratch space is used for register spilling */
> >     if (c.base.last_scratch) {
> > -      perf_debug("Vertex shader triggered register spilling.  "
> > -                 "Try reducing the number of live vec4 values to "
> > -                 "improve performance.\n");
> > -
> >        prog_data.base.base.total_scratch
> >           = brw_get_scratch_size(c.base.last_scratch*REG_SIZE);
> >  
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150703/15655b62/attachment.sig>


More information about the mesa-dev mailing list