mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-11 03:17:16 +00:00
ddraw/tests: Test user memory and getdc interaction.
Some Windows Media Player 9 visualization plugins used ddraw in this way to get a dc for their custom memory allocations.
This commit is contained in:
parent
9b67b1b8a1
commit
5a656dead6
|
@ -4862,6 +4862,71 @@ done:
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_user_memory_getdc(void)
|
||||
{
|
||||
IDirectDraw2 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
DDSURFACEDESC ddsd;
|
||||
IDirectDrawSurface *surface;
|
||||
IDirectDrawSurface3 *surface3;
|
||||
DWORD data[16][16];
|
||||
ULONG ref;
|
||||
HDC dc;
|
||||
|
||||
if (!(ddraw = create_ddraw()))
|
||||
{
|
||||
skip("Failed to create a ddraw object, skipping test.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 640, 480, 0, 0, 0, 0);
|
||||
|
||||
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
|
||||
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT;
|
||||
ddsd.dwWidth = 16;
|
||||
ddsd.dwHeight = 16;
|
||||
ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
|
||||
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||
U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 32;
|
||||
U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x00ff0000;
|
||||
U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000ff00;
|
||||
U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000000ff;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY;
|
||||
hr = IDirectDraw2_CreateSurface(ddraw, &ddsd, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirectDrawSurface3, (void **)&surface3);
|
||||
ok(SUCCEEDED(hr), "Failed to get IDirectDrawSurface3 interface, hr %#x.\n", hr);
|
||||
IDirectDrawSurface_Release(surface);
|
||||
|
||||
memset(data, 0xaa, sizeof(data));
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_LPSURFACE;
|
||||
ddsd.lpSurface = data;
|
||||
hr = IDirectDrawSurface3_SetSurfaceDesc(surface3, &ddsd, 0);
|
||||
ok(SUCCEEDED(hr), "Failed to set surface desc, hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface3_GetDC(surface3, &dc);
|
||||
ok(SUCCEEDED(hr), "Failed to get DC, hr %#x.\n", hr);
|
||||
BitBlt(dc, 0, 0, 16, 8, NULL, 0, 0, WHITENESS);
|
||||
BitBlt(dc, 0, 8, 16, 8, NULL, 0, 0, BLACKNESS);
|
||||
hr = IDirectDrawSurface3_ReleaseDC(surface3, dc);
|
||||
ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr);
|
||||
|
||||
ok(data[0][0] == 0xffffffff, "Expected color 0xffffffff, got %#x.\n", data[0][0]);
|
||||
ok(data[15][15] == 0x00000000, "Expected color 0x00000000, got %#x.\n", data[15][15]);
|
||||
|
||||
IDirectDrawSurface3_Release(surface3);
|
||||
ref = IDirectDraw2_Release(ddraw);
|
||||
ok(ref == 0, "Ddraw object not properly released, refcount %u.\n", ref);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
START_TEST(ddraw2)
|
||||
{
|
||||
test_coop_level_create_device_window();
|
||||
|
@ -4896,4 +4961,5 @@ START_TEST(ddraw2)
|
|||
test_surface_discard();
|
||||
test_flip();
|
||||
test_set_surface_desc();
|
||||
test_user_memory_getdc();
|
||||
}
|
||||
|
|
|
@ -5464,6 +5464,66 @@ done:
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_user_memory_getdc(void)
|
||||
{
|
||||
IDirectDraw4 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
DDSURFACEDESC2 ddsd;
|
||||
IDirectDrawSurface4 *surface;
|
||||
DWORD data[16][16];
|
||||
ULONG ref;
|
||||
HDC dc;
|
||||
|
||||
if (!(ddraw = create_ddraw()))
|
||||
{
|
||||
skip("Failed to create a ddraw object, skipping test.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 640, 480, 0, 0, 0, 0);
|
||||
|
||||
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
|
||||
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT;
|
||||
ddsd.dwWidth = 16;
|
||||
ddsd.dwHeight = 16;
|
||||
ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
|
||||
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||
U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 32;
|
||||
U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x00ff0000;
|
||||
U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000ff00;
|
||||
U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000000ff;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY;
|
||||
hr = IDirectDraw4_CreateSurface(ddraw, &ddsd, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
|
||||
memset(data, 0xaa, sizeof(data));
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_LPSURFACE;
|
||||
ddsd.lpSurface = data;
|
||||
hr = IDirectDrawSurface4_SetSurfaceDesc(surface, &ddsd, 0);
|
||||
ok(SUCCEEDED(hr), "Failed to set surface desc, hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface4_GetDC(surface, &dc);
|
||||
ok(SUCCEEDED(hr), "Failed to get DC, hr %#x.\n", hr);
|
||||
BitBlt(dc, 0, 0, 16, 8, NULL, 0, 0, WHITENESS);
|
||||
BitBlt(dc, 0, 8, 16, 8, NULL, 0, 0, BLACKNESS);
|
||||
hr = IDirectDrawSurface4_ReleaseDC(surface, dc);
|
||||
ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr);
|
||||
|
||||
ok(data[0][0] == 0xffffffff, "Expected color 0xffffffff, got %#x.\n", data[0][0]);
|
||||
ok(data[15][15] == 0x00000000, "Expected color 0x00000000, got %#x.\n", data[15][15]);
|
||||
|
||||
IDirectDrawSurface4_Release(surface);
|
||||
ref = IDirectDraw4_Release(ddraw);
|
||||
ok(ref == 0, "Ddraw object not properly released, refcount %u.\n", ref);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
test_process_vertices();
|
||||
|
@ -5503,4 +5563,5 @@ START_TEST(ddraw4)
|
|||
test_surface_discard();
|
||||
test_flip();
|
||||
test_set_surface_desc();
|
||||
test_user_memory_getdc();
|
||||
}
|
||||
|
|
|
@ -5352,6 +5352,66 @@ done:
|
|||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
static void test_user_memory_getdc(void)
|
||||
{
|
||||
IDirectDraw7 *ddraw;
|
||||
HWND window;
|
||||
HRESULT hr;
|
||||
DDSURFACEDESC2 ddsd;
|
||||
IDirectDrawSurface7 *surface;
|
||||
DWORD data[16][16];
|
||||
ULONG ref;
|
||||
HDC dc;
|
||||
|
||||
if (!(ddraw = create_ddraw()))
|
||||
{
|
||||
skip("Failed to create a ddraw object, skipping test.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
|
||||
0, 0, 640, 480, 0, 0, 0, 0);
|
||||
|
||||
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
|
||||
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
|
||||
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT;
|
||||
ddsd.dwWidth = 16;
|
||||
ddsd.dwHeight = 16;
|
||||
ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat);
|
||||
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||
U1(ddsd.ddpfPixelFormat).dwRGBBitCount = 32;
|
||||
U2(ddsd.ddpfPixelFormat).dwRBitMask = 0x00ff0000;
|
||||
U3(ddsd.ddpfPixelFormat).dwGBitMask = 0x0000ff00;
|
||||
U4(ddsd.ddpfPixelFormat).dwBBitMask = 0x000000ff;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY;
|
||||
hr = IDirectDraw7_CreateSurface(ddraw, &ddsd, &surface, NULL);
|
||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr);
|
||||
|
||||
memset(data, 0xaa, sizeof(data));
|
||||
reset_ddsd(&ddsd);
|
||||
ddsd.dwFlags = DDSD_LPSURFACE;
|
||||
ddsd.lpSurface = data;
|
||||
hr = IDirectDrawSurface7_SetSurfaceDesc(surface, &ddsd, 0);
|
||||
ok(SUCCEEDED(hr), "Failed to set surface desc, hr %#x.\n", hr);
|
||||
|
||||
hr = IDirectDrawSurface7_GetDC(surface, &dc);
|
||||
ok(SUCCEEDED(hr), "Failed to get DC, hr %#x.\n", hr);
|
||||
BitBlt(dc, 0, 0, 16, 8, NULL, 0, 0, WHITENESS);
|
||||
BitBlt(dc, 0, 8, 16, 8, NULL, 0, 0, BLACKNESS);
|
||||
hr = IDirectDrawSurface7_ReleaseDC(surface, dc);
|
||||
ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr);
|
||||
|
||||
ok(data[0][0] == 0xffffffff, "Expected color 0xffffffff, got %#x.\n", data[0][0]);
|
||||
ok(data[15][15] == 0x00000000, "Expected color 0x00000000, got %#x.\n", data[15][15]);
|
||||
|
||||
IDirectDrawSurface7_Release(surface);
|
||||
ref = IDirectDraw7_Release(ddraw);
|
||||
ok(ref == 0, "Ddraw object not properly released, refcount %u.\n", ref);
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
START_TEST(ddraw7)
|
||||
{
|
||||
HMODULE module = GetModuleHandleA("ddraw.dll");
|
||||
|
@ -5399,4 +5459,5 @@ START_TEST(ddraw7)
|
|||
test_surface_discard();
|
||||
test_flip();
|
||||
test_set_surface_desc();
|
||||
test_user_memory_getdc();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue