[Mesa-dev] [v2 03/19] i965: Don't try to create aux buffer for non-msrt aux-buffer

Ben Widawsky ben at bwidawsk.net
Fri Feb 12 18:00:57 UTC 2016


On Fri, Feb 12, 2016 at 09:24:42AM +0200, Pohjolainen, Topi wrote:
> On Thu, Feb 11, 2016 at 01:41:47PM -0800, Ben Widawsky wrote:
> > On Thu, Feb 11, 2016 at 08:33:56PM +0200, Topi Pohjolainen wrote:
> > > In addition to simply calling miptree_create() the higher level
> > > call intel_miptree_create() also considers if the buffer should
> > > be associated with an auxiliary buffer based on the given format.
> > > 
> > > Here we are allocating an auxiliary buffer which in turn has such
> > > format that would mislead intel_miptree_create_layout() later on
> > > to try to associate the auxiliary buffer with an auxiliary buffer.
> > > To prevent this the actual buffer creation logic was split out
> > > into its own function. Lets invoke that instead.
> > > 
> > > v2 (Ben): Do not signal msaa layout with explicit argument but
> > >           using layout_flags instead.
> > > 
> > > Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> > > ---
> > >  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 20 ++++++++++----------
> > >  1 file changed, 10 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > index e8b3116..e1cf15b 100644
> > > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > @@ -1541,16 +1541,16 @@ intel_miptree_alloc_non_msrt_mcs(struct brw_context *brw,
> > >     if (brw->gen >= 8) {
> > >        layout_flags |= MIPTREE_LAYOUT_FORCE_HALIGN16;
> > >     }
> > > -   mt->mcs_mt = intel_miptree_create(brw,
> > > -                                     mt->target,
> > > -                                     format,
> > > -                                     mt->first_level,
> > > -                                     mt->last_level,
> > > -                                     mcs_width,
> > > -                                     mcs_height,
> > > -                                     mt->logical_depth0,
> > > -                                     0 /* num_samples */,
> > > -                                     layout_flags);
> > > +   mt->mcs_mt = miptree_create(brw,
> > > +                               mt->target,
> > > +                               format,
> > > +                               mt->first_level,
> > > +                               mt->last_level,
> > > +                               mcs_width,
> > > +                               mcs_height,
> > > +                               mt->logical_depth0,
> > > +                               0 /* num_samples */,
> > > +                               layout_flags);
> > >  
> > >     return mt->mcs_mt;
> > >  }
> > 
> > Perhaps I am missing something here, but don't you need to have
> > mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_RESOLVED; ?
> 
> You are correct that it gets dropped - but it gets dropped for auxiliary
> miptree where it doesn't make any difference. Fast clear is tracked in the
> parent miptree and it's fast_clear_state is set as before. I toyed earlier
> with the idea of having "lighter, needed members only" data type for
> auxiliary buffers but didn't pursue that after all.

Sounds like you thought it through, and tested it :-)
Reviewed-by: Ben Widawsky <benjamin.widawsky at intel.com>


More information about the mesa-dev mailing list