mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 04:10:09 +01:00
mesa: use atomics instead of mutexes for refcounting renderbuffers
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11339>
This commit is contained in:
parent
e77adbffb4
commit
cfb43c7e1b
3 changed files with 4 additions and 18 deletions
|
|
@ -85,7 +85,6 @@ static struct gl_framebuffer DummyFramebuffer = {
|
|||
.Delete = delete_dummy_framebuffer,
|
||||
};
|
||||
static struct gl_renderbuffer DummyRenderbuffer = {
|
||||
.Mutex = _SIMPLE_MTX_INITIALIZER_NP,
|
||||
.Delete = delete_dummy_renderbuffer,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -3491,7 +3491,6 @@ struct gl_shared_state
|
|||
*/
|
||||
struct gl_renderbuffer
|
||||
{
|
||||
simple_mtx_t Mutex; /**< for thread safety */
|
||||
GLuint ClassID; /**< Useful for drivers */
|
||||
GLuint Name;
|
||||
GLchar *Label; /**< GL_KHR_debug */
|
||||
|
|
|
|||
|
|
@ -41,8 +41,6 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
simple_mtx_init(&rb->Mutex, mtx_plain);
|
||||
|
||||
rb->ClassID = 0;
|
||||
rb->Name = name;
|
||||
rb->RefCount = 1;
|
||||
|
|
@ -102,7 +100,6 @@ _mesa_new_renderbuffer(struct gl_context *ctx, GLuint name)
|
|||
void
|
||||
_mesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||
{
|
||||
simple_mtx_destroy(&rb->Mutex);
|
||||
free(rb->Label);
|
||||
free(rb);
|
||||
}
|
||||
|
|
@ -199,29 +196,20 @@ _mesa_reference_renderbuffer_(struct gl_renderbuffer **ptr,
|
|||
{
|
||||
if (*ptr) {
|
||||
/* Unreference the old renderbuffer */
|
||||
GLboolean deleteFlag = GL_FALSE;
|
||||
struct gl_renderbuffer *oldRb = *ptr;
|
||||
|
||||
simple_mtx_lock(&oldRb->Mutex);
|
||||
assert(oldRb->RefCount > 0);
|
||||
oldRb->RefCount--;
|
||||
deleteFlag = (oldRb->RefCount == 0);
|
||||
simple_mtx_unlock(&oldRb->Mutex);
|
||||
|
||||
if (deleteFlag) {
|
||||
if (p_atomic_dec_zero(&oldRb->RefCount)) {
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
oldRb->Delete(ctx, oldRb);
|
||||
}
|
||||
|
||||
*ptr = NULL;
|
||||
}
|
||||
assert(!*ptr);
|
||||
|
||||
if (rb) {
|
||||
/* reference new renderbuffer */
|
||||
simple_mtx_lock(&rb->Mutex);
|
||||
rb->RefCount++;
|
||||
simple_mtx_unlock(&rb->Mutex);
|
||||
*ptr = rb;
|
||||
p_atomic_inc(&rb->RefCount);
|
||||
}
|
||||
|
||||
*ptr = rb;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue