Beispiel #1
0
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;
    }
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
    }
}
Beispiel #4
0
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);
}
Beispiel #5
0
static ULONG volume_resource_decref(struct wined3d_resource *resource)
{
    return wined3d_volume_decref(volume_from_resource(resource));
}