[Mesa-dev] [PATCH 2/3] i965: Enable the PIPE_CONTROL workaround workaround out of paranoia.

Eric Anholt eric at anholt.net
Wed Jul 20 11:07:27 PDT 2011


On Tue, 19 Jul 2011 22:11:27 -0700, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 07/19/2011 03:44 PM, Eric Anholt wrote:
> > There's scary stuff going on in PIPE_CONTROL internals, and if the
> > BSpec says to do this to make PIPE_CONTROL work, I'll go ahead and do
> > it because we'll probably never be able to debug it after the fact.
> > ---
> >  src/mesa/drivers/dri/intel/intel_batchbuffer.c |   32 +++++++++++++++++++++--
> >  1 files changed, 29 insertions(+), 3 deletions(-)
> > 
> > diff --git a/src/mesa/drivers/dri/intel/intel_batchbuffer.c b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
> > index 9c97ef2..6a5f934 100644
> > --- a/src/mesa/drivers/dri/intel/intel_batchbuffer.c
> > +++ b/src/mesa/drivers/dri/intel/intel_batchbuffer.c
> > @@ -308,12 +308,30 @@ emit:
> >   * [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache Flush Enable
> >   * =1, a PIPE_CONTROL with any non-zero post-sync-op is required.
> >   *
> > - * XXX: There is also a workaround that would appear to apply to this
> > - * workaround, but it doesn't appear to be necessary so far:
> > + * And the workaround for these two requires this workaround first:
> >   *
> > - * Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
> > + * [Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
> >   * BEFORE the pipe-control with a post-sync op and no write-cache
> >   * flushes.
> > + *
> > + * And this last workaround is tricky because of the requirements on
> > + * that bit.  From section 1.4.7.2.3 "Stall" of the Sandy Bridge PRM
> > + * volume 2 part 1:
> 
> You mean 1.7.4.2.3.  For that matter, I think the earlier reference
> ("implementing two workarounds on gen6. From section 1.4.7.1") should be
> 1.7.4.1 as well.
> 
> > + *
> > + *     "1 of the following must also be set:
> > + *      - Render Target Cache Flush Enable ([12] of DW1)
> > + *      - Depth Cache Flush Enable ([0] of DW1)
> > + *      - Stall at Pixel Scoreboard ([1] of DW1)
> > + *      - Depth Stall ([13] of DW1)
> > + *      - Post-Sync Operation ([13] of DW1)
> > + *      - Notify Enable ([8] of DW1)"
> > + *
> > + * The cache flushes require the workaround flush that triggered this
> > + * one, so we can't use it.  Post-sync nonzero is what triggered this
> > + * workaround, so we can't use that one either.  Notify enable is
> > + * IRQs, which aren't really our business.  That leaves depth stall or
> > + * stall at scoreboard.  It shouldn't matter which we choose because
> > + * we're supposed to be stalling the entire pipeline anyway.
> 
> It seems like depth stall should be eliminated, too.  Workaround 1:
> "Before any depth stall flush [...] send a PIPE_CONTROL with no bits set
> except Post-Sync Operation != 0".  So we'd have to do that.  But then we
> hit Workaround 3 again---this very text says we need a CS stall...with
> depth or scoreboard stall.  If a depth stall...refer to rule 1.
> Repeat...infinitely.
> 
> Perhaps I'm misreading...or it doesn't apply since we don't care about
> the effects of the depth stall (we're just required to set the bit).
> 
> Anyway, it seems like Stall at Pixel Scoreboard might be the safer bet, no?

Agreed!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20110720/cbe055db/attachment.pgp>


More information about the mesa-dev mailing list