Mesa (main): mesa: use atomics instead of mutexes for refcounting renderbuffers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sun Jun 27 15:02:26 UTC 2021


Module: Mesa
Branch: main
Commit: cfb43c7e1ba70bd405314b2a04d2bd7d74f25b4e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cfb43c7e1ba70bd405314b2a04d2bd7d74f25b4e

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Mon Jun  7 09:26:55 2021 -0400

mesa: use atomics instead of mutexes for refcounting renderbuffers

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11339>

---

 src/mesa/main/fbobject.c     |  1 -
 src/mesa/main/mtypes.h       |  1 -
 src/mesa/main/renderbuffer.c | 20 ++++----------------
 3 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 92375a9361b..49893165250 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -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,
 };
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 77bfdf7cda1..1a73f941fc9 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -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 */
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 27c6d90fb9b..c2ce1cd7eec 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -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;
 }



More information about the mesa-commit mailing list