[Mesa-dev] [PATCH] mesa: framebuffer refcounting with atomic ops
Tapani Pälli
tapani.palli at intel.com
Tue Aug 15 12:03:13 UTC 2017
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
---
src/mesa/main/framebuffer.c | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
Use atomic ops in same manner as for shader objects, IMO makes
code easier to read.
diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 039762a074..69e28c8af7 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -45,7 +45,7 @@
#include "texobj.h"
#include "glformats.h"
#include "state.h"
-
+#include "util/u_atomic.h"
/**
@@ -243,25 +243,16 @@ _mesa_reference_framebuffer_(struct gl_framebuffer **ptr,
{
if (*ptr) {
/* unreference old renderbuffer */
- GLboolean deleteFlag = GL_FALSE;
struct gl_framebuffer *oldFb = *ptr;
-
- mtx_lock(&oldFb->Mutex);
- assert(oldFb->RefCount > 0);
- oldFb->RefCount--;
- deleteFlag = (oldFb->RefCount == 0);
- mtx_unlock(&oldFb->Mutex);
-
- if (deleteFlag)
- oldFb->Delete(oldFb);
+ assert(p_atomic_read(&oldFb->RefCount) > 0);
+ if (p_atomic_dec_zero(&oldFb->RefCount))
+ oldFb->Delete(oldFb);
*ptr = NULL;
}
if (fb) {
- mtx_lock(&fb->Mutex);
- fb->RefCount++;
- mtx_unlock(&fb->Mutex);
+ p_atomic_inc(&fb->RefCount);
*ptr = fb;
}
}
--
2.13.5
More information about the mesa-dev
mailing list