From: Zebediah Figura zfigura@codeweavers.com
--- dlls/d3d9/texture.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-)
diff --git a/dlls/d3d9/texture.c b/dlls/d3d9/texture.c index a3a4dc41272..94c17be2c27 100644 --- a/dlls/d3d9/texture.c +++ b/dlls/d3d9/texture.c @@ -57,8 +57,6 @@ static ULONG d3d9_texture_decref(struct d3d9_texture *texture) struct d3d9_surface *surface;
wined3d_mutex_lock(); - if (texture->wined3d_srv) - wined3d_shader_resource_view_decref(texture->wined3d_srv); LIST_FOR_EACH_ENTRY(surface, &texture->rtv_list, struct d3d9_surface, rtv_entry) wined3d_rendertarget_view_decref(surface->wined3d_rtv); wined3d_texture_decref(d3d9_texture_get_draw_texture(texture)); @@ -92,18 +90,6 @@ static inline struct d3d9_texture *impl_from_IDirect3DVolumeTexture9(IDirect3DVo return CONTAINING_RECORD(iface, struct d3d9_texture, IDirect3DBaseTexture9_iface); }
-static void STDMETHODCALLTYPE srv_wined3d_object_destroyed(void *parent) -{ - struct d3d9_texture *texture = parent; - - texture->wined3d_srv = NULL; -} - -static const struct wined3d_parent_ops d3d9_srv_wined3d_parent_ops = -{ - srv_wined3d_object_destroyed, -}; - /* wined3d critical section must be taken by the caller. */ static struct wined3d_shader_resource_view *d3d9_texture_acquire_shader_resource_view(struct d3d9_texture *texture) { @@ -123,7 +109,7 @@ static struct wined3d_shader_resource_view *d3d9_texture_acquire_shader_resource desc.u.texture.layer_count = sr_desc.usage & WINED3DUSAGE_LEGACY_CUBEMAP ? 6 : 1; if (FAILED(hr = wined3d_shader_resource_view_create(&desc, wined3d_texture_get_resource(d3d9_texture_get_draw_texture(texture)), texture, - &d3d9_srv_wined3d_parent_ops, &texture->wined3d_srv))) + &d3d9_null_wined3d_parent_ops, &texture->wined3d_srv))) { ERR("Failed to create shader resource view, hr %#lx.\n", hr); return NULL; @@ -1263,6 +1249,8 @@ static void STDMETHODCALLTYPE d3d9_texture_wined3d_object_destroyed(void *parent { struct d3d9_texture *texture = parent;
+ if (texture->wined3d_srv) + wined3d_shader_resource_view_decref(texture->wined3d_srv); /* If the texture was managed, release the sysmem copy now. */ if (texture->draw_texture) wined3d_texture_decref(texture->wined3d_texture);