Module: wine Branch: master Commit: dffce5c01a32b83cea49c9b2fc41bbf58eb18667 URL: http://source.winehq.org/git/wine.git/?a=commit;h=dffce5c01a32b83cea49c9b2fc...
Author: Matteo Bruni mbruni@codeweavers.com Date: Fri Sep 23 17:03:21 2011 +0200
d3d8/tests: Test creating shaders with wrong type or version.
---
dlls/d3d8/tests/device.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c index 524ce2b..42726aa 100644 --- a/dlls/d3d8/tests/device.c +++ b/dlls/d3d8/tests/device.c @@ -2701,6 +2701,88 @@ done: DestroyWindow(focus_window); }
+static void test_wrong_shader(void) +{ + HRESULT hr; + HWND hwnd = NULL; + IDirect3D8 *d3d = NULL; + IDirect3DDevice8 *device = NULL; + D3DPRESENT_PARAMETERS d3dpp; + D3DDISPLAYMODE d3ddm; + DWORD vs, ps; + + static const DWORD vs_2_0[] = + { + 0xfffe0200, /* vs_2_0 */ + 0x0200001f, 0x80000000, 0x900f0000, /* dcl_position v0 */ + 0x02000001, 0x800f0001, 0xa0e40001, /* mov r1, c1 */ + 0x03000002, 0xd00f0000, 0x80e40001, 0xa0e40002, /* add oD0, r1, c2 */ + 0x02000001, 0xc00f0000, 0x90e40000, /* mov oPos, v0 */ + 0x0000ffff /* end */ + }; + static const DWORD ps_2_0[] = + { + 0xffff0200, /* ps_2_0 */ + 0x02000001, 0x800f0001, 0xa0e40001, /* mov r1, c1 */ + 0x03000002, 0x800f0000, 0x80e40001, 0xa0e40002, /* add r0, r1, c2 */ + 0x02000001, 0x800f0800, 0x80e40000, /* mov oC0, r0 */ + 0x0000ffff /* end */ + }; + + static const DWORD decl[] = + { + D3DVSD_STREAM(0), + D3DVSD_REG(D3DVSDE_POSITION, D3DVSDT_FLOAT3), + D3DVSD_END() + }; + + d3d = pDirect3DCreate8(D3D_SDK_VERSION); + ok(d3d != NULL, "Failed to create IDirect3D8 object\n"); + hwnd = CreateWindow("d3d8_test_wc", "d3d8_test", WS_OVERLAPPEDWINDOW, 100, 100, 160, 160, NULL, NULL, NULL, NULL); + ok(hwnd != NULL, "Failed to create window\n"); + if (!d3d || !hwnd) + goto cleanup; + + IDirect3D8_GetAdapterDisplayMode(d3d, D3DADAPTER_DEFAULT, &d3ddm); + ZeroMemory(&d3dpp, sizeof(d3dpp)); + d3dpp.Windowed = TRUE; + d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; + d3dpp.BackBufferWidth = 800; + d3dpp.BackBufferHeight = 600; + d3dpp.BackBufferFormat = d3ddm.Format; + + hr = IDirect3D8_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, + D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &device); + ok(hr == D3D_OK || hr == D3DERR_INVALIDCALL || broken(hr == D3DERR_NOTAVAILABLE), "IDirect3D8_CreateDevice failed with %#08x\n", hr); + if (!device) + { + skip("could not create device, IDirect3D8_CreateDevice returned %#08x\n", hr); + goto cleanup; + } + + hr = IDirect3DDevice8_CreateVertexShader(device, decl, simple_ps, &vs, 0); + ok(hr == D3DERR_INVALIDCALL, "IDirect3DDevice8_CreateVertexShader returned %#08x\n", hr); + + hr = IDirect3DDevice8_CreatePixelShader(device, simple_vs, &ps); + ok(hr == D3DERR_INVALIDCALL, "IDirect3DDevice8_CreatePixelShader returned %#08x\n", hr); + + hr = IDirect3DDevice8_CreateVertexShader(device, decl, vs_2_0, &vs, 0); + ok(hr == D3DERR_INVALIDCALL, "IDirect3DDevice8_CreateVertexShader returned %#08x\n", hr); + + hr = IDirect3DDevice8_CreatePixelShader(device, ps_2_0, &ps); + ok(hr == D3DERR_INVALIDCALL, "IDirect3DDevice8_CreatePixelShader returned %#08x\n", hr); + +cleanup: + if (device) + { + UINT refcount = IDirect3DDevice8_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + } + if (d3d) + IDirect3D8_Release(d3d); + DestroyWindow(hwnd); +} + START_TEST(device) { HMODULE d3d8_handle = LoadLibraryA( "d3d8.dll" ); @@ -2751,6 +2833,7 @@ START_TEST(device) test_wndproc_windowed(); test_depth_stencil_size(); test_window_style(); + test_wrong_shader(); } UnregisterClassA("d3d8_test_wc", GetModuleHandleA(NULL)); }