Module: wine Branch: stable Commit: bcaf945ed2f1e4d0ba2b4e0f53ab2c42d796575d URL: http://source.winehq.org/git/wine.git/?a=commit;h=bcaf945ed2f1e4d0ba2b4e0f53...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Apr 24 23:31:30 2017 +0200
ddraw: Ignore unsupported blit flags.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 6b41501344ecedf12692902f08aada283847e8cd) Conflicts: dlls/ddraw/surface.c Signed-off-by: Michael Stefaniuc mstefani@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 94f850b..0c8081d 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -1547,15 +1547,33 @@ 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; HRESULT hr = DD_OK; DDBLTFX rop_fx;
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 999547d..a09570c 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -8867,10 +8867,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 1acaa96..bc3f345 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -9955,10 +9955,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 557de42..9314ca1 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -11076,10 +11076,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 a800629..43ba419 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -11402,10 +11402,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);