ddraw/tests: Try 24 bpp display modes if 32 bpp modes are unavailable.

This commit is contained in:
Henri Verbeet 2014-02-28 11:26:51 +01:00 committed by Alexandre Julliard
parent 1168948764
commit 048f4d4c26
4 changed files with 158 additions and 130 deletions

View File

@ -96,6 +96,13 @@ static void destroy_window_thread(struct create_window_thread_param *p)
CloseHandle(p->thread);
}
static HRESULT set_display_mode(IDirectDraw *ddraw, DWORD width, DWORD height)
{
if (SUCCEEDED(IDirectDraw_SetDisplayMode(ddraw, width, height, 32)))
return DD_OK;
return IDirectDraw_SetDisplayMode(ddraw, width, height, 24);
}
static D3DCOLOR get_surface_color(IDirectDrawSurface *surface, UINT x, UINT y)
{
RECT rect = {x, y, x + 1, y + 1};
@ -2190,8 +2197,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw_SetDisplayMode(ddraw, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2315,7 +2322,7 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw_SetDisplayMode(ddraw, 640, 480, 32);
hr = set_display_mode(ddraw, 640, 480);
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
{
win_skip("Broken SetDisplayMode(), skipping remaining tests.\n");
@ -2323,7 +2330,7 @@ static void test_coop_level_mode_set(void)
IDirectDraw_Release(ddraw);
goto done;
}
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2446,8 +2453,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw_SetDisplayMode(ddraw, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2532,8 +2539,8 @@ static void test_coop_level_mode_set(void)
/* Unlike ddraw2-7, changing from EXCLUSIVE to NORMAL does not restore the resolution */
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw_SetDisplayMode(ddraw, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2591,7 +2598,7 @@ static void test_coop_level_mode_set_multi(void)
/* With just a single ddraw object, the display mode is restored on
* release. */
hr = IDirectDraw_SetDisplayMode(ddraw1, 800, 600, 32);
hr = set_display_mode(ddraw1, 800, 600);
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
{
win_skip("Broken SetDisplayMode(), skipping test.\n");
@ -2599,7 +2606,7 @@ static void test_coop_level_mode_set_multi(void)
DestroyWindow(window);
return;
}
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2615,16 +2622,16 @@ static void test_coop_level_mode_set_multi(void)
/* When there are multiple ddraw objects, the display mode is restored to
* the initial mode, before the first SetDisplayMode() call. */
ddraw1 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw1, 800, 600, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw2, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2646,16 +2653,16 @@ static void test_coop_level_mode_set_multi(void)
/* Regardless of release ordering. */
ddraw1 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw1, 800, 600, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw2, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2678,8 +2685,8 @@ static void test_coop_level_mode_set_multi(void)
/* But only for ddraw objects that called SetDisplayMode(). */
ddraw1 = create_ddraw();
ddraw2 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw2, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2702,16 +2709,16 @@ static void test_coop_level_mode_set_multi(void)
/* If there's a ddraw object that's currently in exclusive mode, it blocks
* restoring the display mode. */
ddraw1 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw1, 800, 600, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw2, 640, 480, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2736,8 +2743,8 @@ static void test_coop_level_mode_set_multi(void)
/* Exclusive mode blocks mode setting on other ddraw objects in general. */
ddraw1 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw1, 800, 600, 32);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2747,7 +2754,7 @@ static void test_coop_level_mode_set_multi(void)
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
ddraw2 = create_ddraw();
hr = IDirectDraw_SetDisplayMode(ddraw2, 640, 480, 32);
hr = set_display_mode(ddraw2, 640, 480);
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
ref = IDirectDraw_Release(ddraw1);
@ -3849,7 +3856,7 @@ static void test_flip(void)
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 640, 480, 0, 0, 0, 0);
hr = IDirectDraw_SetDisplayMode(ddraw, 640, 480, 32);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);

View File

@ -110,6 +110,13 @@ static IDirectDrawSurface *get_depth_stencil(IDirect3DDevice2 *device)
return ret;
}
static HRESULT set_display_mode(IDirectDraw2 *ddraw, DWORD width, DWORD height)
{
if (SUCCEEDED(IDirectDraw2_SetDisplayMode(ddraw, width, height, 32, 0, 0)))
return DD_OK;
return IDirectDraw2_SetDisplayMode(ddraw, width, height, 24, 0, 0);
}
static D3DCOLOR get_surface_color(IDirectDrawSurface *surface, UINT x, UINT y)
{
RECT rect = {x, y, x + 1, y + 1};
@ -2401,8 +2408,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2526,7 +2533,7 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw, 640, 480);
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
{
win_skip("Broken SetDisplayMode(), skipping remaining tests.\n");
@ -2534,7 +2541,7 @@ static void test_coop_level_mode_set(void)
IDirectDraw2_Release(ddraw);
goto done;
}
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2657,8 +2664,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2743,8 +2750,8 @@ static void test_coop_level_mode_set(void)
/* Changing the coop level from EXCLUSIVE to NORMAL restores the screen resolution */
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -2782,8 +2789,8 @@ static void test_coop_level_mode_set(void)
/* The screen restore is a property of DDSCL_EXCLUSIVE */
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2809,8 +2816,8 @@ static void test_coop_level_mode_set(void)
/* If the window is changed at the same time, messages are sent to the new window. */
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -2891,7 +2898,7 @@ static void test_coop_level_mode_set_multi(void)
/* With just a single ddraw object, the display mode is restored on
* release. */
hr = IDirectDraw2_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
hr = set_display_mode(ddraw1, 800, 600);
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
{
win_skip("Broken SetDisplayMode(), skipping test.\n");
@ -2899,7 +2906,7 @@ static void test_coop_level_mode_set_multi(void)
DestroyWindow(window);
return;
}
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2915,16 +2922,16 @@ static void test_coop_level_mode_set_multi(void)
/* When there are multiple ddraw objects, the display mode is restored to
* the initial mode, before the first SetDisplayMode() call. */
ddraw1 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2946,16 +2953,16 @@ static void test_coop_level_mode_set_multi(void)
/* Regardless of release ordering. */
ddraw1 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2978,8 +2985,8 @@ static void test_coop_level_mode_set_multi(void)
/* But only for ddraw objects that called SetDisplayMode(). */
ddraw1 = create_ddraw();
ddraw2 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3002,16 +3009,16 @@ static void test_coop_level_mode_set_multi(void)
/* If there's a ddraw object that's currently in exclusive mode, it blocks
* restoring the display mode. */
ddraw1 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3036,8 +3043,8 @@ static void test_coop_level_mode_set_multi(void)
/* Exclusive mode blocks mode setting on other ddraw objects in general. */
ddraw1 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3047,7 +3054,7 @@ static void test_coop_level_mode_set_multi(void)
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
ddraw2 = create_ddraw();
hr = IDirectDraw2_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw2, 640, 480);
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
ref = IDirectDraw2_Release(ddraw1);
@ -3225,8 +3232,8 @@ static BOOL test_mode_restored(IDirectDraw2 *ddraw, HWND window)
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -4530,7 +4537,7 @@ static void test_flip(void)
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 640, 480, 0, 0, 0, 0);
hr = IDirectDraw2_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);

