summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>2023-03-31 16:57:08 +0200
committerMarge Bot <emma+marge@anholt.net>2023-04-04 11:50:58 +0000
commit2b717f01f711f4326c956c72a4515871a0987742 (patch)
treee6d55d5185559a82a0585c24328b348c99da7884 /src/mesa
parent09320705f071545648b1dbda50ee37a6cd48c0bf (diff)
downloadmesa-2b717f01f711f4326c956c72a4515871a0987742.tar.gz
mesa: fix invalid index_bo refcounting
If take_index_buffer_ownership is true, then we should reserve enough references of index_bo or we'll get an underflow later. Fixes: 819627041e7 ("mesa: set pipe_draw_info::index::resource directly and remove gl_bo") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8747 Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22237>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/draw.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c
index e58e65d27cc..8349243ab41 100644
--- a/src/mesa/main/draw.c
+++ b/src/mesa/main/draw.c
@@ -2534,6 +2534,11 @@ _mesa_MultiDrawElementsIndirect(GLenum mode, GLenum type,
/* Fast path for u_threaded_context to eliminate atomics. */
info.index.resource = _mesa_get_bufferobj_reference(ctx, index_bo);
info.take_index_buffer_ownership = true;
+ /* Increase refcount so be able to use take_index_buffer_ownership with
+ * multiple draws.
+ */
+ if (primcount > 1 && info.index.resource)
+ p_atomic_add(&info.index.resource->reference.count, primcount - 1);
} else {
info.index.resource = index_bo->buffer;
}