Henri Verbeet : ddraw: Ignore unsupported blit flags.
Alexandre Julliard
julliard at winehq.org
Tue Apr 25 16:22:34 CDT 2017
Module: wine
Branch: master
Commit: 6b41501344ecedf12692902f08aada283847e8cd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6b41501344ecedf12692902f08aada283847e8cd
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Mon Apr 24 23:31:30 2017 +0200
ddraw: Ignore unsupported blit flags.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ddraw/surface.c | 24 +++++++++++++++++++++---
dlls/ddraw/tests/ddraw1.c | 4 ++--
dlls/ddraw/tests/ddraw2.c | 4 ++--
dlls/ddraw/tests/ddraw4.c | 4 ++--
dlls/ddraw/tests/ddraw7.c | 4 ++--
5 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 6c4ed11..90731f0 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -1570,6 +1570,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *
struct ddraw_surface *dst_impl = impl_from_IDirectDrawSurface7(iface);
struct ddraw_surface *src_impl = unsafe_impl_from_IDirectDrawSurface7(src_surface);
struct wined3d_blt_fx wined3d_fx;
+ DWORD unsupported_flags;
DWORD fill_colour = 0;
HRESULT hr = DD_OK;
DDBLTFX rop_fx;
@@ -1577,9 +1578,26 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *
TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
- /* Check for validity of the flags here. WineD3D Has the software-opengl selection path and would have
- * to check at 2 places, and sometimes do double checks. This also saves the call to wined3d :-)
- */
+ unsupported_flags = DDBLT_ALPHADEST
+ | DDBLT_ALPHADESTCONSTOVERRIDE
+ | DDBLT_ALPHADESTNEG
+ | DDBLT_ALPHADESTSURFACEOVERRIDE
+ | DDBLT_ALPHAEDGEBLEND
+ | DDBLT_ALPHASRC
+ | DDBLT_ALPHASRCCONSTOVERRIDE
+ | DDBLT_ALPHASRCNEG
+ | DDBLT_ALPHASRCSURFACEOVERRIDE
+ | DDBLT_ZBUFFER
+ | DDBLT_ZBUFFERDESTCONSTOVERRIDE
+ | DDBLT_ZBUFFERDESTOVERRIDE
+ | DDBLT_ZBUFFERSRCCONSTOVERRIDE
+ | DDBLT_ZBUFFERSRCOVERRIDE;
+ if (flags & unsupported_flags)
+ {
+ WARN("Ignoring unsupported flags %#x.\n", flags & unsupported_flags);
+ flags &= ~unsupported_flags;
+ }
+
if ((flags & DDBLT_KEYSRCOVERRIDE) && (!fx || flags & DDBLT_KEYSRC))
{
WARN("Invalid source color key parameters, returning DDERR_INVALIDPARAMS\n");
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 68f56ff..ac4942d 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -8959,10 +8959,10 @@ static void test_blt_z_alpha(void)
ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
hr = IDirectDrawSurface_Blt(dst_surface, NULL, src_surface, NULL, blt_flags[i] | DDBLT_WAIT, &fx);
- todo_wine ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+ ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
color = get_surface_color(dst_surface, 32, 32);
- todo_wine ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
+ ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
}
IDirectDrawSurface_Release(dst_surface);
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index df734f1..67a2b06 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -10047,10 +10047,10 @@ static void test_blt_z_alpha(void)
ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
hr = IDirectDrawSurface_Blt(dst_surface, NULL, src_surface, NULL, blt_flags[i] | DDBLT_WAIT, &fx);
- todo_wine ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+ ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
color = get_surface_color(dst_surface, 32, 32);
- todo_wine ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
+ ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
}
IDirectDrawSurface_Release(dst_surface);
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 8072bc9..948a1a5 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -11159,10 +11159,10 @@ static void test_blt_z_alpha(void)
ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
hr = IDirectDrawSurface4_Blt(dst_surface, NULL, src_surface, NULL, blt_flags[i] | DDBLT_WAIT, &fx);
- todo_wine ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+ ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
color = get_surface_color(dst_surface, 32, 32);
- todo_wine ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
+ ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
}
IDirectDrawSurface4_Release(dst_surface);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 601fcb3..79ce80f 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -11485,10 +11485,10 @@ static void test_blt_z_alpha(void)
ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
hr = IDirectDrawSurface7_Blt(dst_surface, NULL, src_surface, NULL, blt_flags[i] | DDBLT_WAIT, &fx);
- todo_wine ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+ ok(SUCCEEDED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
color = get_surface_color(dst_surface, 32, 32);
- todo_wine ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
+ ok(compare_color(color, 0x0000ff00, 0), "Test %u: Got unexpected color 0x%08x.\n", i, color);
}
IDirectDrawSurface7_Release(dst_surface);
More information about the wine-cvs
mailing list