From: Stefan Dösinger Subject: [PATCH 5/6] d3d8/tests: Use create_device for test_fpu_setup. Message-Id: <1413803335-25557-5-git-send-email-stefan@codeweavers.com> Date: Mon, 20 Oct 2014 13:08:54 +0200 --- dlls/d3d8/tests/device.c | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c index 2278c06..854122c 100644 --- a/dlls/d3d8/tests/device.c +++ b/dlls/d3d8/tests/device.c @@ -32,6 +32,8 @@ struct vec3 }; #define CREATE_DEVICE_FULLSCREEN 0x01 +#define CREATE_DEVICE_FPU_PRESERVE 0x02 +#define CREATE_DEVICE_HWVP_ONLY 0x04 struct device_desc { @@ -92,6 +94,7 @@ static IDirect3DDevice8 *create_device(IDirect3D8 *d3d8, HWND focus_window, cons { D3DPRESENT_PARAMETERS present_parameters = {0}; IDirect3DDevice8 *device; + DWORD behavior_flags = D3DCREATE_HARDWARE_VERTEXPROCESSING; present_parameters.BackBufferWidth = 640; present_parameters.BackBufferHeight = 480; @@ -108,17 +111,26 @@ static IDirect3DDevice8 *create_device(IDirect3D8 *d3d8, HWND focus_window, cons present_parameters.BackBufferHeight = desc->height; present_parameters.hDeviceWindow = desc->device_window; present_parameters.Windowed = !(desc->flags & CREATE_DEVICE_FULLSCREEN); + if (desc->flags & CREATE_DEVICE_FPU_PRESERVE) + behavior_flags |= D3DCREATE_FPU_PRESERVE; } if (SUCCEEDED(IDirect3D8_CreateDevice(d3d8, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, focus_window, - D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device))) return device; + behavior_flags, &present_parameters, &device))) + return device; present_parameters.AutoDepthStencilFormat = D3DFMT_D16; if (SUCCEEDED(IDirect3D8_CreateDevice(d3d8, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, focus_window, - D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device))) return device; + behavior_flags, &present_parameters, &device))) + return device; + + if (desc && desc->flags & CREATE_DEVICE_HWVP_ONLY) + return NULL; + behavior_flags ^= (D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_SOFTWARE_VERTEXPROCESSING); if (SUCCEEDED(IDirect3D8_CreateDevice(d3d8, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, focus_window, - D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters, &device))) return device; + behavior_flags, &present_parameters, &device))) + return device; return NULL; } @@ -2578,7 +2590,7 @@ static inline WORD get_fpu_cw(void) static void test_fpu_setup(void) { #if defined(D3D8_TEST_SET_FPU_CW) && defined(D3D8_TEST_GET_FPU_CW) - D3DPRESENT_PARAMETERS present_parameters; + struct device_desc device_desc; IDirect3DDevice8 *device; D3DDISPLAYMODE d3ddm; IDirect3D8 *d3d8; @@ -2594,21 +2606,18 @@ static void test_fpu_setup(void) hr = IDirect3D8_GetAdapterDisplayMode(d3d8, D3DADAPTER_DEFAULT, &d3ddm); ok(SUCCEEDED(hr), "GetAdapterDisplayMode failed, hr %#x.\n", hr); - memset(&present_parameters, 0, sizeof(present_parameters)); - present_parameters.Windowed = TRUE; - present_parameters.hDeviceWindow = window; - present_parameters.SwapEffect = D3DSWAPEFFECT_DISCARD; - present_parameters.BackBufferFormat = d3ddm.Format; + device_desc.device_window = window; + device_desc.width = 640; + device_desc.height = 480; + device_desc.flags = CREATE_DEVICE_HWVP_ONLY; set_fpu_cw(0xf60); cw = get_fpu_cw(); ok(cw == 0xf60, "cw is %#x, expected 0xf60.\n", cw); - hr = IDirect3D8_CreateDevice(d3d8, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, - D3DCREATE_HARDWARE_VERTEXPROCESSING, &present_parameters, &device); - if (FAILED(hr)) + if (!(device = create_device(d3d8, window, &device_desc))) { - skip("Failed to create a device, hr %#x.\n", hr); + skip("Failed to create a 3D device, skipping test.\n"); set_fpu_cw(0x37f); goto done; } @@ -2624,9 +2633,9 @@ static void test_fpu_setup(void) cw = get_fpu_cw(); ok(cw == 0xf60, "cw is %#x, expected 0xf60.\n", cw); - hr = IDirect3D8_CreateDevice(d3d8, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, - D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE, &present_parameters, &device); - ok(SUCCEEDED(hr), "CreateDevice failed, hr %#x.\n", hr); + device_desc.flags = CREATE_DEVICE_HWVP_ONLY | CREATE_DEVICE_FPU_PRESERVE; + device = create_device(d3d8, window, &device_desc); + ok(!!device, "CreateDevice failed.\n"); cw = get_fpu_cw(); ok(cw == 0xf60, "cw is %#x, expected 0xf60.\n", cw); -- 2.0.4