mesa: Add locking to sampler objects.
authorMatt Turner <mattst88@gmail.com>
Fri, 12 Jun 2015 16:07:09 +0000 (09:07 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 25 Sep 2015 21:08:31 +0000 (14:08 -0700)
Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/mtypes.h
src/mesa/main/samplerobj.c

index d53d99ad84376998aaef9f821599a531037af411..5445d39c560498b5f41019c5de2a78aa05d85e42 100644 (file)
@@ -944,6 +944,7 @@ typedef enum
  */
 struct gl_sampler_object
 {
+   mtx_t Mutex;
    GLuint Name;
    GLint RefCount;
    GLchar *Label;               /**< GL_KHR_debug */
index 241b5cb31fd52ec86c0f43544dd1563b7a36c27d..c7b96664c21e7c12b94745d24109bb3f3f0fbeac 100644 (file)
@@ -88,11 +88,11 @@ _mesa_reference_sampler_object_(struct gl_context *ctx,
       GLboolean deleteFlag = GL_FALSE;
       struct gl_sampler_object *oldSamp = *ptr;
 
-      /*mtx_lock(&oldSamp->Mutex);*/
+      mtx_lock(&oldSamp->Mutex);
       assert(oldSamp->RefCount > 0);
       oldSamp->RefCount--;
       deleteFlag = (oldSamp->RefCount == 0);
-      /*mtx_unlock(&oldSamp->Mutex);*/
+      mtx_unlock(&oldSamp->Mutex);
 
       if (deleteFlag) {
         assert(ctx->Driver.DeleteSamplerObject);
@@ -105,7 +105,7 @@ _mesa_reference_sampler_object_(struct gl_context *ctx,
 
    if (samp) {
       /* reference new sampler */
-      /*mtx_lock(&samp->Mutex);*/
+      mtx_lock(&samp->Mutex);
       if (samp->RefCount == 0) {
          /* this sampler's being deleted (look just above) */
          /* Not sure this can every really happen.  Warn if it does. */
@@ -116,7 +116,7 @@ _mesa_reference_sampler_object_(struct gl_context *ctx,
          samp->RefCount++;
          *ptr = samp;
       }
-      /*mtx_unlock(&samp->Mutex);*/
+      mtx_unlock(&samp->Mutex);
    }
 }
 
@@ -127,6 +127,7 @@ _mesa_reference_sampler_object_(struct gl_context *ctx,
 static void
 _mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
 {
+   mtx_init(&sampObj->Mutex, mtx_plain);
    sampObj->Name = name;
    sampObj->RefCount = 1;
    sampObj->WrapS = GL_REPEAT;
@@ -169,6 +170,7 @@ static void
 _mesa_delete_sampler_object(struct gl_context *ctx,
                             struct gl_sampler_object *sampObj)
 {
+   mtx_destroy(&sampObj->Mutex);
    free(sampObj->Label);
    free(sampObj);
 }