View File

@ -150,6 +150,13 @@ static IDirectDrawSurface4 *get_depth_stencil(IDirect3DDevice3 *device)
return ret;
}
static HRESULT set_display_mode(IDirectDraw4 *ddraw, DWORD width, DWORD height)
{
if (SUCCEEDED(IDirectDraw4_SetDisplayMode(ddraw, width, height, 32, 0, 0)))
return DD_OK;
return IDirectDraw4_SetDisplayMode(ddraw, width, height, 24, 0, 0);
}
static D3DCOLOR get_surface_color(IDirectDrawSurface4 *surface, UINT x, UINT y)
{
RECT rect = {x, y, x + 1, y + 1};
@ -2525,8 +2532,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2650,8 +2657,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2774,8 +2781,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2860,8 +2867,8 @@ static void test_coop_level_mode_set(void)
/* Changing the coop level from EXCLUSIVE to NORMAL restores the screen resolution */
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -2899,8 +2906,8 @@ static void test_coop_level_mode_set(void)
/* The screen restore is a property of DDSCL_EXCLUSIVE */
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2926,8 +2933,8 @@ static void test_coop_level_mode_set(void)
/* If the window is changed at the same time, messages are sent to the new window. */
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -3007,8 +3014,8 @@ static void test_coop_level_mode_set_multi(void)
/* With just a single ddraw object, the display mode is restored on
* release. */
hr = IDirectDraw4_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3024,16 +3031,16 @@ static void test_coop_level_mode_set_multi(void)
/* When there are multiple ddraw objects, the display mode is restored to
* the initial mode, before the first SetDisplayMode() call. */
ddraw1 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3055,16 +3062,16 @@ static void test_coop_level_mode_set_multi(void)
/* Regardless of release ordering. */
ddraw1 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3087,8 +3094,8 @@ static void test_coop_level_mode_set_multi(void)
/* But only for ddraw objects that called SetDisplayMode(). */
ddraw1 = create_ddraw();
ddraw2 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3111,16 +3118,16 @@ static void test_coop_level_mode_set_multi(void)
/* If there's a ddraw object that's currently in exclusive mode, it blocks
* restoring the display mode. */
ddraw1 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3145,8 +3152,8 @@ static void test_coop_level_mode_set_multi(void)
/* Exclusive mode blocks mode setting on other ddraw objects in general. */
ddraw1 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -3156,7 +3163,7 @@ static void test_coop_level_mode_set_multi(void)
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
ddraw2 = create_ddraw();
hr = IDirectDraw4_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw2, 640, 480);
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
ref = IDirectDraw4_Release(ddraw1);
@ -3458,8 +3465,8 @@ static BOOL test_mode_restored(IDirectDraw4 *ddraw, HWND window)
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -5135,7 +5142,7 @@ static void test_flip(void)
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 640, 480, 0, 0, 0, 0);
hr = IDirectDraw4_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);

