--- src/mesa/main/mtypes.h | 2 -- src/mesa/main/pipelineobj.c | 16 ++++------------ src/mesa/main/shaderapi.c | 2 -- 3 files changed, 4 insertions(+), 16 deletions(-)
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 5de464cc1b..8b1577dd3f 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2998,8 +2998,6 @@ struct gl_pipeline_object GLint RefCount; - mtx_t Mutex; - GLchar *Label; /**< GL_KHR_debug */ /** diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c index c1dd8d75c7..38fa9dcdbf 100644 --- a/src/mesa/main/pipelineobj.c +++ b/src/mesa/main/pipelineobj.c @@ -48,6 +48,7 @@ #include "program/program.h" #include "program/prog_parameter.h" #include "util/ralloc.h" +#include "util/u_atomic.h" /** * Delete a pipeline object. @@ -66,7 +67,6 @@ _mesa_delete_pipeline_object(struct gl_context *ctx, } _mesa_reference_shader_program(ctx, &obj->ActiveProgram, NULL); - mtx_destroy(&obj->Mutex); free(obj->Label); ralloc_free(obj); } @@ -80,7 +80,6 @@ _mesa_new_pipeline_object(struct gl_context *ctx, GLuint name) struct gl_pipeline_object *obj = rzalloc(NULL, struct gl_pipeline_object); if (obj) { obj->Name = name; - mtx_init(&obj->Mutex, mtx_plain); obj->RefCount = 1; obj->Flags = _mesa_get_shader_flags(); obj->InfoLog = NULL; @@ -186,16 +185,11 @@ _mesa_reference_pipeline_object_(struct gl_context *ctx, if (*ptr) { /* Unreference the old pipeline object */ - GLboolean deleteFlag = GL_FALSE; struct gl_pipeline_object *oldObj = *ptr; - mtx_lock(&oldObj->Mutex); assert(oldObj->RefCount > 0); - oldObj->RefCount--; - deleteFlag = (oldObj->RefCount == 0); - mtx_unlock(&oldObj->Mutex); - if (deleteFlag) { + if (p_atomic_dec_zero(&oldObj->RefCount)) { _mesa_delete_pipeline_object(ctx, oldObj); } @@ -205,18 +199,16 @@ _mesa_reference_pipeline_object_(struct gl_context *ctx, if (obj) { /* reference new pipeline object */ - mtx_lock(&obj->Mutex); - if (obj->RefCount == 0) { + if (p_atomic_read(&obj->RefCount) == 0) { /* this pipeline's being deleted (look just above) */ /* Not sure this can ever really happen. Warn if it does. */ _mesa_problem(NULL, "referencing deleted pipeline object"); *ptr = NULL; } else { - obj->RefCount++; + p_atomic_inc(&obj->RefCount); *ptr = obj; } - mtx_unlock(&obj->Mutex); } } diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 187475f127..0815ce36ff 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -138,7 +138,6 @@ _mesa_init_shader_state(struct gl_context *ctx) /* Extended for ARB_separate_shader_objects */ ctx->Shader.RefCount = 1; - mtx_init(&ctx->Shader.Mutex, mtx_plain); ctx->TessCtrlProgram.patch_vertices = 3; for (i = 0; i < 4; ++i) @@ -164,7 +163,6 @@ _mesa_free_shader_state(struct gl_context *ctx) _mesa_reference_pipeline_object(ctx, &ctx->_Shader, NULL); assert(ctx->Shader.RefCount == 1); - mtx_destroy(&ctx->Shader.Mutex); } -- 2.12.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev