static HRESULT WINAPI IDirect3DSurface9Impl_FreePrivateData(IDirect3DSurface9 *iface, REFGUID guid) { IDirect3DSurface9Impl *surface = impl_from_IDirect3DSurface9(iface); struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid)); wined3d_mutex_lock(); resource = wined3d_surface_get_resource(surface->wined3d_surface); hr = wined3d_resource_free_private_data(resource, guid); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DSurface9Impl_GetPrivateData(IDirect3DSurface9 *iface, REFGUID guid, void *data, DWORD *data_size) { IDirect3DSurface9Impl *surface = impl_from_IDirect3DSurface9(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_surface_get_resource(surface->wined3d_surface); hr = wined3d_resource_get_private_data(resource, guid, data, data_size); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_surface_SetPrivateData(IDirect3DSurface9 *iface, REFGUID guid, const void *data, DWORD data_size, DWORD flags) { struct d3d9_surface *surface = impl_from_IDirect3DSurface9(iface); struct wined3d_resource *resource; HRESULT hr; TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n", iface, debugstr_guid(guid), data, data_size, flags); wined3d_mutex_lock(); resource = wined3d_surface_get_resource(surface->wined3d_surface); hr = wined3d_resource_set_private_data(resource, guid, data, data_size, flags); wined3d_mutex_unlock(); return hr; }
static struct wined3d_resource *wined3d_resource_from_resource(ID3D10Resource *resource) { D3D10_RESOURCE_DIMENSION dimension; ID3D10Resource_GetType(resource, &dimension); switch(dimension) { case D3D10_RESOURCE_DIMENSION_BUFFER: return wined3d_buffer_get_resource(((struct d3d10_buffer *)resource)->wined3d_buffer); case D3D10_RESOURCE_DIMENSION_TEXTURE2D: return wined3d_surface_get_resource(((struct d3d10_texture2d *)resource)->wined3d_surface); default: FIXME("Unhandled resource dimension %#x.\n", dimension); return NULL; } }
void surface_init(struct d3d9_surface *surface, IUnknown *container_parent, struct wined3d_surface *wined3d_surface, const struct wined3d_parent_ops **parent_ops) { struct wined3d_resource_desc desc; IDirect3DBaseTexture9 *texture; surface->IDirect3DSurface9_iface.lpVtbl = &d3d9_surface_vtbl; d3d9_resource_init(&surface->resource); surface->resource.refcount = 0; surface->wined3d_surface = wined3d_surface; list_init(&surface->rtv_entry); surface->container = container_parent; if (container_parent && SUCCEEDED(IUnknown_QueryInterface(container_parent, &IID_IDirect3DBaseTexture9, (void **)&texture))) { surface->texture = unsafe_impl_from_IDirect3DBaseTexture9(texture); IDirect3DBaseTexture9_Release(texture); } wined3d_resource_get_desc(wined3d_surface_get_resource(wined3d_surface), &desc); switch (d3dformat_from_wined3dformat(desc.format)) { case D3DFMT_A8R8G8B8: case D3DFMT_X8R8G8B8: case D3DFMT_R5G6B5: case D3DFMT_X1R5G5B5: case D3DFMT_A1R5G5B5: case D3DFMT_R8G8B8: surface->getdc_supported = TRUE; break; default: surface->getdc_supported = FALSE; break; } *parent_ops = &d3d9_surface_wined3d_parent_ops; }
static HRESULT WINAPI IDirect3DSurface9Impl_GetDesc(IDirect3DSurface9 *iface, D3DSURFACE_DESC *desc) { IDirect3DSurface9Impl *This = impl_from_IDirect3DSurface9(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_surface_get_resource(This->wined3d_surface); 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; desc->Pool = wined3d_desc.pool; desc->MultiSampleType = wined3d_desc.multisample_type; desc->MultiSampleQuality = wined3d_desc.multisample_quality; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; return D3D_OK; }
static HRESULT WINAPI d3d8_surface_GetDesc(IDirect3DSurface8 *iface, D3DSURFACE_DESC *desc) { struct d3d8_surface *surface = impl_from_IDirect3DSurface8(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_surface_get_resource(surface->wined3d_surface); 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->Size = wined3d_desc.size; desc->MultiSampleType = wined3d_desc.multisample_type; desc->Width = wined3d_desc.width; desc->Height = wined3d_desc.height; return D3D_OK; }