Mesa (master): swrast: take ownership rather than adding reference for new renderbuffers
Timothy Arceri
tarceri at kemper.freedesktop.org
Mon Apr 10 01:06:09 UTC 2017
Module: Mesa
Branch: master
Commit: e6d6266e6f8c01f600be06b8e89f83fa7e1a1caa
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e6d6266e6f8c01f600be06b8e89f83fa7e1a1caa
Author: Timothy Arceri <tarceri at itsqueeze.com>
Date: Sat Apr 8 10:35:57 2017 +1000
swrast: take ownership rather than adding reference for new renderbuffers
This avoids locking in the reference calls and fixes a leak after the
RefCount initialisation was change from 0 to 1.
Fixes: 32141e53d1520 (mesa: tidy up renderbuffer RefCount initialisation)
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
---
src/mesa/drivers/dri/swrast/swrast.c | 6 ++++--
src/mesa/swrast/s_renderbuffer.c | 17 ++++++-----------
2 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c
index 0402232deb..f43ac608cf 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -569,12 +569,14 @@ dri_create_buffer(__DRIscreen * sPriv,
/* add front renderbuffer */
frontrb = swrast_new_renderbuffer(visual, dPriv, GL_TRUE);
- _mesa_add_renderbuffer(fb, BUFFER_FRONT_LEFT, &frontrb->Base.Base);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_FRONT_LEFT,
+ &frontrb->Base.Base);
/* add back renderbuffer */
if (visual->doubleBufferMode) {
backrb = swrast_new_renderbuffer(visual, dPriv, GL_FALSE);
- _mesa_add_renderbuffer(fb, BUFFER_BACK_LEFT, &backrb->Base.Base);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_BACK_LEFT,
+ &backrb->Base.Base);
}
/* add software renderbuffers */
diff --git a/src/mesa/swrast/s_renderbuffer.c b/src/mesa/swrast/s_renderbuffer.c
index af09955484..940c7b710c 100644
--- a/src/mesa/swrast/s_renderbuffer.c
+++ b/src/mesa/swrast/s_renderbuffer.c
@@ -271,15 +271,10 @@ add_color_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
return GL_FALSE;
}
- /* Set refcount to 0 to avoid a leak since the _mesa_add_renderbuffer()
- * call below will bump the initial refcount.
- */
- rb->RefCount = 0;
-
rb->InternalFormat = GL_RGBA;
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, b, rb);
+ _mesa_add_renderbuffer_without_ref(fb, b, rb);
}
return GL_TRUE;
@@ -325,7 +320,7 @@ add_depth_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
}
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_DEPTH, rb);
return GL_TRUE;
}
@@ -363,7 +358,7 @@ add_stencil_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
rb->InternalFormat = GL_STENCIL_INDEX8;
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, BUFFER_STENCIL, rb);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_STENCIL, rb);
return GL_TRUE;
}
@@ -387,7 +382,7 @@ add_depth_stencil_renderbuffer(struct gl_context *ctx,
rb->InternalFormat = GL_DEPTH_STENCIL;
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, BUFFER_DEPTH, rb);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_DEPTH, rb);
_mesa_add_renderbuffer(fb, BUFFER_STENCIL, rb);
return GL_TRUE;
@@ -425,7 +420,7 @@ add_accum_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
rb->InternalFormat = GL_RGBA16_SNORM;
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, BUFFER_ACCUM, rb);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_ACCUM, rb);
return GL_TRUE;
}
@@ -470,7 +465,7 @@ add_aux_renderbuffers(struct gl_context *ctx, struct gl_framebuffer *fb,
rb->InternalFormat = GL_RGBA;
rb->AllocStorage = soft_renderbuffer_storage;
- _mesa_add_renderbuffer(fb, BUFFER_AUX0 + i, rb);
+ _mesa_add_renderbuffer_without_ref(fb, BUFFER_AUX0 + i, rb);
}
return GL_TRUE;
}
More information about the mesa-commit
mailing list