diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index d91d5381a48..88932dbbc71 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -889,6 +889,8 @@ struct gl_sampler_object uint8_t glclamp_mask; /**< mask of GL_CLAMP wraps active */ + bool DeletePending; /**< true if sampler object is removed from the hash */ + /** GL_ARB_bindless_texture */ bool HandleAllocated; struct util_dynarray Handles; diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c index afb18f8c574..87bab4a61b8 100644 --- a/src/mesa/main/samplerobj.c +++ b/src/mesa/main/samplerobj.c @@ -265,6 +265,8 @@ delete_samplers(struct gl_context *ctx, GLsizei count, const GLuint *samplers) } } + sampObj->DeletePending = true; + /* The ID is immediately freed for re-use */ _mesa_HashRemoveLocked(&ctx->Shared->SamplerObjects, samplers[i]); /* But the object exists until its reference count goes to zero */ @@ -402,7 +404,8 @@ bind_samplers(struct gl_context *ctx, GLuint first, GLsizei count, struct gl_sampler_object *sampObj; if (samplers[i] != 0) { - if (currentSampler && currentSampler->Name == samplers[i]) + if (currentSampler && !currentSampler->DeletePending && + currentSampler->Name == samplers[i]) sampObj = currentSampler; else sampObj = lookup_samplerobj_locked(ctx, samplers[i]);