From 45b6aa1eb7ce0b3845567be7ee4349ab55f30043 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 20 Aug 2025 11:45:06 -0400 Subject: [PATCH] glthread: mark internal bufferobjs for the ctx they belong to MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this avoids unlimited unnecessary atomics Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/glthread_bufferobj.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mesa/main/glthread_bufferobj.c b/src/mesa/main/glthread_bufferobj.c index c25ee8e6738..7d4b15cb216 100644 --- a/src/mesa/main/glthread_bufferobj.c +++ b/src/mesa/main/glthread_bufferobj.c @@ -25,6 +25,8 @@ #include "dispatch.h" #include "main/bufferobj.h" +#define PRIVATE_REFCOUNT 1000000 + /** * Create an upload buffer. This is called from the app thread, so everything * has to be thread-safe in the driver. @@ -72,6 +74,11 @@ _mesa_glthread_release_upload_buffer(struct gl_context *ctx) -glthread->upload_buffer_private_refcount); glthread->upload_buffer_private_refcount = 0; } + if (glthread->upload_buffer) { + glthread->upload_buffer->Ctx = NULL; + p_atomic_add(&glthread->upload_buffer->RefCount, + -(PRIVATE_REFCOUNT - glthread->upload_buffer->CtxRefCount)); + } _mesa_reference_buffer_object(ctx, &glthread->upload_buffer, NULL); } @@ -142,6 +149,8 @@ _mesa_glthread_upload(struct gl_context *ctx, const void *data, */ glthread->upload_buffer->RefCount += default_size; glthread->upload_buffer_private_refcount = default_size; + glthread->upload_buffer->Ctx = ctx; + glthread->upload_buffer->CtxRefCount = PRIVATE_REFCOUNT; } /* Upload data. */