[Mesa-dev] [PATCH 07/13] mesa: Replace program locks with atomic inc/dec.
Timothy Arceri
timothy.arceri at collabora.com
Tue Nov 8 05:34:04 UTC 2016
There are still some issues with the other patches but is there any
reason this one didn't land?
On Thu, 2015-08-06 at 17:10 -0700, Matt Turner wrote:
> ---
> src/mesa/main/mtypes.h | 1 -
> src/mesa/program/program.c | 15 +++------------
> 2 files changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index fcc527f..c597ccc 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -2095,7 +2095,6 @@ enum gl_frag_depth_layout
> */
> struct gl_program
> {
> - 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 e94c102..54e3498 100644
> --- a/src/mesa/program/program.c
> +++ b/src/mesa/program/program.c
> @@ -38,6 +38,7 @@
> #include "prog_parameter.h"
> #include "prog_instruction.h"
> #include "util/ralloc.h"
> +#include "util/u_atomic.h"
>
>
> /**
> @@ -226,7 +227,6 @@ init_program_struct(struct gl_program *prog,
> GLenum target, GLuint id)
> assert(prog);
>
> memset(prog, 0, sizeof(*prog));
> - mtx_init(&prog->Mutex, mtx_plain);
> prog->Id = id;
> prog->Target = target;
> prog->RefCount = 1;
> @@ -419,7 +419,6 @@ _mesa_delete_program(struct gl_context *ctx,
> struct gl_program *prog)
> ralloc_free(prog->nir);
> }
>
> - mtx_destroy(&prog->Mutex);
> free(prog);
> }
>
> @@ -464,17 +463,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);
> ctx->Driver.DeleteProgram(ctx, oldProg);
> }
> @@ -484,9 +477,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;
More information about the mesa-dev
mailing list