From d5ee55f028883748eadd8eec9070b475c200871c Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 5 Apr 2017 10:49:35 +1000 Subject: [PATCH] mesa: Replace program locks with atomic inc/dec. Reviewed-by: Timothy Arceri --- src/compiler/glsl/standalone.cpp | 2 -- src/mesa/main/mtypes.h | 1 - src/mesa/program/program.c | 15 +++------------ 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index 521964bf9cc..52554bb92a2 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -103,8 +103,6 @@ private: void init_gl_program(struct gl_program *prog, GLenum target, bool is_arb_asm) { - mtx_init(&prog->Mutex, mtx_plain); - prog->RefCount = 1; prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; prog->is_arb_asm = is_arb_asm; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 6fb6a514f9f..4b23240a469 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1939,7 +1939,6 @@ struct gl_program /** FIXME: This must be first until we split shader_info from nir_shader */ struct shader_info info; - mtx_t Mutex; GLuint Id; GLint RefCount; GLubyte *String; /**< Null-terminated program text */ diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 0e499c655fe..277e6ce2d86 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -40,6 +40,7 @@ #include "prog_parameter.h" #include "prog_instruction.h" #include "util/ralloc.h" +#include "util/u_atomic.h" /** @@ -185,7 +186,6 @@ _mesa_init_gl_program(struct gl_program *prog, GLenum target, GLuint id, return NULL; memset(prog, 0, sizeof(*prog)); - mtx_init(&prog->Mutex, mtx_plain); prog->Id = id; prog->Target = target; prog->RefCount = 1; @@ -271,7 +271,6 @@ _mesa_delete_program(struct gl_context *ctx, struct gl_program *prog) ralloc_free(prog->nir); } - mtx_destroy(&prog->Mutex); ralloc_free(prog); } @@ -316,17 +315,11 @@ _mesa_reference_program_(struct gl_context *ctx, #endif if (*ptr) { - GLboolean deleteFlag; struct gl_program *oldProg = *ptr; - mtx_lock(&oldProg->Mutex); assert(oldProg->RefCount > 0); - oldProg->RefCount--; - deleteFlag = (oldProg->RefCount == 0); - mtx_unlock(&oldProg->Mutex); - - if (deleteFlag) { + if (p_atomic_dec_zero(&oldProg->RefCount)) { assert(ctx); _mesa_reference_shader_program_data(ctx, &oldProg->sh.data, NULL); ctx->Driver.DeleteProgram(ctx, oldProg); @@ -337,9 +330,7 @@ _mesa_reference_program_(struct gl_context *ctx, assert(!*ptr); if (prog) { - mtx_lock(&prog->Mutex); - prog->RefCount++; - mtx_unlock(&prog->Mutex); + p_atomic_inc(&prog->RefCount); } *ptr = prog; -- 2.30.2