Commit e5dd9b2a authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

d3d10core: Implement d3d10_texture2d_GetPrivateData().

parent 21da7be6
......@@ -66,6 +66,8 @@ DWORD wined3d_usage_from_d3d10core(UINT bind_flags, enum D3D10_USAGE usage) DECL
struct wined3d_resource *wined3d_resource_from_resource(ID3D10Resource *resource) DECLSPEC_HIDDEN;
DWORD wined3d_map_flags_from_d3d10_map_type(D3D10_MAP map_type) DECLSPEC_HIDDEN;
HRESULT d3d10_get_private_data(struct wined3d_private_store *store,
REFGUID guid, UINT *data_size, void *data) DECLSPEC_HIDDEN;
HRESULT d3d10_set_private_data(struct wined3d_private_store *store,
REFGUID guid, UINT data_size, const void *data) DECLSPEC_HIDDEN;
HRESULT d3d10_set_private_data_interface(struct wined3d_private_store *store,
......
......@@ -119,10 +119,22 @@ static void STDMETHODCALLTYPE d3d10_texture2d_GetDevice(ID3D10Texture2D *iface,
static HRESULT STDMETHODCALLTYPE d3d10_texture2d_GetPrivateData(ID3D10Texture2D *iface,
REFGUID guid, UINT *data_size, void *data)
{
FIXME("iface %p, guid %s, data_size %p, data %p stub!\n",
struct d3d10_texture2d *texture = impl_from_ID3D10Texture2D(iface);
IDXGISurface *dxgi_surface;
HRESULT hr;
TRACE("iface %p, guid %s, data_size %p, data %p.\n",
iface, debugstr_guid(guid), data_size, data);
return E_NOTIMPL;
if (texture->dxgi_surface
&& SUCCEEDED(IUnknown_QueryInterface(texture->dxgi_surface, &IID_IDXGISurface, (void **)&dxgi_surface)))
{
hr = IDXGISurface_GetPrivateData(dxgi_surface, guid, data_size, data);
IDXGISurface_Release(dxgi_surface);
return hr;
}
return d3d10_get_private_data(&texture->private_store, guid, data_size, data);
}
static HRESULT STDMETHODCALLTYPE d3d10_texture2d_SetPrivateData(ID3D10Texture2D *iface,
......
......@@ -411,6 +411,35 @@ DWORD wined3d_map_flags_from_d3d10_map_type(D3D10_MAP map_type)
}
}
HRESULT d3d10_get_private_data(struct wined3d_private_store *store,
REFGUID guid, UINT *data_size, void *data)
{
const struct wined3d_private_data *stored_data;
DWORD size_in;
if (!data_size)
return E_INVALIDARG;
if (!(stored_data = wined3d_private_store_get_private_data(store, guid)))
{
*data_size = 0;
return DXGI_ERROR_NOT_FOUND;
}
size_in = *data_size;
*data_size = stored_data->size;
if (!data)
return S_OK;
if (size_in < stored_data->size)
return DXGI_ERROR_MORE_DATA;
if (stored_data->flags & WINED3DSPD_IUNKNOWN)
IUnknown_AddRef(stored_data->content.object);
memcpy(data, stored_data->content.data, stored_data->size);
return S_OK;
}
HRESULT d3d10_set_private_data(struct wined3d_private_store *store,
REFGUID guid, UINT data_size, const void *data)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment