From 34852124db9cbadb0d2a7aef5cbf77e7c5957879 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Fri, 4 Sep 2020 14:07:04 +0200 Subject: [PATCH] mesa: add a isGenName parameter to _mesa_HashInsert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Indicates if the given name has been returned by _mesa_HashFindFreeKeyBlock. Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/arbprogram.c | 5 +++-- src/mesa/main/arrayobj.c | 2 +- src/mesa/main/atifragshader.c | 6 ++++-- src/mesa/main/bufferobj.c | 9 ++++---- src/mesa/main/dlist.c | 12 +++++------ src/mesa/main/externalobjects.c | 6 +++--- src/mesa/main/fbobject.c | 32 ++++++++++++++++++----------- src/mesa/main/glthread_varray.c | 2 +- src/mesa/main/hash.c | 8 ++++++-- src/mesa/main/hash.h | 5 +++-- src/mesa/main/performance_monitor.c | 2 +- src/mesa/main/performance_query.c | 2 +- src/mesa/main/pipelineobj.c | 2 +- src/mesa/main/queryobj.c | 6 +++--- src/mesa/main/samplerobj.c | 2 +- src/mesa/main/shaderapi.c | 4 ++-- src/mesa/main/teximage.c | 4 +++- src/mesa/main/texobj.c | 4 ++-- src/mesa/main/transformfeedback.c | 2 +- 19 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c index e6fb7cac85b..b8e3aad385c 100644 --- a/src/mesa/main/arbprogram.c +++ b/src/mesa/main/arbprogram.c @@ -76,6 +76,7 @@ lookup_or_create_program(GLuint id, GLenum target, const char* caller) /* Bind a user program */ newProg = _mesa_lookup_program(ctx, id); if (!newProg || newProg == &_mesa_DummyProgram) { + bool isGenName = newProg != NULL; /* allocate a new program now */ newProg = ctx->Driver.NewProgram(ctx, _mesa_program_enum_to_shader_stage(target), id, true); @@ -83,7 +84,7 @@ lookup_or_create_program(GLuint id, GLenum target, const char* caller) _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller); return NULL; } - _mesa_HashInsert(ctx->Shared->Programs, id, newProg); + _mesa_HashInsert(ctx->Shared->Programs, id, newProg, isGenName); } else if (newProg->Target != target) { _mesa_error(ctx, GL_INVALID_OPERATION, @@ -235,7 +236,7 @@ _mesa_GenProgramsARB(GLsizei n, GLuint *ids) /* Insert pointer to dummy program as placeholder */ for (i = 0; i < (GLuint) n; i++) { _mesa_HashInsertLocked(ctx->Shared->Programs, first + i, - &_mesa_DummyProgram); + &_mesa_DummyProgram, true); } _mesa_HashUnlockMutex(ctx->Shared->Programs); diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index a4c15cfe369..6ac122dd943 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -1132,7 +1132,7 @@ gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays, return; } obj->EverBound = create; - _mesa_HashInsertLocked(ctx->Array.Objects, obj->Name, obj); + _mesa_HashInsertLocked(ctx->Array.Objects, obj->Name, obj, true); arrays[i] = first + i; } } diff --git a/src/mesa/main/atifragshader.c b/src/mesa/main/atifragshader.c index 44f6bb46484..aff4c6e2383 100644 --- a/src/mesa/main/atifragshader.c +++ b/src/mesa/main/atifragshader.c @@ -205,7 +205,7 @@ _mesa_GenFragmentShadersATI(GLuint range) first = _mesa_HashFindFreeKeyBlock(ctx->Shared->ATIShaders, range); for (i = 0; i < range; i++) { - _mesa_HashInsertLocked(ctx->Shared->ATIShaders, first + i, &DummyShader); + _mesa_HashInsertLocked(ctx->Shared->ATIShaders, first + i, &DummyShader, true); } _mesa_HashUnlockMutex(ctx->Shared->ATIShaders); @@ -244,8 +244,10 @@ _mesa_BindFragmentShaderATI(GLuint id) newProg = ctx->Shared->DefaultFragmentShader; } else { + bool isGenName; newProg = (struct ati_fragment_shader *) _mesa_HashLookup(ctx->Shared->ATIShaders, id); + isGenName = newProg != NULL; if (!newProg || newProg == &DummyShader) { /* allocate a new program now */ newProg = _mesa_new_ati_fragment_shader(ctx, id); @@ -253,7 +255,7 @@ _mesa_BindFragmentShaderATI(GLuint id) _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindFragmentShaderATI"); return; } - _mesa_HashInsert(ctx->Shared->ATIShaders, id, newProg); + _mesa_HashInsert(ctx->Shared->ATIShaders, id, newProg, isGenName); } } diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index db5fdaf6075..67eb9a4f2da 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -966,13 +966,12 @@ _mesa_handle_bind_buffer_gen(struct gl_context *ctx, /* If this is a new buffer object id, or one which was generated but * never used before, allocate a buffer object now. */ - buf = ctx->Driver.NewBufferObject(ctx, buffer); - if (!buf) { + *buf_handle = ctx->Driver.NewBufferObject(ctx, buffer); + if (!*buf_handle) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller); return false; } - _mesa_HashInsert(ctx->Shared->BufferObjects, buffer, buf); - *buf_handle = buf; + _mesa_HashInsert(ctx->Shared->BufferObjects, buffer, *buf_handle, buf != NULL); } return true; @@ -1653,7 +1652,7 @@ create_buffers(struct gl_context *ctx, GLsizei n, GLuint *buffers, bool dsa) else buf = &DummyBufferObject; - _mesa_HashInsertLocked(ctx->Shared->BufferObjects, buffers[i], buf); + _mesa_HashInsertLocked(ctx->Shared->BufferObjects, buffers[i], buf, true); } _mesa_HashUnlockMutex(ctx->Shared->BufferObjects); diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index a780100e456..c016c13eaee 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -875,7 +875,7 @@ lookup_bitmap_atlas(struct gl_context *ctx, GLuint listBase) * Create new bitmap atlas and insert into hash table. */ static struct gl_bitmap_atlas * -alloc_bitmap_atlas(struct gl_context *ctx, GLuint listBase) +alloc_bitmap_atlas(struct gl_context *ctx, GLuint listBase, bool isGenName) { struct gl_bitmap_atlas *atlas; @@ -884,7 +884,7 @@ alloc_bitmap_atlas(struct gl_context *ctx, GLuint listBase) atlas = calloc(1, sizeof(*atlas)); if (atlas) { - _mesa_HashInsert(ctx->Shared->BitmapAtlas, listBase, atlas); + _mesa_HashInsert(ctx->Shared->BitmapAtlas, listBase, atlas, isGenName); } return atlas; @@ -13651,7 +13651,7 @@ _mesa_GenLists(GLsizei range) GLint i; for (i = 0; i < range; i++) { _mesa_HashInsertLocked(ctx->Shared->DisplayList, base + i, - make_list(base + i, 1)); + make_list(base + i, 1), true); } } @@ -13664,7 +13664,7 @@ _mesa_GenLists(GLsizei range) */ struct gl_bitmap_atlas *atlas = lookup_bitmap_atlas(ctx, base); if (!atlas) { - atlas = alloc_bitmap_atlas(ctx, base); + atlas = alloc_bitmap_atlas(ctx, base, true); } if (atlas) { /* Atlas _should_ be new/empty now, but clobbering is OK */ @@ -13770,7 +13770,7 @@ _mesa_EndList(void) /* Install the new list */ _mesa_HashInsert(ctx->Shared->DisplayList, ctx->ListState.CurrentList->Name, - ctx->ListState.CurrentList); + ctx->ListState.CurrentList, true); if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST) @@ -13857,7 +13857,7 @@ render_bitmap_atlas(struct gl_context *ctx, GLsizei n, GLenum type, /* Even if glGenLists wasn't called, we can still try to create * the atlas now. */ - atlas = alloc_bitmap_atlas(ctx, ctx->List.ListBase); + atlas = alloc_bitmap_atlas(ctx, ctx->List.ListBase, false); } if (atlas && !atlas->complete && !atlas->incomplete) { diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c index 777a5dd5acd..c00e23d04d4 100644 --- a/src/mesa/main/externalobjects.c +++ b/src/mesa/main/externalobjects.c @@ -182,7 +182,7 @@ _mesa_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects) /* insert into hash table */ _mesa_HashInsertLocked(ctx->Shared->MemoryObjects, memoryObjects[i], - memObj); + memObj, true); } } @@ -607,7 +607,7 @@ _mesa_GenSemaphoresEXT(GLsizei n, GLuint *semaphores) for (GLsizei i = 0; i < n; i++) { semaphores[i] = first + i; _mesa_HashInsertLocked(ctx->Shared->SemaphoreObjects, - semaphores[i], &DummySemaphoreObject); + semaphores[i], &DummySemaphoreObject, true); } } @@ -886,7 +886,7 @@ _mesa_ImportSemaphoreFdEXT(GLuint semaphore, _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func); return; } - _mesa_HashInsert(ctx->Shared->SemaphoreObjects, semaphore, semObj); + _mesa_HashInsert(ctx->Shared->SemaphoreObjects, semaphore, semObj, true); } ctx->Driver.ImportSemaphoreFd(ctx, semObj, fd); diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 20d88e2ce15..f4a0e8a10bd 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -174,7 +174,7 @@ _mesa_lookup_framebuffer_dsa(struct gl_context *ctx, GLuint id, /* Name exists but buffer is not initialized */ if (fb == &DummyFramebuffer) { fb = ctx->Driver.NewFramebuffer(ctx, id); - _mesa_HashInsert(ctx->Shared->FrameBuffers, id, fb); + _mesa_HashInsert(ctx->Shared->FrameBuffers, id, fb, true); } /* Name doesn't exist */ else if (!fb) { @@ -183,7 +183,7 @@ _mesa_lookup_framebuffer_dsa(struct gl_context *ctx, GLuint id, _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func); return NULL; } - _mesa_HashInsert(ctx->Shared->FrameBuffers, id, fb); + _mesa_HashInsert(ctx->Shared->FrameBuffers, id, fb, false); } return fb; } @@ -1517,6 +1517,7 @@ _mesa_IsRenderbuffer(GLuint renderbuffer) static struct gl_renderbuffer * allocate_renderbuffer_locked(struct gl_context *ctx, GLuint renderbuffer, + bool isGenName, const char *func) { struct gl_renderbuffer *newRb; @@ -1528,7 +1529,8 @@ allocate_renderbuffer_locked(struct gl_context *ctx, GLuint renderbuffer, return NULL; } assert(newRb->AllocStorage); - _mesa_HashInsertLocked(ctx->Shared->RenderBuffers, renderbuffer, newRb); + _mesa_HashInsertLocked(ctx->Shared->RenderBuffers, renderbuffer, + newRb, isGenName); return newRb; } @@ -1550,10 +1552,12 @@ bind_renderbuffer(GLenum target, GLuint renderbuffer) */ if (renderbuffer) { + bool isGenName = false; newRb = _mesa_lookup_renderbuffer(ctx, renderbuffer); if (newRb == &DummyRenderbuffer) { /* ID was reserved, but no real renderbuffer object made yet */ newRb = NULL; + isGenName = true; } else if (!newRb && ctx->API == API_OPENGL_CORE) { /* All RB IDs must be Gen'd */ @@ -1565,7 +1569,7 @@ bind_renderbuffer(GLenum target, GLuint renderbuffer) if (!newRb) { _mesa_HashLockMutex(ctx->Shared->RenderBuffers); newRb = allocate_renderbuffer_locked(ctx, renderbuffer, - "glBindRenderbufferEXT"); + isGenName, "glBindRenderbufferEXT"); _mesa_HashUnlockMutex(ctx->Shared->RenderBuffers); } } @@ -2037,11 +2041,11 @@ create_render_buffers(struct gl_context *ctx, GLsizei n, GLuint *renderbuffers, renderbuffers[i] = name; if (dsa) { - allocate_renderbuffer_locked(ctx, name, func); + allocate_renderbuffer_locked(ctx, name, true, func); } else { /* insert a dummy renderbuffer into the hash table */ _mesa_HashInsertLocked(ctx->Shared->RenderBuffers, name, - &DummyRenderbuffer); + &DummyRenderbuffer, true); } } @@ -2790,7 +2794,8 @@ _mesa_NamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, renderbuffer); if (!rb || rb == &DummyRenderbuffer) { _mesa_HashLockMutex(ctx->Shared->RenderBuffers); - rb = allocate_renderbuffer_locked(ctx, renderbuffer, "glNamedRenderbufferStorageEXT"); + rb = allocate_renderbuffer_locked(ctx, renderbuffer, rb != NULL, + "glNamedRenderbufferStorageEXT"); _mesa_HashUnlockMutex(ctx->Shared->RenderBuffers); } renderbuffer_storage(ctx, rb, internalformat, width, height, NO_SAMPLES, @@ -2818,7 +2823,7 @@ _mesa_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei sample struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, renderbuffer); if (!rb || rb == &DummyRenderbuffer) { _mesa_HashLockMutex(ctx->Shared->RenderBuffers); - rb = allocate_renderbuffer_locked(ctx, renderbuffer, + rb = allocate_renderbuffer_locked(ctx, renderbuffer, rb != NULL, "glNamedRenderbufferStorageMultisampleEXT"); _mesa_HashUnlockMutex(ctx->Shared->RenderBuffers); } @@ -2936,7 +2941,8 @@ _mesa_GetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname, struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, renderbuffer); if (!rb || rb == &DummyRenderbuffer) { _mesa_HashLockMutex(ctx->Shared->RenderBuffers); - rb = allocate_renderbuffer_locked(ctx, renderbuffer, "glGetNamedRenderbufferParameterivEXT"); + rb = allocate_renderbuffer_locked(ctx, renderbuffer, rb != NULL, + "glGetNamedRenderbufferParameterivEXT"); _mesa_HashUnlockMutex(ctx->Shared->RenderBuffers); } @@ -3034,11 +3040,13 @@ bind_framebuffer(GLenum target, GLuint framebuffer) } if (framebuffer) { + bool isGenName = false; /* Binding a user-created framebuffer object */ newDrawFb = _mesa_lookup_framebuffer(ctx, framebuffer); if (newDrawFb == &DummyFramebuffer) { /* ID was reserved, but no real framebuffer object made yet */ newDrawFb = NULL; + isGenName = true; } else if (!newDrawFb && ctx->API == API_OPENGL_CORE) { /* All FBO IDs must be Gen'd */ @@ -3054,7 +3062,7 @@ bind_framebuffer(GLenum target, GLuint framebuffer) _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindFramebufferEXT"); return; } - _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, newDrawFb); + _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, newDrawFb, isGenName); } newReadFb = newDrawFb; } @@ -3236,7 +3244,7 @@ create_framebuffers(GLsizei n, GLuint *framebuffers, bool dsa) else fb = &DummyFramebuffer; - _mesa_HashInsertLocked(ctx->Shared->FrameBuffers, name, fb); + _mesa_HashInsertLocked(ctx->Shared->FrameBuffers, name, fb, true); } _mesa_HashUnlockMutex(ctx->Shared->FrameBuffers); @@ -4839,7 +4847,7 @@ lookup_named_framebuffer_ext_dsa(struct gl_context *ctx, GLuint framebuffer, con /* Then, make sure it's initialized */ if (fb == &DummyFramebuffer) { fb = ctx->Driver.NewFramebuffer(ctx, framebuffer); - _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, fb); + _mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, fb, true); } } else diff --git a/src/mesa/main/glthread_varray.c b/src/mesa/main/glthread_varray.c index 664e4644351..17718824c5f 100644 --- a/src/mesa/main/glthread_varray.c +++ b/src/mesa/main/glthread_varray.c @@ -159,7 +159,7 @@ _mesa_glthread_GenVertexArrays(struct gl_context *ctx, vao->Name = id; _mesa_glthread_reset_vao(vao); - _mesa_HashInsertLocked(glthread->VAOs, id, vao); + _mesa_HashInsertLocked(glthread->VAOs, id, vao, true); } } diff --git a/src/mesa/main/hash.c b/src/mesa/main/hash.c index 99249c4be18..5f053c38b40 100644 --- a/src/mesa/main/hash.c +++ b/src/mesa/main/hash.c @@ -198,9 +198,11 @@ _mesa_HashInsert_unlocked(struct _mesa_HashTable *table, GLuint key, void *data) * \param table the hash table. * \param key the key (not zero). * \param data pointer to user data. + * \param isGenName true if the key has been generated by a HashFindFreeKey* function */ void -_mesa_HashInsertLocked(struct _mesa_HashTable *table, GLuint key, void *data) +_mesa_HashInsertLocked(struct _mesa_HashTable *table, GLuint key, void *data, + GLboolean isGenName) { _mesa_HashInsert_unlocked(table, key, data); } @@ -213,9 +215,11 @@ _mesa_HashInsertLocked(struct _mesa_HashTable *table, GLuint key, void *data) * \param table the hash table. * \param key the key (not zero). * \param data pointer to user data. + * \param isGenName true if the key has been generated by a HashFindFreeKey* function */ void -_mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data) +_mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data, + GLboolean isGenName) { _mesa_HashLockMutex(table); _mesa_HashInsert_unlocked(table, key, data); diff --git a/src/mesa/main/hash.h b/src/mesa/main/hash.h index 0a3996a7d00..36424916de8 100644 --- a/src/mesa/main/hash.h +++ b/src/mesa/main/hash.h @@ -113,7 +113,8 @@ extern void _mesa_DeleteHashTable(struct _mesa_HashTable *table); extern void *_mesa_HashLookup(struct _mesa_HashTable *table, GLuint key); -extern void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data); +extern void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data, + GLboolean isGenName); extern void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key); @@ -149,7 +150,7 @@ _mesa_HashUnlockMutex(struct _mesa_HashTable *table) extern void *_mesa_HashLookupLocked(struct _mesa_HashTable *table, GLuint key); extern void _mesa_HashInsertLocked(struct _mesa_HashTable *table, - GLuint key, void *data); + GLuint key, void *data, GLboolean isGenName); extern void _mesa_HashRemoveLocked(struct _mesa_HashTable *table, GLuint key); diff --git a/src/mesa/main/performance_monitor.c b/src/mesa/main/performance_monitor.c index 3273f156368..d485aca5b6f 100644 --- a/src/mesa/main/performance_monitor.c +++ b/src/mesa/main/performance_monitor.c @@ -368,7 +368,7 @@ _mesa_GenPerfMonitorsAMD(GLsizei n, GLuint *monitors) return; } monitors[i] = first + i; - _mesa_HashInsert(ctx->PerfMonitor.Monitors, first + i, m); + _mesa_HashInsert(ctx->PerfMonitor.Monitors, first + i, m, true); } } else { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGenPerfMonitorsAMD"); diff --git a/src/mesa/main/performance_query.c b/src/mesa/main/performance_query.c index c5825a7da3a..ce1dd966536 100644 --- a/src/mesa/main/performance_query.c +++ b/src/mesa/main/performance_query.c @@ -462,7 +462,7 @@ _mesa_CreatePerfQueryINTEL(GLuint queryId, GLuint *queryHandle) obj->Active = false; obj->Ready = false; - _mesa_HashInsert(ctx->PerfQuery.Objects, id, obj); + _mesa_HashInsert(ctx->PerfQuery.Objects, id, obj, true); *queryHandle = id; } diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c index f12bcfe0e85..5bbd8869a01 100644 --- a/src/mesa/main/pipelineobj.c +++ b/src/mesa/main/pipelineobj.c @@ -153,7 +153,7 @@ static void save_pipeline_object(struct gl_context *ctx, struct gl_pipeline_object *obj) { if (obj->Name > 0) { - _mesa_HashInsertLocked(ctx->Pipeline.Objects, obj->Name, obj); + _mesa_HashInsertLocked(ctx->Pipeline.Objects, obj->Name, obj, true); } } diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c index e54a37b8e89..8c66808ce3a 100644 --- a/src/mesa/main/queryobj.c +++ b/src/mesa/main/queryobj.c @@ -287,7 +287,7 @@ create_queries(struct gl_context *ctx, GLenum target, GLsizei n, GLuint *ids, q->EverBound = GL_TRUE; } ids[i] = first + i; - _mesa_HashInsertLocked(ctx->Query.QueryObjects, first + i, q); + _mesa_HashInsertLocked(ctx->Query.QueryObjects, first + i, q, true); } } } @@ -457,7 +457,7 @@ _mesa_BeginQueryIndexed(GLenum target, GLuint index, GLuint id) _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBeginQuery{Indexed}"); return; } - _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q); + _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q, false); } } else { @@ -599,7 +599,7 @@ _mesa_QueryCounter(GLuint id, GLenum target) _mesa_error(ctx, GL_OUT_OF_MEMORY, "glQueryCounter"); return; } - _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q); + _mesa_HashInsertLocked(ctx->Query.QueryObjects, id, q, false); } else { if (q->Target && q->Target != GL_TIMESTAMP) { diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c index 271983e4f10..9fd857b2340 100644 --- a/src/mesa/main/samplerobj.c +++ b/src/mesa/main/samplerobj.c @@ -179,7 +179,7 @@ create_samplers(struct gl_context *ctx, GLsizei count, GLuint *samplers, return; } - _mesa_HashInsertLocked(ctx->Shared->SamplerObjects, name, sampObj); + _mesa_HashInsertLocked(ctx->Shared->SamplerObjects, name, sampObj, true); samplers[i] = name; } diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 86c8c8597d9..7039b61d806 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -341,7 +341,7 @@ create_shader(struct gl_context *ctx, GLenum type) name = _mesa_HashFindFreeKeyBlock(ctx->Shared->ShaderObjects, 1); sh = _mesa_new_shader(name, _mesa_shader_enum_to_shader_stage(type)); sh->Type = type; - _mesa_HashInsertLocked(ctx->Shared->ShaderObjects, name, sh); + _mesa_HashInsertLocked(ctx->Shared->ShaderObjects, name, sh, true); _mesa_HashUnlockMutex(ctx->Shared->ShaderObjects); return name; @@ -373,7 +373,7 @@ create_shader_program(struct gl_context *ctx) shProg = _mesa_new_shader_program(name); - _mesa_HashInsertLocked(ctx->Shared->ShaderObjects, name, shProg); + _mesa_HashInsertLocked(ctx->Shared->ShaderObjects, name, shProg, true); assert(shProg->RefCount == 1); diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 895b5664e5b..867536d3d03 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -2915,7 +2915,9 @@ lookup_texture_ext_dsa(struct gl_context *ctx, GLenum target, GLuint texture, texObj = ctx->Shared->DefaultTex[targetIndex]; assert(texObj); } else { + bool isGenName; texObj = _mesa_lookup_texture(ctx, texture); + isGenName = texObj != NULL; if (!texObj && ctx->API == API_OPENGL_CORE) { _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-gen name)", caller); return NULL; @@ -2929,7 +2931,7 @@ lookup_texture_ext_dsa(struct gl_context *ctx, GLenum target, GLuint texture, } /* insert into hash table */ - _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj); + _mesa_HashInsert(ctx->Shared->TexObjects, texObj->Name, texObj, isGenName); } if (texObj->Target != boundTarget) { diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 3e058975db8..a81838e6ca4 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1237,7 +1237,7 @@ create_textures(struct gl_context *ctx, GLenum target, } /* insert into hash table */ - _mesa_HashInsertLocked(ctx->Shared->TexObjects, texObj->Name, texObj); + _mesa_HashInsertLocked(ctx->Shared->TexObjects, texObj->Name, texObj, true); textures[i] = name; } @@ -1802,7 +1802,7 @@ _mesa_lookup_or_create_texture(struct gl_context *ctx, GLenum target, } /* and insert it into hash table */ - _mesa_HashInsert(ctx->Shared->TexObjects, texName, newTexObj); + _mesa_HashInsert(ctx->Shared->TexObjects, texName, newTexObj, false); } } diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c index 5826447844a..b3b7f1e5a77 100644 --- a/src/mesa/main/transformfeedback.c +++ b/src/mesa/main/transformfeedback.c @@ -1083,7 +1083,7 @@ create_transform_feedbacks(struct gl_context *ctx, GLsizei n, GLuint *ids, } ids[i] = first + i; _mesa_HashInsertLocked(ctx->TransformFeedback.Objects, first + i, - obj); + obj, true); if (dsa) { /* this is normally done at bind time in the non-dsa case */ obj->EverBound = GL_TRUE;