Module: wine Branch: master Commit: 223b0736c0f6683c244c652d0857b774731f9bf2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=223b0736c0f6683c244c652d08...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Jan 4 23:34:54 2012 +0100
ddraw: Disallow clipped blits in ddraw_surface7_BltFast().
---
dlls/ddraw/surface.c | 15 ++++++++++++++- dlls/ddraw/tests/ddraw1.c | 2 +- dlls/ddraw/tests/ddraw2.c | 2 +- dlls/ddraw/tests/ddraw4.c | 2 +- dlls/ddraw/tests/ddraw7.c | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 04e8c52..0b9248c 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -3869,7 +3869,20 @@ static HRESULT WINAPI ddraw_surface7_BltFast(IDirectDrawSurface7 *iface, DWORD d flags |= WINEDDBLT_DONOTWAIT;
wined3d_mutex_lock(); - hr = ddraw_surface_blt_clipped(This, &dst_rect, src, rsrc, flags, NULL, WINED3DTEXF_POINT); + if (This->clipper) + { + wined3d_mutex_unlock(); + WARN("Destination surface has a clipper set, returning DDERR_BLTFASTCANTCLIP.\n"); + return DDERR_BLTFASTCANTCLIP; + } + + if (src->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER) + hr = ddraw_surface_update_frontbuffer(src, rsrc, TRUE); + if (SUCCEEDED(hr)) + hr = wined3d_surface_blt(This->wined3d_surface, &dst_rect, + src->wined3d_surface, rsrc, flags, NULL, WINED3DTEXF_POINT); + if (SUCCEEDED(hr) && (This->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER)) + hr = ddraw_surface_update_frontbuffer(This, &dst_rect, FALSE); wined3d_mutex_unlock();
switch(hr) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index fdfa11f..e700919 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -332,7 +332,7 @@ static void test_clipper_blt(void) }
hr = IDirectDrawSurface_BltFast(dst_surface, 0, 0, src_surface, NULL, DDBLTFAST_WAIT); - todo_wine ok(hr == DDERR_BLTFASTCANTCLIP || broken(hr == E_NOTIMPL /* NT4 */), "Got unexpected hr %#x.\n", hr); + ok(hr == DDERR_BLTFASTCANTCLIP || broken(hr == E_NOTIMPL /* NT4 */), "Got unexpected hr %#x.\n", hr);
IDirectDrawSurface_Release(dst_surface); IDirectDrawSurface_Release(src_surface); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 7b046be..f99d480 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -339,7 +339,7 @@ static void test_clipper_blt(void) }
hr = IDirectDrawSurface_BltFast(dst_surface, 0, 0, src_surface, NULL, DDBLTFAST_WAIT); - todo_wine ok(hr == DDERR_BLTFASTCANTCLIP || broken(hr == E_NOTIMPL /* NT4 */), "Got unexpected hr %#x.\n", hr); + ok(hr == DDERR_BLTFASTCANTCLIP || broken(hr == E_NOTIMPL /* NT4 */), "Got unexpected hr %#x.\n", hr);
IDirectDrawSurface_Release(dst_surface); IDirectDrawSurface_Release(src_surface); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 26f5a0c..e2687fb 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -634,7 +634,7 @@ static void test_clipper_blt(void) }
hr = IDirectDrawSurface4_BltFast(dst_surface, 0, 0, src_surface, NULL, DDBLTFAST_WAIT); - todo_wine ok(hr == DDERR_BLTFASTCANTCLIP, "Got unexpected hr %#x.\n", hr); + ok(hr == DDERR_BLTFASTCANTCLIP, "Got unexpected hr %#x.\n", hr);
IDirectDrawSurface4_Release(dst_surface); IDirectDrawSurface4_Release(src_surface); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 9e5e564..3dcb007 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -627,7 +627,7 @@ static void test_clipper_blt(void) }
hr = IDirectDrawSurface7_BltFast(dst_surface, 0, 0, src_surface, NULL, DDBLTFAST_WAIT); - todo_wine ok(hr == DDERR_BLTFASTCANTCLIP, "Got unexpected hr %#x.\n", hr); + ok(hr == DDERR_BLTFASTCANTCLIP, "Got unexpected hr %#x.\n", hr);
IDirectDrawSurface7_Release(dst_surface); IDirectDrawSurface7_Release(src_surface);