summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker/st_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/state_tracker/st_manager.c')
-rw-r--r--src/mesa/state_tracker/st_manager.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c
index f469ebd3a0d..a91dc76d226 100644
--- a/src/mesa/state_tracker/st_manager.c
+++ b/src/mesa/state_tracker/st_manager.c
@@ -312,13 +312,21 @@ st_framebuffer_add_renderbuffer(struct st_framebuffer *stfb,
return FALSE;
if (idx != BUFFER_DEPTH) {
- _mesa_add_renderbuffer(&stfb->Base, idx, rb);
+ _mesa_add_renderbuffer_without_ref(&stfb->Base, idx, rb);
+ return TRUE;
}
- 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))
+
+ 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);
}
return TRUE;