static HRESULT WINAPI d3d8_texture_cube_LockRect(IDirect3DCubeTexture8 *iface, D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) { struct d3d8_texture *texture = impl_from_IDirect3DCubeTexture8(iface); struct wined3d_resource *sub_resource; struct d3d8_surface *surface_impl; UINT sub_resource_idx; HRESULT hr; TRACE("iface %p, face %#x, level %u, locked_rect %p, rect %p, flags %#x.\n", iface, face, level, locked_rect, rect, flags); wined3d_mutex_lock(); sub_resource_idx = wined3d_texture_get_level_count(texture->wined3d_texture) * face + level; if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx))) hr = D3DERR_INVALIDCALL; else { surface_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DSurface8_LockRect(&surface_impl->IDirect3DSurface8_iface, locked_rect, rect, flags); } wined3d_mutex_unlock(); return hr; }
static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTargetView *iface, ID3D10Resource **resource) { struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface); struct wined3d_resource *wined3d_resource; IUnknown *parent; HRESULT hr; TRACE("iface %p, resource %p\n", iface, resource); wined3d_resource = wined3d_rendertarget_view_get_resource(This->wined3d_view); if (!wined3d_resource) { ERR("Failed to get wined3d resource.\n"); *resource = NULL; return; } parent = wined3d_resource_get_parent(wined3d_resource); hr = IUnknown_QueryInterface(parent, &IID_ID3D10Resource, (void **)&resource); if (FAILED(hr)) { ERR("Resource parent isn't a d3d10 resource, hr %#x\n", hr); *resource = NULL; return; } }
static HRESULT WINAPI d3d8_texture_cube_GetCubeMapSurface(IDirect3DCubeTexture8 *iface, D3DCUBEMAP_FACES face, UINT level, IDirect3DSurface8 **surface) { struct d3d8_texture *texture = impl_from_IDirect3DCubeTexture8(iface); struct wined3d_resource *sub_resource; struct d3d8_surface *surface_impl; UINT sub_resource_idx; DWORD level_count; TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, face, level, surface); wined3d_mutex_lock(); level_count = wined3d_texture_get_level_count(texture->wined3d_texture); if (level >= level_count) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } sub_resource_idx = level_count * face + level; if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx))) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } surface_impl = wined3d_resource_get_parent(sub_resource); *surface = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*surface); wined3d_mutex_unlock(); return D3D_OK; }
void * CDECL wined3d_rendertarget_view_get_sub_resource_parent(const struct wined3d_rendertarget_view *view) { struct wined3d_resource *sub_resource; TRACE("view %p.\n", view); if (view->resource->type == WINED3D_RTYPE_BUFFER) return wined3d_buffer_get_parent(buffer_from_resource(view->resource)); if (!(sub_resource = wined3d_texture_get_sub_resource(wined3d_texture_from_resource(view->resource), view->sub_resource_idx))) return NULL; return wined3d_resource_get_parent(sub_resource); }
static HRESULT WINAPI IDirect3DTexture8Impl_UnlockRect(IDirect3DTexture8 *iface, UINT level) { IDirect3DTexture8Impl *texture = impl_from_IDirect3DTexture8(iface); struct wined3d_resource *sub_resource; HRESULT hr; TRACE("iface %p, level %u.\n", iface, level); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else hr = IDirect3DSurface8_UnlockRect((IDirect3DSurface8 *)wined3d_resource_get_parent(sub_resource)); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolumeTexture9Impl_UnlockBox(IDirect3DVolumeTexture9 *iface, UINT level) { IDirect3DVolumeTexture9Impl *texture = (IDirect3DVolumeTexture9Impl *)iface; struct wined3d_resource *sub_resource; HRESULT hr; TRACE("iface %p, level %u.\n", iface, level); wined3d_mutex_lock(); if (!(sub_resource = IWineD3DBaseTexture_GetSubResource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else hr = IDirect3DVolume9_UnlockBox((IDirect3DVolume9 *)wined3d_resource_get_parent(sub_resource)); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolumeTexture8Impl_LockBox(IDirect3DVolumeTexture8 *iface, UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) { IDirect3DVolumeTexture8Impl *texture = impl_from_IDirect3DVolumeTexture8(iface); struct wined3d_resource *sub_resource; HRESULT hr; TRACE("iface %p, level %u, locked_box %p, box %p, flags %#x.\n", iface, level, locked_box, box, flags); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else hr = IDirect3DVolume8_LockBox((IDirect3DVolume8 *)wined3d_resource_get_parent(sub_resource), locked_box, box, flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DTexture8Impl_LockRect(IDirect3DTexture8 *iface, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) { IDirect3DTexture8Impl *texture = impl_from_IDirect3DTexture8(iface); struct wined3d_resource *sub_resource; HRESULT hr; TRACE("iface %p, level %u, locked_rect %p, rect %p, flags %#x.\n", iface, level, locked_rect, rect, flags); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else hr = IDirect3DSurface8_LockRect((IDirect3DSurface8 *)wined3d_resource_get_parent(sub_resource), locked_rect, rect, flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DCubeTexture8Impl_UnlockRect(IDirect3DCubeTexture8 *iface, D3DCUBEMAP_FACES face, UINT level) { IDirect3DCubeTexture8Impl *texture = impl_from_IDirect3DCubeTexture8(iface); struct wined3d_resource *sub_resource; UINT sub_resource_idx; HRESULT hr; TRACE("iface %p, face %#x, level %u.\n", iface, face, level); wined3d_mutex_lock(); sub_resource_idx = IWineD3DCubeTexture_GetLevelCount(texture->wineD3DCubeTexture) * face + level; if (!(sub_resource = IWineD3DCubeTexture_GetSubResource(texture->wineD3DCubeTexture, sub_resource_idx))) hr = D3DERR_INVALIDCALL; else hr = IDirect3DSurface8_UnlockRect((IDirect3DSurface8 *)wined3d_resource_get_parent(sub_resource)); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_texture_3d_UnlockBox(IDirect3DVolumeTexture9 *iface, UINT level) { struct d3d9_texture *texture = impl_from_IDirect3DVolumeTexture9(iface); struct wined3d_resource *sub_resource; struct d3d9_volume *volume_impl; HRESULT hr; TRACE("iface %p, level %u.\n", iface, level); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else { volume_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DVolume9_UnlockBox(&volume_impl->IDirect3DVolume9_iface); } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetVolumeLevel(IDirect3DVolumeTexture8 *iface, UINT level, IDirect3DVolume8 **volume) { IDirect3DVolumeTexture8Impl *texture = impl_from_IDirect3DVolumeTexture8(iface); struct wined3d_resource *sub_resource; TRACE("iface %p, level %u, volume %p.\n", iface, level, volume); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } *volume = wined3d_resource_get_parent(sub_resource); IDirect3DVolume8_AddRef(*volume); wined3d_mutex_unlock(); return D3D_OK; }
static HRESULT WINAPI d3d8_texture_2d_UnlockRect(IDirect3DTexture8 *iface, UINT level) { struct d3d8_texture *texture = impl_from_IDirect3DTexture8(iface); struct wined3d_resource *sub_resource; struct d3d8_surface *surface_impl; HRESULT hr; TRACE("iface %p, level %u.\n", iface, level); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else { surface_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DSurface8_UnlockRect(&surface_impl->IDirect3DSurface8_iface); } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DCubeTexture8Impl_GetCubeMapSurface(IDirect3DCubeTexture8 *iface, D3DCUBEMAP_FACES face, UINT level, IDirect3DSurface8 **surface) { IDirect3DCubeTexture8Impl *texture = impl_from_IDirect3DCubeTexture8(iface); struct wined3d_resource *sub_resource; UINT sub_resource_idx; TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, face, level, surface); wined3d_mutex_lock(); sub_resource_idx = IWineD3DCubeTexture_GetLevelCount(texture->wineD3DCubeTexture) * face + level; if (!(sub_resource = IWineD3DCubeTexture_GetSubResource(texture->wineD3DCubeTexture, sub_resource_idx))) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } *surface = wined3d_resource_get_parent(sub_resource); IDirect3DSurface8_AddRef(*surface); wined3d_mutex_unlock(); return D3D_OK; }
static HRESULT WINAPI d3d8_texture_2d_GetSurfaceLevel(IDirect3DTexture8 *iface, UINT level, IDirect3DSurface8 **surface) { struct d3d8_texture *texture = impl_from_IDirect3DTexture8(iface); struct wined3d_resource *sub_resource; struct d3d8_surface *surface_impl; TRACE("iface %p, level %u, surface %p.\n", iface, level, surface); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } surface_impl = wined3d_resource_get_parent(sub_resource); *surface = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*surface); wined3d_mutex_unlock(); return D3D_OK; }
static HRESULT WINAPI d3d9_texture_2d_LockRect(IDirect3DTexture9 *iface, UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) { struct d3d9_texture *texture = impl_from_IDirect3DTexture9(iface); struct wined3d_resource *sub_resource; struct d3d9_surface *surface_impl; HRESULT hr; TRACE("iface %p, level %u, locked_rect %p, rect %p, flags %#x.\n", iface, level, locked_rect, rect, flags); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else { surface_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DSurface9_LockRect(&surface_impl->IDirect3DSurface9_iface, locked_rect, rect, flags); } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_texture_3d_LockBox(IDirect3DVolumeTexture9 *iface, UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) { struct d3d9_texture *texture = impl_from_IDirect3DVolumeTexture9(iface); struct wined3d_resource *sub_resource; struct d3d9_volume *volume_impl; HRESULT hr; TRACE("iface %p, level %u, locked_box %p, box %p, flags %#x.\n", iface, level, locked_box, box, flags); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) hr = D3DERR_INVALIDCALL; else { volume_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DVolume9_LockBox(&volume_impl->IDirect3DVolume9_iface, locked_box, box, flags); } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_texture_3d_GetVolumeLevel(IDirect3DVolumeTexture9 *iface, UINT level, IDirect3DVolume9 **volume) { struct d3d9_texture *texture = impl_from_IDirect3DVolumeTexture9(iface); struct wined3d_resource *sub_resource; struct d3d9_volume *volume_impl; TRACE("iface %p, level %u, volume %p.\n", iface, level, volume); wined3d_mutex_lock(); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, level))) { wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } volume_impl = wined3d_resource_get_parent(sub_resource); *volume = &volume_impl->IDirect3DVolume9_iface; IDirect3DVolume9_AddRef(*volume); wined3d_mutex_unlock(); return D3D_OK; }
static HRESULT WINAPI d3d9_swapchain_GetBackBuffer(IDirect3DSwapChain9Ex *iface, UINT backbuffer_idx, D3DBACKBUFFER_TYPE backbuffer_type, IDirect3DSurface9 **backbuffer) { struct d3d9_swapchain *swapchain = impl_from_IDirect3DSwapChain9Ex(iface); struct wined3d_resource *wined3d_resource; struct wined3d_texture *wined3d_texture; struct d3d9_surface *surface_impl; HRESULT hr = D3D_OK; TRACE("iface %p, backbuffer_idx %u, backbuffer_type %#x, backbuffer %p.\n", iface, backbuffer_idx, backbuffer_type, backbuffer); /* backbuffer_type is ignored by native. */ if (!backbuffer) { WARN("The output pointer is NULL, returning D3DERR_INVALIDCALL.\n"); return D3DERR_INVALIDCALL; } wined3d_mutex_lock(); if ((wined3d_texture = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, backbuffer_idx))) { wined3d_resource = wined3d_texture_get_sub_resource(wined3d_texture, 0); surface_impl = wined3d_resource_get_parent(wined3d_resource); *backbuffer = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*backbuffer); } else { /* Do not set *backbuffer = NULL, see tests/device.c, test_swapchain(). */ hr = D3DERR_INVALIDCALL; } wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_texture_cube_UnlockRect(IDirect3DCubeTexture9 *iface, D3DCUBEMAP_FACES face, UINT level) { struct d3d9_texture *texture = impl_from_IDirect3DCubeTexture9(iface); struct wined3d_resource *sub_resource; struct d3d9_surface *surface_impl; UINT sub_resource_idx; HRESULT hr; TRACE("iface %p, face %#x, level %u.\n", iface, face, level); wined3d_mutex_lock(); sub_resource_idx = wined3d_texture_get_level_count(texture->wined3d_texture) * face + level; if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx))) hr = D3DERR_INVALIDCALL; else { surface_impl = wined3d_resource_get_parent(sub_resource); hr = IDirect3DSurface9_UnlockRect(&surface_impl->IDirect3DSurface9_iface); } wined3d_mutex_unlock(); return hr; }