ddraw/tests: Test system memory surface with lost device for ddraw1.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
47e777d6ea
commit
c24551cae8
|
@ -7310,6 +7310,7 @@ static void test_palette_alpha(void)
|
|||
static void test_lost_device(void)
|
||||
{
|
||||
IDirectDrawSurface *surface, *back_buffer;
|
||||
IDirectDrawSurface *sysmem_surface;
|
||||
DDSURFACEDESC surface_desc;
|
||||
HWND window1, window2;
|
||||
IDirectDraw *ddraw;
|
||||
|
@ -7325,7 +7326,7 @@ static void test_lost_device(void)
|
|||
ddraw = create_ddraw();
|
||||
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
|
@ -7333,12 +7334,23 @@ static void test_lost_device(void)
|
|||
surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||
surface_desc.dwBackBufferCount = 1;
|
||||
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
surface_desc.dwSize = sizeof(surface_desc);
|
||||
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
|
||||
surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
|
||||
surface_desc.dwWidth = 100;
|
||||
surface_desc.dwHeight = 100;
|
||||
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &sysmem_surface, NULL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
ret = SetForegroundWindow(GetDesktopWindow());
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
|
@ -7346,6 +7358,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
ret = SetForegroundWindow(window1);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
|
@ -7353,6 +7367,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = restore_surfaces(ddraw);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7360,6 +7376,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_NORMAL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7368,6 +7386,8 @@ static void test_lost_device(void)
|
|||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_NOEXCLUSIVEMODE || broken(ddraw_is_warp(ddraw) && hr == DDERR_SURFACELOST),
|
||||
"Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
/* Trying to restore the primary will crash, probably because flippable
|
||||
* surfaces can't exist in DDSCL_NORMAL. */
|
||||
|
@ -7377,7 +7397,7 @@ static void test_lost_device(void)
|
|||
surface_desc.dwFlags = DDSD_CAPS;
|
||||
surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
|
||||
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7386,21 +7406,29 @@ static void test_lost_device(void)
|
|||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
ret = SetForegroundWindow(window1);
|
||||
ok(ret, "Failed to set foreground window.\n");
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = restore_surfaces(ddraw);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
IDirectDrawSurface_Release(surface);
|
||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||
|
@ -7409,7 +7437,7 @@ static void test_lost_device(void)
|
|||
surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
|
||||
surface_desc.dwBackBufferCount = 1;
|
||||
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7417,6 +7445,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_NORMAL | DDSCL_FULLSCREEN);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7424,6 +7454,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window1, DDSCL_NORMAL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7431,6 +7463,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7438,6 +7472,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL | DDSCL_FULLSCREEN);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7445,6 +7481,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_NOEXCLUSIVEMODE, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDraw_SetCooperativeLevel(ddraw, window2, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
@ -7452,6 +7490,8 @@ static void test_lost_device(void)
|
|||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_Flip(surface, NULL, DDFLIP_WAIT);
|
||||
ok(hr == DDERR_SURFACELOST, "Got unexpected hr %#x.\n", hr);
|
||||
hr = IDirectDrawSurface_IsLost(sysmem_surface);
|
||||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
|
||||
memset(&caps, 0, sizeof(caps));
|
||||
caps.dwCaps = DDSCAPS_FLIP;
|
||||
|
@ -7466,6 +7506,7 @@ static void test_lost_device(void)
|
|||
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
|
||||
IDirectDrawSurface_Release(back_buffer);
|
||||
|
||||
IDirectDrawSurface_Release(sysmem_surface);
|
||||
IDirectDrawSurface_Release(surface);
|
||||
refcount = IDirectDraw_Release(ddraw);
|
||||
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
|
||||
|
|
Loading…
Reference in New Issue