[Mesa-dev] [PATCH] i965: Prefer Meta over the BLT for BlitFramebuffer.

Kenneth Graunke kenneth at whitecape.org
Thu Jan 15 11:30:44 PST 2015


On Thursday, January 15, 2015 07:09:40 AM Jason Ekstrand wrote:
> On Jan 15, 2015 1:49 AM, "Kenneth Graunke" <kenneth at whitecape.org> wrote:
> >
> > On Thursday, January 15, 2015 01:41:14 AM Kenneth Graunke wrote:
> > > There's some debate about whether we should use Meta or BLORP,
> > > but either should run circles around the BLT engine.
> > >
> > > Improves performance in "copypixrate -blit -back" (from Mesa demos)
> > > by 232.037% +/- 3.15795% (n=10) on Broadwell GT3e.
> > >
> > > Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> > > ---
> > >  src/mesa/drivers/dri/i965/intel_fbo.c | 14 +++++++-------
> > >  1 file changed, 7 insertions(+), 7 deletions(-)
> > >
> > > Ben: this might be a good candidate for your braswell branch.
> > >
> > > Jason: I bet this will affect your PBO upload path.  I suspect it may
> > > make it a lot faster on Gen8+, as you might've been getting the BLT
> > > engine when trying to use BlitFramebuffer.  I haven't tested.
> > >
> > > diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c
> b/src/mesa/drivers/dri/i965/intel_fbo.c
> > > index 37ac613f..b54c11d 100644
> > > --- a/src/mesa/drivers/dri/i965/intel_fbo.c
> > > +++ b/src/mesa/drivers/dri/i965/intel_fbo.c
> > > @@ -882,6 +882,13 @@ intel_blit_framebuffer(struct gl_context *ctx,
> > >     if (mask == 0x0)
> > >        return;
> > >
> > > +   mask = _mesa_meta_BlitFramebuffer(ctx,
> > > +                                     srcX0, srcY0, srcX1, srcY1,
> > > +                                     dstX0, dstY0, dstX1, dstY1,
> > > +                                     mask, filter);
> > > +   if (mask == 0x0)
> > > +      return;
> > > +
> > >     if (brw->gen >= 8 && (mask & GL_STENCIL_BUFFER_BIT)) {
> > >        brw_meta_fbo_stencil_blit(brw_context(ctx),
> > >                                  srcX0, srcY0, srcX1, srcY1,
> > > @@ -899,13 +906,6 @@ intel_blit_framebuffer(struct gl_context *ctx,
> > >     if (mask == 0x0)
> > >        return;
> > >
> > > -   mask = _mesa_meta_BlitFramebuffer(ctx,
> > > -                                     srcX0, srcY0, srcX1, srcY1,
> > > -                                     dstX0, dstY0, dstX1, dstY1,
> > > -                                     mask, filter);
> > > -   if (mask == 0x0)
> > > -      return;
> > > -
> > >     _swrast_BlitFramebuffer(ctx,
> > >                             srcX0, srcY0, srcX1, srcY1,
> > >                             dstX0, dstY0, dstX1, dstY1,
> > >
> >
> > Just realized there isn't enough context for this patch to make any sense.
> > It changes the ordering to:
> >
> > 1. BLORP
> > 2. Meta
> > 3. Gen8 Stencil Blit (special case)
> > 4. BLT
> > 5. Software
> >
> > Previously, the order was:
> >
> > 1. BLORP
> > 2. Gen8 Stencil Blit (special case)
> > 3. Meta
> > 4. BLT
> > 5. Software
> 
> Those lists don't seem to match the patch. The patch moves meta up a ways.
> In the lists it looks like you just swap meta and stencil which, as you
> mentioned, does nothing.
> 
> Also, it won't affect the speed of my PBO code as it calls meta
> explicitly.  That could change and doing so might make it faster on older
> gens where we have blorp, but I'm not sure.
> --Jason

Ah, I thought you were just calling BlitFramebuffer.  Cool.

You're right, I misspoke.  What I meant was:

Old: BLORP, G8Stencil, BLT, Meta, Software
New: BLORP, Meta, G8Stencil, BLT, Software

Historically, _mesa_meta_BlitFramebuffer had to be at the bottom of the list
because it couldn't handle most things, and automaticaly fell back to swrast
for us.  See 54540ea691e926b36a81a9b1e27b8f035995d07d.

--Ken
-------------- 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/20150115/97299132/attachment-0001.sig>


More information about the mesa-dev mailing list