[Mesa-dev] [PATCH 9/9] mesa/st: take ownership rather than adding reference for new renderbuffers
Emil Velikov
emil.l.velikov at gmail.com
Sat Apr 8 18:48:25 UTC 2017
On 8 April 2017 at 02:04, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> 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)
> ---
> src/mesa/state_tracker/st_manager.c | 21 ++++++++++++++++-----
> 1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
> index f469ebd..48daab6 100644
> --- a/src/mesa/state_tracker/st_manager.c
> +++ b/src/mesa/state_tracker/st_manager.c
> @@ -305,27 +305,38 @@ st_framebuffer_add_renderbuffer(struct st_framebuffer *stfb,
> }
>
> if (format == PIPE_FORMAT_NONE)
> return FALSE;
>
> rb = st_new_renderbuffer_fb(format, stfb->iface->visual->samples, sw);
> if (!rb)
> return FALSE;
>
> if (idx != BUFFER_DEPTH) {
> - _mesa_add_renderbuffer(&stfb->Base, idx, rb);
> + _mesa_add_renderbuffer_without_ref(&stfb->Base, idx, rb);
> }
> else {
> - if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0))
> - _mesa_add_renderbuffer(&stfb->Base, BUFFER_DEPTH, rb);
> - if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1))
> - _mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL, rb);
> + bool rb_ownership_taken = false;
> + if (util_format_get_component_bits(format,
> + UTIL_FORMAT_COLORSPACE_ZS, 0)) {
> + _mesa_add_renderbuffer_without_ref(&stfb->Base, BUFFER_DEPTH, rb);
> + rb_ownership_taken = true;
> + }
> + if (util_format_get_component_bits(format,
> + UTIL_FORMAT_COLORSPACE_ZS, 1)) {
> + if (rb_ownership_taken)
> + _mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL, rb);
> + else {
> + _mesa_add_renderbuffer_without_ref(&stfb->Base, BUFFER_STENCIL,
> + rb);
> + }
> + }
> }
>
Nitpick: return early for idx != BUFFER_DEPTH and re-indent the rest
to make it easier on the eyes.
if (idx != BUFFER_DEPTH) {
_mesa_add_renderbuffer_without_ref(&stfb->Base, idx, rb);
return TRUE;
}
bool rb_ownership_taken = false;
if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0)) {
_mesa_add_renderbuffer_without_ref(&stfb->Base, BUFFER_DEPTH, rb);
rb_ownership_taken = true;
}
if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1)) {
if (rb_ownership_taken)
_mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL, rb);
else
_mesa_add_renderbuffer_without_ref(&stfb->Base, BUFFER_STENCIL, rb);
}
For the series (ideally with the nitpick, but meh)
Reviewed-by; Emil Velikov <emil.velikov at collabora.com>
-Emil
More information about the mesa-dev
mailing list