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 HRESULT WINAPI d3d9_volume_FreePrivateData(IDirect3DVolume9 *iface, REFGUID guid) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid)); return d3d9_resource_free_private_data(&volume->resource, guid); }
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 HRESULT WINAPI d3d9_volume_GetContainer(IDirect3DVolume9 *iface, REFIID riid, void **container) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); TRACE("iface %p, riid %s, container %p.\n", iface, debugstr_guid(riid), container); return IDirect3DBaseTexture9_QueryInterface(&volume->texture->IDirect3DBaseTexture9_iface, riid, container); }
static HRESULT WINAPI d3d9_volume_GetDevice(IDirect3DVolume9 *iface, IDirect3DDevice9 **device) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); TRACE("iface %p, device %p.\n", iface, device); return IDirect3DBaseTexture9_GetDevice(&volume->texture->IDirect3DBaseTexture9_iface, device); }
static HRESULT WINAPI d3d9_volume_GetPrivateData(IDirect3DVolume9 *iface, REFGUID guid, void *data, DWORD *data_size) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); TRACE("iface %p, guid %s, data %p, data_size %p.\n", iface, debugstr_guid(guid), data, data_size); return d3d9_resource_get_private_data(&volume->resource, guid, data, data_size); }
static ULONG WINAPI d3d9_volume_Release(IDirect3DVolume9 *iface) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); TRACE("iface %p.\n", iface); TRACE("Forwarding to %p.\n", volume->texture); return IDirect3DBaseTexture9_Release(&volume->texture->IDirect3DBaseTexture9_iface); }
static HRESULT WINAPI d3d9_volume_UnlockBox(IDirect3DVolume9 *iface) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); HRESULT hr; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); hr = wined3d_volume_unmap(volume->wined3d_volume); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolume9Impl_UnlockBox(IDirect3DVolume9 *iface) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); HRESULT hr; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); hr = wined3d_volume_unmap(This->wined3d_volume); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_volume_FreePrivateData(IDirect3DVolume9 *iface, REFGUID guid) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid)); wined3d_mutex_lock(); resource = wined3d_volume_get_resource(volume->wined3d_volume); hr = wined3d_resource_free_private_data(resource, guid); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_volume_GetContainer(IDirect3DVolume9 *iface, REFIID riid, void **container) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); HRESULT hr; TRACE("iface %p, riid %s, container %p.\n", iface, debugstr_guid(riid), container); if (!volume->container) return E_NOINTERFACE; hr = IUnknown_QueryInterface(volume->container, riid, container); TRACE("Returning %p,\n", *container); return hr; }
static HRESULT WINAPI IDirect3DVolume9Impl_LockBox(IDirect3DVolume9 *iface, D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox, DWORD Flags) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); HRESULT hr; TRACE("iface %p, locked_box %p, box %p, flags %#x.\n", iface, pLockedVolume, pBox, Flags); wined3d_mutex_lock(); hr = wined3d_volume_map(This->wined3d_volume, (struct wined3d_mapped_box *)pLockedVolume, (const struct wined3d_box *)pBox, Flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolume9Impl_GetContainer(IDirect3DVolume9 *iface, REFIID riid, void **ppContainer) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); HRESULT res; TRACE("iface %p, riid %s, container %p.\n", iface, debugstr_guid(riid), ppContainer); if (!This->container) return E_NOINTERFACE; res = IUnknown_QueryInterface(This->container, riid, ppContainer); TRACE("Returning ppContainer %p, *ppContainer %p\n", ppContainer, *ppContainer); return res; }
static HRESULT WINAPI IDirect3DVolume9Impl_GetPrivateData(IDirect3DVolume9 *iface, REFGUID refguid, void *pData, DWORD *pSizeOfData) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, guid %s, data %p, data_size %p.\n", iface, debugstr_guid(refguid), pData, pSizeOfData); wined3d_mutex_lock(); resource = wined3d_volume_get_resource(This->wined3d_volume); hr = wined3d_resource_get_private_data(resource, refguid, pData, pSizeOfData); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_volume_GetPrivateData(IDirect3DVolume9 *iface, REFGUID guid, void *data, DWORD *data_size) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, guid %s, data %p, data_size %p.\n", iface, debugstr_guid(guid), data, data_size); wined3d_mutex_lock(); resource = wined3d_volume_get_resource(volume->wined3d_volume); hr = wined3d_resource_get_private_data(resource, guid, data, data_size); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolume9Impl_QueryInterface(IDirect3DVolume9 *iface, REFIID riid, void **ppobj) { IDirect3DVolume9Impl *This = impl_from_IDirect3DVolume9(iface); TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3DVolume9)) { IDirect3DVolume9_AddRef(iface); *ppobj = This; return S_OK; } WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj); *ppobj = NULL; return E_NOINTERFACE; }
static HRESULT WINAPI d3d9_volume_GetDevice(IDirect3DVolume9 *iface, IDirect3DDevice9 **device) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); IDirect3DResource9 *resource; HRESULT hr; TRACE("iface %p, device %p.\n", iface, device); hr = IUnknown_QueryInterface(volume->forwardReference, &IID_IDirect3DResource9, (void **)&resource); if (SUCCEEDED(hr)) { hr = IDirect3DResource9_GetDevice(resource, device); IDirect3DResource9_Release(resource); TRACE("Returning device %p.\n", *device); } return hr; }
static HRESULT WINAPI d3d9_volume_LockBox(IDirect3DVolume9 *iface, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); struct wined3d_map_desc map_desc; HRESULT hr; TRACE("iface %p, locked_box %p, box %p, flags %#x.\n", iface, locked_box, box, flags); wined3d_mutex_lock(); hr = wined3d_volume_map(volume->wined3d_volume, &map_desc, (const struct wined3d_box *)box, flags); wined3d_mutex_unlock(); locked_box->RowPitch = map_desc.row_pitch; locked_box->SlicePitch = map_desc.slice_pitch; locked_box->pBits = map_desc.data; return hr; }
static HRESULT WINAPI d3d9_volume_GetDesc(IDirect3DVolume9 *iface, D3DVOLUME_DESC *desc) { struct d3d9_volume *volume = impl_from_IDirect3DVolume9(iface); struct wined3d_resource_desc wined3d_desc; struct wined3d_resource *wined3d_resource; TRACE("iface %p, desc %p.\n", iface, desc); wined3d_mutex_lock(); wined3d_resource = wined3d_volume_get_resource(volume->wined3d_volume); wined3d_resource_get_desc(wined3d_resource, &wined3d_desc); wined3d_mutex_unlock(); desc->Format = d3dformat_from_wined3dformat(wined3d_desc.format); desc->Type = wined3d_desc.resource_type; desc->Usage = wined3d_desc.usage & WINED3DUSAGE_MASK; desc->Pool = wined3d_desc.pool; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; desc->Depth = wined3d_desc.depth; return D3D_OK; }