diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c index 865198be73e..1a2e2a144d1 100644 --- a/dlls/wined3d/sampler.c +++ b/dlls/wined3d/sampler.c @@ -33,23 +33,28 @@ ULONG CDECL wined3d_sampler_incref(struct wined3d_sampler *sampler) return refcount; } +static void wined3d_sample_destroy_object(void *object) +{ + struct wined3d_sampler *sampler = object; + const struct wined3d_gl_info *gl_info; + struct wined3d_context *context; + + context = context_acquire(sampler->device, NULL); + gl_info = context->gl_info; + GL_EXTCALL(glDeleteSamplers(1, &sampler->name)); + context_release(context); + + HeapFree(GetProcessHeap(), 0, sampler); +} + ULONG CDECL wined3d_sampler_decref(struct wined3d_sampler *sampler) { ULONG refcount = InterlockedDecrement(&sampler->refcount); - const struct wined3d_gl_info *gl_info; - struct wined3d_context *context; TRACE("%p decreasing refcount to %u.\n", sampler, refcount); if (!refcount) - { - context = context_acquire(sampler->device, NULL); - gl_info = context->gl_info; - GL_EXTCALL(glDeleteSamplers(1, &sampler->name)); - context_release(context); - - HeapFree(GetProcessHeap(), 0, sampler); - } + wined3d_cs_emit_destroy_object(sampler->device->cs, wined3d_sample_destroy_object, sampler); return refcount; }