[Mesa-dev] [PATCH v2] i965: Disable auxiliary buffers when there are self-dependencies.

Kenneth Graunke kenneth at whitecape.org
Sat Oct 7 18:42:34 UTC 2017


On Saturday, October 7, 2017 8:03:54 AM PDT Jason Ekstrand wrote:
> On October 6, 2017 10:25:55 PM Kenneth Graunke <kenneth at whitecape.org> wrote:
> 
> > On Friday, October 6, 2017 8:09:33 PM PDT Jason Ekstrand wrote:
> >> On October 6, 2017 8:00:04 PM Kenneth Graunke <kenneth at whitecape.org> wrote:
> >> > diff --git a/src/mesa/drivers/dri/i965/brw_draw.c
> >> > b/src/mesa/drivers/dri/i965/brw_draw.c
> >> > index c7ed7284501..fcb194dbe86 100644
> >> > --- a/src/mesa/drivers/dri/i965/brw_draw.c
> >> > +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> >> > @@ -336,21 +336,39 @@ brw_merge_inputs(struct brw_context *brw,
> >> >     }
> >> >  }
> >> >
> >> > +/* Disable auxiliary buffers if a renderbuffer is also bound as a texture
> >> > + * or shader image.  This causes a self-dependency, where both rendering
> >> > + * and sampling may concurrently read or write the CCS buffer, causing
> >> > + * incorrect pixels.
> >> > + *
> >> > + * We don't support sampling from CCS_D, so this only matters for CCS_E.
> >> > + */
> >> >  static bool
> >> > -intel_disable_rb_aux_buffer(struct brw_context *brw, const struct brw_bo 
> >> *bo)
> >> > +intel_disable_rb_aux_buffer(struct brw_context *brw,
> >> > +                            struct intel_mipmap_tree *tex_mt,
> >> > +                            const char *usage)
> >> >  {
> >> >     const struct gl_framebuffer *fb = brw->ctx.DrawBuffer;
> >> >     bool found = false;
> >> >
> >> > +   /* Nothing to disable, don't bother looking */
> >> > +   if (tex_mt->aux_usage != ISL_AUX_USAGE_CCS_E)
> >> > +      return false;
> >>
> >> As I mentioned in the office today, I'm not convinced this is actually
> >> needed.  When it isn't CCS_E, we'll resolve anyway so passing disable_aux =
> >> true won't hurt anything.
> >
> > Yeah, that's true - but I figured we could avoid the overhead of the
> > loop in other cases, since it doesn't really matter either way.
> >
> > Make sense?  Should we leave it?  Or would you rather drop it?
> 
> Leave it in but for a completely different reason than the one you stated. 
> :-)  I don't care all that much about trying to avoid a loop whose number 
> of iterations was bounded above by 8.

Well, it is nested inside a loop bounded by 32... :)

> If the have a multisampled self dependency, it should work fine because 
> compression is limited to a single pixel and we dispatch all the samples 
> for a given pixel together.

Probably not for 16x MSAA and SIMD8 shaders, but...it's probably really
uncommon...

> We shouldn't force a resolve so we don't want 
> to do this of its MCS.  In the case of CCS_D, I'm not sure if it's safe.  
> We will potentially try to sample from a CCS_D image as CCS_E on gen9+ so 
> it's probably best to disable it for that too.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171007/10329d4c/attachment.sig>


More information about the mesa-dev mailing list