[Mesa-dev] [PATCH 01/17] i965/miptree: Fix handling of uninitialized MCS buffers
Jason Ekstrand
jason at jlekstrand.net
Wed May 9 00:01:02 UTC 2018
On Tue, May 8, 2018 at 3:54 PM, Nanley Chery <nanleychery at gmail.com> wrote:
> On Tue, May 08, 2018 at 03:33:22PM -0700, Jason Ekstrand wrote:
> > On Thu, May 3, 2018 at 12:03 PM, Nanley Chery <nanleychery at gmail.com>
> wrote:
> >
> > > Before this patch, if we failed to initialize an MCS buffer, we'd
> > > end up in a state in which the miptree thinks it has an MCS buffer,
> > > but doesn't. We also leaked the clear_color_bo if it existed.
> > >
> > > With this patch, we now free the miptree aux buffer resources and let
> > > intel_miptree_alloc_mcs() know that the MCS buffer no longer exists.
> > >
> > > Cc: <mesa-stable at lists.freedesktop.org>
> > > ---
> > > src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 14 +++++++-------
> > > 1 file changed, 7 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > index b9a564552df..377efae32c9 100644
> > > --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> > > @@ -1658,7 +1658,7 @@ intel_miptree_copy_teximage(struct brw_context
> *brw,
> > > intel_obj->needs_validate = true;
> > > }
> > >
> > > -static void
> > > +static bool
> > > intel_miptree_init_mcs(struct brw_context *brw,
> > > struct intel_mipmap_tree *mt,
> > > int init_value)
> > > @@ -1678,13 +1678,14 @@ intel_miptree_init_mcs(struct brw_context *brw,
> > > void *map = brw_bo_map(brw, mt->aux_buf->bo, MAP_WRITE | MAP_RAW);
> > > if (unlikely(map == NULL)) {
> > > fprintf(stderr, "Failed to map mcs buffer into GTT\n");
> > > - brw_bo_unreference(mt->aux_buf->bo);
> > > - free(mt->aux_buf);
> > > - return;
> > > + intel_miptree_aux_buffer_free(mt->aux_buf);
> > > + mt->aux_buf = NULL;
> > > + return false;
> > > }
> > > void *data = map;
> > > memset(data, init_value, mt->aux_buf->size);
> > > brw_bo_unmap(mt->aux_buf->bo);
> > > + return true;
> > > }
> > >
> > > static struct intel_miptree_aux_buffer *
> > > @@ -1764,15 +1765,14 @@ intel_miptree_alloc_mcs(struct brw_context
> *brw,
> > > const uint32_t alloc_flags = 0;
> > > mt->aux_buf = intel_alloc_aux_buffer(brw, "mcs-miptree",
> > > &temp_mcs_surf, alloc_flags,
> mt);
> > > - if (!mt->aux_buf) {
> > > + if (!mt->aux_buf ||
> > > + !intel_miptree_init_mcs(brw, mt, 0xFF)) {
> > >
> >
> > You're leaking mt->aux_buf here.
> >
> >
>
> How?
Never mind. I can't read. Ignore me. :-)
>
> -Nanley
>
> > > free(aux_state);
> > > return false;
> > > }
> > >
> > > mt->aux_state = aux_state;
> > >
> > > - intel_miptree_init_mcs(brw, mt, 0xFF);
> > > -
> > > return true;
> > > }
> > >
> > > --
> > > 2.16.2
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> > >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180508/3498d991/attachment.html>
More information about the mesa-dev
mailing list