mesa: Remove unnecessary locking from container objects.
authorMatt Turner <mattst88@gmail.com>
Fri, 21 Apr 2017 03:48:38 +0000 (13:48 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sat, 22 Apr 2017 00:01:15 +0000 (10:01 +1000)
From Chapter 5 'Shared Objects and Multiple Contexts' of
the OpenGL 4.5 spec:

   "Objects which contain references to other objects include
   framebuffer, program pipeline, query, transform feedback,
   and vertex array objects.   Such objects are called container
   objects and are not shared"

For we leave locking in place for framebuffer objects because
the EXT fbo extension allowed sharing.

V2: (Timothy Arceri)
 - rebased and dropped changes to framebuffer objects

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/mesa/main/arrayobj.c
src/mesa/main/mtypes.h
src/mesa/main/pipelineobj.c
src/mesa/main/shaderapi.c

index fdb3caad9542a7c84f19396d8b2b16dc2b20fe6c..9f4477e45b32d7bf17ad9d9787c103b757c5accc 100644 (file)
@@ -169,7 +169,6 @@ _mesa_delete_vao(struct gl_context *ctx, struct gl_vertex_array_object *obj)
 {
    unbind_array_object_vbos(ctx, obj);
    _mesa_reference_buffer_object(ctx, &obj->IndexBufferObj, NULL);
-   mtx_destroy(&obj->Mutex);
    free(obj->Label);
    free(obj);
 }
@@ -192,11 +191,9 @@ _mesa_reference_vao_(struct gl_context *ctx,
       GLboolean deleteFlag = GL_FALSE;
       struct gl_vertex_array_object *oldObj = *ptr;
 
-      mtx_lock(&oldObj->Mutex);
       assert(oldObj->RefCount > 0);
       oldObj->RefCount--;
       deleteFlag = (oldObj->RefCount == 0);
-      mtx_unlock(&oldObj->Mutex);
 
       if (deleteFlag)
          _mesa_delete_vao(ctx, oldObj);
@@ -207,12 +204,10 @@ _mesa_reference_vao_(struct gl_context *ctx,
 
    if (vao) {
       /* reference new array object */
-      mtx_lock(&vao->Mutex);
       assert(vao->RefCount > 0);
 
       vao->RefCount++;
       *ptr = vao;
-      mtx_unlock(&vao->Mutex);
    }
 }
 
@@ -268,7 +263,6 @@ _mesa_initialize_vao(struct gl_context *ctx,
 
    vao->Name = name;
 
-   mtx_init(&vao->Mutex, mtx_plain);
    vao->RefCount = 1;
 
    /* Init the individual arrays */
index c4fab9dbac239f7663b91f36250c67f520c90d29..b3711ba256c906175a3d46588540e8c18addf705 100644 (file)
@@ -1509,8 +1509,6 @@ struct gl_vertex_array_object
 
    GLchar *Label;       /**< GL_KHR_debug */
 
-   mtx_t Mutex;
-
    /**
     * Does the VAO use ARB semantics or Apple semantics?
     *
@@ -3001,8 +2999,6 @@ struct gl_pipeline_object
 
    GLint RefCount;
 
-   mtx_t Mutex;
-
    GLchar *Label;   /**< GL_KHR_debug */
 
    /**
index 2988c97455e875cdd1336862df7c23e9eaa897a9..a0fa55a85c445f9d3e26e311aae857458b3d0620 100644 (file)
@@ -66,7 +66,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 +79,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;
@@ -189,11 +187,9 @@ _mesa_reference_pipeline_object_(struct gl_context *ctx,
       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) {
          _mesa_delete_pipeline_object(ctx, oldObj);
@@ -205,12 +201,10 @@ _mesa_reference_pipeline_object_(struct gl_context *ctx,
 
    if (obj) {
       /* reference new pipeline object */
-      mtx_lock(&obj->Mutex);
       assert(obj->RefCount > 0);
 
       obj->RefCount++;
       *ptr = obj;
-      mtx_unlock(&obj->Mutex);
    }
 }
 
index 187475f1277bcea9994ee1ec59f71173804d35ed..c41f006eb79c589e7f671bea9f6bc63cea3adb26 100644 (file)
@@ -138,8 +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)
       ctx->TessCtrlProgram.patch_default_outer_level[i] = 1.0;
@@ -164,7 +162,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);
 }