View File

@ -165,6 +165,13 @@ static IDirectDrawSurface7 *get_depth_stencil(IDirect3DDevice7 *device)
return ret;
}
static HRESULT set_display_mode(IDirectDraw7 *ddraw, DWORD width, DWORD height)
{
if (SUCCEEDED(IDirectDraw7_SetDisplayMode(ddraw, width, height, 32, 0, 0)))
return DD_OK;
return IDirectDraw7_SetDisplayMode(ddraw, width, height, 24, 0, 0);
}
static D3DCOLOR get_surface_color(IDirectDrawSurface7 *surface, UINT x, UINT y)
{
RECT rect = {x, y, x + 1, y + 1};
@ -2251,8 +2258,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2376,8 +2383,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2500,8 +2507,8 @@ static void test_coop_level_mode_set(void)
screen_size.cx = 0;
screen_size.cy = 0;
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
expect_messages = NULL;
@ -2586,8 +2593,8 @@ static void test_coop_level_mode_set(void)
/* Changing the coop level from EXCLUSIVE to NORMAL restores the screen resolution */
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -2625,8 +2632,8 @@ static void test_coop_level_mode_set(void)
/* The screen restore is a property of DDSCL_EXCLUSIVE */
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2652,8 +2659,8 @@ static void test_coop_level_mode_set(void)
/* If the window is changed at the same time, messages are sent to the new window. */
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
expect_messages = exclusive_messages;
screen_size.cx = 0;
@ -2733,8 +2740,8 @@ static void test_coop_level_mode_set_multi(void)
/* With just a single ddraw object, the display mode is restored on
* release. */
hr = IDirectDraw7_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2750,16 +2757,16 @@ static void test_coop_level_mode_set_multi(void)
/* When there are multiple ddraw objects, the display mode is restored to
* the initial mode, before the first SetDisplayMode() call. */
ddraw1 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2781,16 +2788,16 @@ static void test_coop_level_mode_set_multi(void)
/* Regardless of release ordering. */
ddraw1 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2813,8 +2820,8 @@ static void test_coop_level_mode_set_multi(void)
/* But only for ddraw objects that called SetDisplayMode(). */
ddraw1 = create_ddraw();
ddraw2 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2837,16 +2844,16 @@ static void test_coop_level_mode_set_multi(void)
/* If there's a ddraw object that's currently in exclusive mode, it blocks
* restoring the display mode. */
ddraw1 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
ok(h == 600, "Got unexpected screen height %u.\n", h);
ddraw2 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw2, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 640, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2871,8 +2878,8 @@ static void test_coop_level_mode_set_multi(void)
/* Exclusive mode blocks mode setting on other ddraw objects in general. */
ddraw1 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw1, 800, 600, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw1, 800, 600);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
w = GetSystemMetrics(SM_CXSCREEN);
ok(w == 800, "Got unexpected screen width %u.\n", w);
h = GetSystemMetrics(SM_CYSCREEN);
@ -2882,7 +2889,7 @@ static void test_coop_level_mode_set_multi(void)
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
ddraw2 = create_ddraw();
hr = IDirectDraw7_SetDisplayMode(ddraw2, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw2, 640, 480);
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
ref = IDirectDraw7_Release(ddraw1);
@ -3181,8 +3188,8 @@ static BOOL test_mode_restored(IDirectDraw7 *ddraw, HWND window)
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
ok(SUCCEEDED(hr), "SetDisplayMode failed, hr %#x.\n", hr);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -5013,7 +5020,7 @@ static void test_flip(void)
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 640, 480, 0, 0, 0, 0);
hr = IDirectDraw7_SetDisplayMode(ddraw, 640, 480, 32, 0, 0);
hr = set_display_mode(ddraw, 640, 480);
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);