From: Rémi Bernon rbernon@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58844 --- dlls/d3d9/tests/device.c | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+)
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c index b782833c37d..a67c4025ac1 100644 --- a/dlls/d3d9/tests/device.c +++ b/dlls/d3d9/tests/device.c @@ -15299,6 +15299,129 @@ static void test_d3d9on12(void) out: DestroyWindow(window); } +static RGNDATA *get_region_data(HRGN region) +{ + RGNDATA *data = NULL; + DWORD size; + + if (region && (size = GetRegionData(region, 0, NULL)) && (data = malloc(size))) + GetRegionData(region, size, data); + + return data; +} + +static void test_window_region(void) +{ + struct device_desc device_desc; + IDirect3DDevice9 *device; + IDirect3D9 *d3d9; + RGNDATA *data; + HRGN region; + HWND window; + UINT ret; + HDC dc; + + window = CreateWindowA("static", "d3d9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN, + CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, NULL, NULL, NULL, NULL); + CreateWindowA("#32770", "", WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, window, NULL, NULL, NULL); + flush_events(); + + d3d9 = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d9, "Failed to create a D3D object.\n"); + + + device_desc.adapter_ordinal = D3DADAPTER_DEFAULT; + device_desc.device_window = window; + device_desc.width = 300; + device_desc.height = 300; + device_desc.flags = CREATE_DEVICE_NOWINDOWCHANGES; + if (!(device = create_device(d3d9, window, &device_desc))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D9_Release(d3d9); + DestroyWindow(window); + return; + } + + region = CreateRectRgn(0, 0, 0, 0); + dc = GetDCEx(window, 0, DCX_CACHE | DCX_USESTYLE); + ret = GetRandomRgn(dc, region, SYSRGN); + ok(ret == 1, "got %d\n", ret); + data = get_region_data(region); + ok(data->rdh.nCount == 2, "got nCount %lu\n", data->rdh.nCount); + free(data); + DeleteObject(region); + + IDirect3DDevice9_Release(device); + + device_desc.flags = 0; + if (!(device = create_device(d3d9, window, &device_desc))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D9_Release(d3d9); + DestroyWindow(window); + return; + } + + region = CreateRectRgn(0, 0, 0, 0); + dc = GetDCEx(window, 0, DCX_CACHE | DCX_USESTYLE); + ret = GetRandomRgn(dc, region, SYSRGN); + ok(ret == 1, "got %d\n", ret); + data = get_region_data(region); + ok(data->rdh.nCount == 2, "got nCount %lu\n", data->rdh.nCount); + free(data); + DeleteObject(region); + + IDirect3DDevice9_Release(device); + + device_desc.width = registry_mode.dmPelsWidth; + device_desc.height = registry_mode.dmPelsHeight; + device_desc.flags = CREATE_DEVICE_NOWINDOWCHANGES | CREATE_DEVICE_FULLSCREEN; + if (!(device = create_device(d3d9, window, &device_desc))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D9_Release(d3d9); + DestroyWindow(window); + return; + } + + region = CreateRectRgn(0, 0, 0, 0); + dc = GetDCEx(window, 0, DCX_CACHE | DCX_USESTYLE); + ret = GetRandomRgn(dc, region, SYSRGN); + ok(ret == 1, "got %d\n", ret); + data = get_region_data(region); + ok(data->rdh.nCount == 2, "got nCount %lu\n", data->rdh.nCount); + free(data); + ReleaseDC(window, dc); + DeleteObject(region); + + IDirect3DDevice9_Release(device); + + device_desc.flags = CREATE_DEVICE_FULLSCREEN; + if (!(device = create_device(d3d9, window, &device_desc))) + { + skip("Failed to create a D3D device, skipping tests.\n"); + IDirect3D9_Release(d3d9); + DestroyWindow(window); + return; + } + + region = CreateRectRgn(0, 0, 0, 0); + dc = GetDCEx(window, 0, DCX_CACHE | DCX_USESTYLE); + ret = GetRandomRgn(dc, region, SYSRGN); + ok(ret == 1, "got %d\n", ret); + data = get_region_data(region); + ok(data->rdh.nCount == 2, "got nCount %lu\n", data->rdh.nCount); + free(data); + ReleaseDC(window, dc); + DeleteObject(region); + + IDirect3DDevice9_Release(device); + + + IDirect3D9_Release(d3d9); + DestroyWindow(window); +}
START_TEST(device) { @@ -15437,6 +15560,7 @@ START_TEST(device) test_cursor_clipping(); test_window_position(); test_d3d9on12(); + test_window_region();
UnregisterClassA("d3d9_test_wc", GetModuleHandleA(NULL)); }