static ULONG WINAPI d3d8_volume_Release(IDirect3DVolume8 *iface) { struct d3d8_volume *volume = impl_from_IDirect3DVolume8(iface); TRACE("iface %p.\n", iface); if (volume->forwardReference) { /* Forward to the containerParent */ TRACE("Forwarding to %p.\n", volume->forwardReference); return IUnknown_Release(volume->forwardReference); } else { /* No container, handle our own refcounting */ ULONG ref = InterlockedDecrement(&volume->refcount); TRACE("%p decreasing refcount to %u.\n", iface, ref); if (!ref) { wined3d_mutex_lock(); wined3d_volume_decref(volume->wined3d_volume); wined3d_mutex_unlock(); } return ref; } }
static ULONG WINAPI d3d9_volume_Release(IDirect3DVolume9 *iface) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); ULONG refcount; TRACE("iface %p.\n", iface); if (volume->forwardReference) { TRACE("Forwarding to %p.\n", volume->forwardReference); return IUnknown_Release(volume->forwardReference); } refcount = InterlockedDecrement(&volume->refcount); TRACE("%p decreasing refcount to %u.\n", iface, refcount); if (!refcount) { wined3d_mutex_lock(); wined3d_volume_decref(volume->wined3d_volume); wined3d_mutex_unlock(); } return refcount; }
static ULONG WINAPI IDirect3DVolume9Impl_Release(IDirect3DVolume9 *iface) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); TRACE("iface %p.\n", iface); if (This->forwardReference) { /* Forward refcounting */ TRACE("(%p) : Forwarding to %p\n", This, This->forwardReference); return IUnknown_Release(This->forwardReference); } else { /* No container, handle our own refcounting */ ULONG ref = InterlockedDecrement(&This->ref); TRACE("%p decreasing refcount to %u.\n", iface, ref); if (ref == 0) { wined3d_mutex_lock(); wined3d_volume_decref(This->wined3d_volume); wined3d_mutex_unlock(); } return ref; } }
static void texture3d_sub_resource_cleanup(struct wined3d_resource *sub_resource) { struct wined3d_volume *volume = volume_from_resource(sub_resource); /* Cleanup the container. */ volume_set_container(volume, NULL); wined3d_volume_decref(volume); }
static ULONG volume_resource_decref(struct wined3d_resource *resource) { return wined3d_volume_decref(volume_from_resource(resource)); }