Module: wine Branch: master Commit: 972217fd6abdacfffa1c1b6aca511dd23450c652 URL: http://source.winehq.org/git/wine.git/?a=commit;h=972217fd6abdacfffa1c1b6aca...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Oct 1 11:05:21 2012 +0200
wined3d: Just return the surface from wined3d_device_get_render_target().
---
dlls/d3d8/device.c | 14 ++++++-------- dlls/d3d9/device.c | 9 +++------ dlls/ddraw/ddraw.c | 9 ++++----- dlls/wined3d/device.c | 19 +++++-------------- dlls/wined3d/wined3d.spec | 2 +- include/wine/wined3d.h | 4 ++-- 6 files changed, 21 insertions(+), 36 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index f892138..22280cd 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -1100,14 +1100,12 @@ static HRESULT WINAPI d3d8_device_SetRenderTarget(IDirect3DDevice8 *iface, /* If no render target is passed in check the size against the current RT */ if (!render_target) { - hr = wined3d_device_get_render_target(device->wined3d_device, 0, &original_rt); - if (FAILED(hr) || !original_rt) + if (!(original_rt = wined3d_device_get_render_target(device->wined3d_device, 0))) { wined3d_mutex_unlock(); - return hr; + return D3DERR_NOTFOUND; } wined3d_resource = wined3d_surface_get_resource(original_rt); - wined3d_surface_decref(original_rt); } else wined3d_resource = wined3d_surface_get_resource(rt_impl->wined3d_surface); @@ -1156,18 +1154,18 @@ static HRESULT WINAPI d3d8_device_GetRenderTarget(IDirect3DDevice8 *iface, IDire return D3DERR_INVALIDCALL;
wined3d_mutex_lock(); - hr = wined3d_device_get_render_target(device->wined3d_device, 0, &wined3d_surface); - if (SUCCEEDED(hr) && wined3d_surface) + if ((wined3d_surface = wined3d_device_get_render_target(device->wined3d_device, 0))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *render_target = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*render_target); - wined3d_surface_decref(wined3d_surface); + hr = D3D_OK; } else { - ERR("Failed to get wined3d render target, hr %#x.\n", hr); + ERR("Failed to get wined3d render target.\n"); *render_target = NULL; + hr = D3DERR_NOTFOUND; } wined3d_mutex_unlock();
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index cd7e001..68ab0a4 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -1190,7 +1190,7 @@ static HRESULT WINAPI d3d9_device_GetRenderTarget(IDirect3DDevice9Ex *iface, DWO struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_surface *wined3d_surface; struct d3d9_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK;
TRACE("iface %p, idx %u, surface %p.\n", iface, idx, surface);
@@ -1204,18 +1204,15 @@ static HRESULT WINAPI d3d9_device_GetRenderTarget(IDirect3DDevice9Ex *iface, DWO }
wined3d_mutex_lock(); - hr = wined3d_device_get_render_target(device->wined3d_device, idx, &wined3d_surface); - if (SUCCEEDED(hr)) + if ((wined3d_surface = wined3d_device_get_render_target(device->wined3d_device, idx))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *surface = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*surface); - wined3d_surface_decref(wined3d_surface); } else { - if (hr != WINED3DERR_NOTFOUND) - WARN("Failed to get render target %u, hr %#x.\n", idx, hr); + hr = WINED3DERR_NOTFOUND; *surface = NULL; } wined3d_mutex_unlock(); diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 0230b5d..b352705 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -754,8 +754,8 @@ static HRESULT ddraw_create_swapchain(struct ddraw *ddraw, HWND window, BOOL win static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, DWORD cooplevel) { struct ddraw *This = impl_from_IDirectDraw7(iface); + struct wined3d_surface *rt = NULL, *ds; struct wined3d_stateblock *stateblock; - struct wined3d_surface *rt, *ds; BOOL restore_state = FALSE; HWND window; HRESULT hr; @@ -932,12 +932,11 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, return hr; }
- wined3d_device_get_render_target(This->wined3d_device, 0, &rt); + rt = wined3d_device_get_render_target(This->wined3d_device, 0); if (rt == This->wined3d_frontbuffer) - { - wined3d_surface_decref(rt); rt = NULL; - } + else if (rt) + wined3d_surface_incref(rt);
wined3d_device_get_depth_stencil(This->wined3d_device, &ds); } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 916a648..29fb124 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4479,27 +4479,18 @@ void CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device, if (FAILED(hr)) ERR("Color fill failed, hr %#x.\n", hr); }
-HRESULT CDECL wined3d_device_get_render_target(const struct wined3d_device *device, - UINT render_target_idx, struct wined3d_surface **render_target) +struct wined3d_surface * CDECL wined3d_device_get_render_target(const struct wined3d_device *device, + UINT render_target_idx) { - TRACE("device %p, render_target_idx %u, render_target %p.\n", - device, render_target_idx, render_target); + TRACE("device %p, render_target_idx %u.\n", device, render_target_idx);
if (render_target_idx >= device->adapter->gl_info.limits.buffers) { WARN("Only %u render targets are supported.\n", device->adapter->gl_info.limits.buffers); - return WINED3DERR_INVALIDCALL; + return NULL; }
- *render_target = device->fb.render_targets[render_target_idx]; - TRACE("Returning render target %p.\n", *render_target); - - if (!*render_target) - return WINED3DERR_NOTFOUND; - - wined3d_surface_incref(*render_target); - - return WINED3D_OK; + return device->fb.render_targets[render_target_idx]; }
HRESULT CDECL wined3d_device_get_depth_stencil(const struct wined3d_device *device, diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 7971552..55bd32a 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -76,7 +76,7 @@ @ cdecl wined3d_device_get_ps_consts_i(ptr long ptr long) @ cdecl wined3d_device_get_raster_status(ptr long ptr) @ cdecl wined3d_device_get_render_state(ptr long) -@ cdecl wined3d_device_get_render_target(ptr long ptr) +@ cdecl wined3d_device_get_render_target(ptr long) @ cdecl wined3d_device_get_sampler_state(ptr long long) @ cdecl wined3d_device_get_scissor_rect(ptr ptr) @ cdecl wined3d_device_get_software_vertex_processing(ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 40dfda8..a630e49 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2143,8 +2143,8 @@ HRESULT __cdecl wined3d_device_get_ps_consts_i(const struct wined3d_device *devi HRESULT __cdecl wined3d_device_get_raster_status(const struct wined3d_device *device, UINT swapchain_idx, struct wined3d_raster_status *raster_status); DWORD __cdecl wined3d_device_get_render_state(const struct wined3d_device *device, enum wined3d_render_state state); -HRESULT __cdecl wined3d_device_get_render_target(const struct wined3d_device *device, - UINT render_target_idx, struct wined3d_surface **render_target); +struct wined3d_surface * __cdecl wined3d_device_get_render_target(const struct wined3d_device *device, + UINT render_target_idx); DWORD __cdecl wined3d_device_get_sampler_state(const struct wined3d_device *device, UINT sampler_idx, enum wined3d_sampler_state state); void __cdecl wined3d_device_get_scissor_rect(const struct wined3d_device *device, RECT *rect);