Henri Verbeet : ddraw: Disallow clipped blits in ddraw_surface7_BltFast().
Alexandre Julliard
julliard at winehq.org
Thu Jan 5 15:24:42 CST 2012
Module: wine
Branch: master
Commit: 223b0736c0f6683c244c652d0857b774731f9bf2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=223b0736c0f6683c244c652d0857b774731f9bf2
Author: Henri Verbeet <hverbeet at 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);
More information about the wine-cvs
mailing list