Module: wine Branch: master Commit: 58f3dc4becbb4afcb9b4ccc95ae635b59c9956e9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=58f3dc4becbb4afcb9b4ccc95...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Sep 3 19:45:37 2018 +0300
dxgi: Implement Map()/Unmap().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dxgi/surface.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-)
diff --git a/dlls/dxgi/surface.c b/dlls/dxgi/surface.c index 1f53b25..4b1b83b 100644 --- a/dlls/dxgi/surface.c +++ b/dlls/dxgi/surface.c @@ -182,16 +182,43 @@ static HRESULT STDMETHODCALLTYPE dxgi_surface_GetDesc(IDXGISurface1 *iface, DXGI
static HRESULT STDMETHODCALLTYPE dxgi_surface_Map(IDXGISurface1 *iface, DXGI_MAPPED_RECT *mapped_rect, UINT flags) { - FIXME("iface %p, mapped_rect %p, flags %#x stub!\n", iface, mapped_rect, flags); + struct dxgi_surface *surface = impl_from_IDXGISurface1(iface); + struct wined3d_map_desc wined3d_map_desc; + DWORD wined3d_map_flags = 0; + HRESULT hr; + + TRACE("iface %p, mapped_rect %p, flags %#x.\n", iface, mapped_rect, flags); + + if (flags & DXGI_MAP_READ) + wined3d_map_flags |= WINED3D_MAP_READ; + if (flags & DXGI_MAP_WRITE) + wined3d_map_flags |= WINED3D_MAP_WRITE; + if (flags & DXGI_MAP_DISCARD) + wined3d_map_flags |= WINED3D_MAP_DISCARD; + + wined3d_mutex_lock(); + if (SUCCEEDED(hr = wined3d_resource_map(wined3d_texture_get_resource(surface->wined3d_texture), 0, + &wined3d_map_desc, NULL, wined3d_map_flags))) + { + mapped_rect->Pitch = wined3d_map_desc.row_pitch; + mapped_rect->pBits = wined3d_map_desc.data; + } + wined3d_mutex_unlock();
- return E_NOTIMPL; + return hr; }
static HRESULT STDMETHODCALLTYPE dxgi_surface_Unmap(IDXGISurface1 *iface) { - FIXME("iface %p stub!\n", iface); + struct dxgi_surface *surface = impl_from_IDXGISurface1(iface); + + TRACE("iface %p.\n", iface);
- return E_NOTIMPL; + wined3d_mutex_lock(); + wined3d_resource_unmap(wined3d_texture_get_resource(surface->wined3d_texture), 0); + wined3d_mutex_unlock(); + + return S_OK; }
/* IDXGISurface1 methods */