mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
mesa: Add locking to programs.
Reviewed-by: Timothy Arceri <t_arceri@yahoo.com.au> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
3c57a102eb
commit
1dd943d7fb
2 changed files with 12 additions and 8 deletions
|
|
@ -1888,6 +1888,7 @@ enum gl_frag_depth_layout
|
|||
*/
|
||||
struct gl_program
|
||||
{
|
||||
mtx_t Mutex;
|
||||
GLuint Id;
|
||||
GLint RefCount;
|
||||
GLubyte *String; /**< Null-terminated program text */
|
||||
|
|
|
|||
|
|
@ -226,6 +226,7 @@ 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;
|
||||
|
|
@ -418,6 +419,7 @@ _mesa_delete_program(struct gl_context *ctx, struct gl_program *prog)
|
|||
ralloc_free(prog->nir);
|
||||
}
|
||||
|
||||
mtx_destroy(&prog->Mutex);
|
||||
free(prog);
|
||||
}
|
||||
|
||||
|
|
@ -463,17 +465,18 @@ _mesa_reference_program_(struct gl_context *ctx,
|
|||
|
||||
if (*ptr) {
|
||||
GLboolean deleteFlag;
|
||||
struct gl_program *oldProg = *ptr;
|
||||
|
||||
/*mtx_lock(&(*ptr)->Mutex);*/
|
||||
assert((*ptr)->RefCount > 0);
|
||||
(*ptr)->RefCount--;
|
||||
mtx_lock(&oldProg->Mutex);
|
||||
assert(oldProg->RefCount > 0);
|
||||
oldProg->RefCount--;
|
||||
|
||||
deleteFlag = ((*ptr)->RefCount == 0);
|
||||
/*mtx_lock(&(*ptr)->Mutex);*/
|
||||
deleteFlag = (oldProg->RefCount == 0);
|
||||
mtx_unlock(&oldProg->Mutex);
|
||||
|
||||
if (deleteFlag) {
|
||||
assert(ctx);
|
||||
ctx->Driver.DeleteProgram(ctx, *ptr);
|
||||
ctx->Driver.DeleteProgram(ctx, oldProg);
|
||||
}
|
||||
|
||||
*ptr = NULL;
|
||||
|
|
@ -481,9 +484,9 @@ _mesa_reference_program_(struct gl_context *ctx,
|
|||
|
||||
assert(!*ptr);
|
||||
if (prog) {
|
||||
/*mtx_lock(&prog->Mutex);*/
|
||||
mtx_lock(&prog->Mutex);
|
||||
prog->RefCount++;
|
||||
/*mtx_unlock(&prog->Mutex);*/
|
||||
mtx_unlock(&prog->Mutex);
|
||||
}
|
||||
|
||||
*ptr = prog;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue