X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fsamplerobj.c;h=2118f0ecb8733cdb903bde0ce2141c27dc56cc7e;hb=7c16552f8dcc869b14cf7ef443a1b5de83b07973;hp=ca366d967ab1a06e0c5fd435cafe9c8e3487d65f;hpb=b6654831c36f9780e6bcd23bb211470ec0db7de2;p=mesa.git diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c index ca366d967ab..2118f0ecb87 100644 --- a/src/mesa/main/samplerobj.c +++ b/src/mesa/main/samplerobj.c @@ -50,6 +50,15 @@ _mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name) _mesa_HashLookup(ctx->Shared->SamplerObjects, name); } +static struct gl_sampler_object * +_mesa_lookup_samplerobj_locked(struct gl_context *ctx, GLuint name) +{ + if (name == 0) + return NULL; + else + return (struct gl_sampler_object *) + _mesa_HashLookupLocked(ctx->Shared->SamplerObjects, name); +} static inline void begin_samplerobj_lookups(struct gl_context *ctx) @@ -186,15 +195,19 @@ create_samplers(struct gl_context *ctx, GLsizei count, GLuint *samplers, if (!samplers) return; + _mesa_HashLockMutex(ctx->Shared->SamplerObjects); + first = _mesa_HashFindFreeKeyBlock(ctx->Shared->SamplerObjects, count); /* Insert the ID and pointer to new sampler object into hash table */ for (i = 0; i < count; i++) { struct gl_sampler_object *sampObj = ctx->Driver.NewSamplerObject(ctx, first + i); - _mesa_HashInsert(ctx->Shared->SamplerObjects, first + i, sampObj); + _mesa_HashInsertLocked(ctx->Shared->SamplerObjects, first + i, sampObj); samplers[i] = first + i; } + + _mesa_HashUnlockMutex(ctx->Shared->SamplerObjects); } void GLAPIENTRY @@ -225,13 +238,13 @@ _mesa_DeleteSamplers(GLsizei count, const GLuint *samplers) return; } - mtx_lock(&ctx->Shared->Mutex); + _mesa_HashLockMutex(ctx->Shared->SamplerObjects); for (i = 0; i < count; i++) { if (samplers[i]) { GLuint j; struct gl_sampler_object *sampObj = - _mesa_lookup_samplerobj(ctx, samplers[i]); + _mesa_lookup_samplerobj_locked(ctx, samplers[i]); if (sampObj) { /* If the sampler is currently bound, unbind it. */ @@ -243,14 +256,14 @@ _mesa_DeleteSamplers(GLsizei count, const GLuint *samplers) } /* The ID is immediately freed for re-use */ - _mesa_HashRemove(ctx->Shared->SamplerObjects, samplers[i]); + _mesa_HashRemoveLocked(ctx->Shared->SamplerObjects, samplers[i]); /* But the object exists until its reference count goes to zero */ _mesa_reference_sampler_object(ctx, &sampObj, NULL); } } } - mtx_unlock(&ctx->Shared->Mutex); + _mesa_HashUnlockMutex(ctx->Shared->SamplerObjects); } @@ -798,10 +811,8 @@ _mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param) * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glSamplerParameteri(sampler %u)", sampler); return; } @@ -891,10 +902,8 @@ _mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glSamplerParameterf(sampler %u)", sampler); return; } @@ -982,11 +991,8 @@ _mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params) * * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." - * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glSamplerParameteriv(sampler %u)", sampler); return; } @@ -1083,10 +1089,8 @@ _mesa_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params) * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glSamplerParameterfv(sampler %u)", sampler); return; } @@ -1171,8 +1175,8 @@ _mesa_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params) sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { - _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIiv(sampler %u)", - sampler); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glSamplerParameterIiv(sampler %u)", sampler); return; } @@ -1257,8 +1261,8 @@ _mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params) sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { - _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(sampler %u)", - sampler); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glSamplerParameterIuiv(sampler %u)", sampler); return; } @@ -1347,10 +1351,8 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params) * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetSamplerParameteriv(sampler %u)", sampler); return; } @@ -1441,10 +1443,8 @@ _mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params) * "An INVALID_OPERATION error is generated if sampler is not the name * of a sampler object previously returned from a call to GenSamplers." * - * In desktop GL, an GL_INVALID_VALUE is returned instead. */ - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetSamplerParameterfv(sampler %u)", sampler); return; } @@ -1518,8 +1518,7 @@ _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params) sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetSamplerParameterIiv(sampler %u)", sampler); return; @@ -1594,8 +1593,7 @@ _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params) sampObj = _mesa_lookup_samplerobj(ctx, sampler); if (!sampObj) { - _mesa_error(ctx, (_mesa_is_gles(ctx) ? - GL_INVALID_OPERATION : GL_INVALID_VALUE), + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetSamplerParameterIuiv(sampler %u)", sampler); return;