summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2018-04-25 09:47:40 -0700
committerDylan Baker <dylan@pnwbakers.com>2018-04-26 10:47:26 -0700
commit192ced78f07c79032ec69b8ef2f70769f71543c2 (patch)
tree8ebca746afca49e6cc2f49dc1fa063bbd27f6a9e
parent0d7426ab2c76d911a77b8d2f26454fb6a758b92a (diff)
gallium/util: Fix incorrect refcounting of separate stencil.
The driver may have a reference on the separate stencil buffer for some reason (like an unflushed job using it), so we can't directly free the resource and should instead just decrement the refcount that we own. Fixes double-free in KHR-GLES3.packed_depth_stencil.blit.depth32f_stencil8 on vc5. Fixes: e94eb5e6000e ("gallium/util: add u_transfer_helper") Reviewed-by: Rob Clark <robdclark@gmail.com> (cherry picked from commit 069c409f434ab215940aad2092d5d236b410a7b9)
-rw-r--r--src/gallium/auxiliary/util/u_transfer_helper.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/util/u_transfer_helper.c b/src/gallium/auxiliary/util/u_transfer_helper.c
index dd31049920..3b085fd99f 100644
--- a/src/gallium/auxiliary/util/u_transfer_helper.c
+++ b/src/gallium/auxiliary/util/u_transfer_helper.c
@@ -138,8 +138,7 @@ u_transfer_helper_resource_destroy(struct pipe_screen *pscreen,
if (helper->vtbl->get_stencil) {
struct pipe_resource *stencil = helper->vtbl->get_stencil(prsc);
- if (stencil)
- helper->vtbl->resource_destroy(pscreen, stencil);
+ pipe_resource_reference(&stencil, NULL);
}
helper->vtbl->resource_destroy(pscreen, prsc);