From 90bd39c4e35f9f2fcafd3397e907fd4b00ab2aa3 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 31 Oct 2013 09:40:39 +0100 Subject: [PATCH] d3d9/tests: Use color_match() in more places. --- dlls/d3d9/tests/visual.c | 93 ++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 55 deletions(-) diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index 2e9c3361d08..246dd07f06e 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -5991,37 +5991,31 @@ static void cnd_test(IDirect3DDevice9 *device) color = getPixelColor(device, 158, 358); ok(color == 0x00ffffff, "pixel 158, 358 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 162, 358); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 162, 358 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 162, 358 has color 0x%08x, expected 0x00000000.\n", color); color = getPixelColor(device, 158, 362); ok(color == 0x00ffffff, "pixel 158, 362 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 162, 362); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 162, 362 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 162, 362 has color 0x%08x, expected 0x00000000.\n", color); /* 1.2 shader */ color = getPixelColor(device, 478, 358); ok(color == 0x00ffffff, "pixel 478, 358 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 482, 358); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 482, 358 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 482, 358 has color 0x%08x, expected 0x00000000.\n", color); color = getPixelColor(device, 478, 362); ok(color == 0x00ffffff, "pixel 478, 362 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 482, 362); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 482, 362 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 482, 362 has color 0x%08x, expected 0x00000000.\n", color); /* 1.3 shader */ color = getPixelColor(device, 478, 118); ok(color == 0x00ffffff, "pixel 478, 118 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 482, 118); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 482, 118 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 482, 118 has color 0x%08x, expected 0x00000000.\n", color); color = getPixelColor(device, 478, 122); ok(color == 0x00ffffff, "pixel 478, 122 has color %08x, expected 0x00ffffff\n", color); color = getPixelColor(device, 482, 122); - ok( (((color & 0x00ff0000) >> 16) <= 0x01) && (((color & 0x0000ff00) >> 8) <= 0x01) && ((color & 0x000000ff) <= 0x01), - "pixel 482, 122 has color %08x, expected 0x00000000\n", color); + ok(color_match(color, 0x00000000, 1), "pixel 482, 122 has color 0x%08x, expected 0x00000000.\n", color); hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x\n", hr); @@ -6287,8 +6281,8 @@ static void nested_loop_test(IDirect3DDevice9 *device) } color = getPixelColor(device, 360, 240); - ok(color == 0x007f0000 || color == 0x00800000 || color == 0x00810000, - "Nested loop test returned color 0x%08x, expected 0x00800000\n", color); + ok(color_match(color, 0x00800000, 1), + "Nested loop test returned color 0x%08x, expected 0x00800000.\n", color); hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x\n", hr); @@ -6488,7 +6482,7 @@ static void pretransformed_varying_test(IDirect3DDevice9 *device) IDirect3DVertexDeclaration9 *decl; HRESULT hr; unsigned int i; - DWORD color, r, g, b, r_e, g_e, b_e; + DWORD color; memcpy(data2, data, sizeof(data2)); data2[0].pos_x = 0; data2[0].pos_y = 0; @@ -6528,29 +6522,20 @@ static void pretransformed_varying_test(IDirect3DDevice9 *device) ok(hr == D3D_OK, "IDirect3DDevice9_EndScene returned %08x\n", hr); } + /* This isn't a weekend's job to fix, ignore the problem for now. + * Needs a replacement pipeline. */ color = getPixelColor(device, 360, 240); - r = color & 0x00ff0000 >> 16; - g = color & 0x0000ff00 >> 8; - b = color & 0x000000ff; - r_e = tests[i].color_rhw & 0x00ff0000 >> 16; - g_e = tests[i].color_rhw & 0x0000ff00 >> 8; - b_e = tests[i].color_rhw & 0x000000ff; + if (tests[i].todo_rhw) + todo_wine ok(color_match(color, tests[i].color_rhw, 1), + "Test %s returned color 0x%08x, expected 0x%08x (todo).\n", + tests[i].name, color, tests[i].color_rhw); + else + ok(color_match(color, tests[i].color_rhw, 1), + "Test %s returned color 0x%08x, expected 0x%08x.\n", + tests[i].name, color, tests[i].color_rhw); hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x\n", hr); - - if(tests[i].todo_rhw) { - /* This isn't a weekend's job to fix, ignore the problem for now. Needs a replacement - * pipeline - */ - todo_wine ok(abs(r - r_e) <= 1 && abs(g - g_e) <= 1 && abs(b - b_e) <= 1, - "Test %s returned color 0x%08x, expected 0x%08x(todo)\n", - tests[i].name, color, tests[i].color_rhw); - } else { - ok(abs(r - r_e) <= 1 && abs(g - g_e) <= 1 && abs(b - b_e) <= 1, - "Test %s returned color 0x%08x, expected 0x%08x\n", - tests[i].name, color, tests[i].color_rhw); - } } for(i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) @@ -7256,7 +7241,7 @@ static void srgbtexture_test(IDirect3DDevice9 *device) ok(hr == D3D_OK, "IDirect3DDevice9_SetSamplerState failed with %08x\n", hr); color = getPixelColor(device, 320, 240); - ok(color == 0x00363636 || color == 0x00373737, "srgb quad has color %08x, expected 0x00363636\n", color); + ok(color_match(color, 0x00363636, 1), "sRGB quad has color 0x%08x, expected 0x00363636.\n", color); hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); ok(hr == D3D_OK, "IDirect3DDevice9_Present failed with %08x\n", hr); @@ -9646,7 +9631,6 @@ static void pixelshader_blending_test(IDirect3DDevice9 *device) IDirect3DSurface9 *backbuffer = NULL, *offscreen = NULL; IDirect3D9 *d3d = NULL; DWORD color; - DWORD r0, g0, b0, r1, g1, b1; int fmt_index; static const float quad[][5] = { @@ -9768,27 +9752,26 @@ static void pixelshader_blending_test(IDirect3DDevice9 *device) IDirect3DDevice9_EndScene(device); } - if(IDirect3D9_CheckDeviceFormat(d3d, 0, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, D3DRTYPE_TEXTURE, fmt) == D3D_OK) { - /* Compare the color of the center quad with our expectation */ + if (IDirect3D9_CheckDeviceFormat(d3d, 0, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8, + D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING, D3DRTYPE_TEXTURE, fmt) == D3D_OK) + { + /* Compare the color of the center quad with our expectation. */ color = getPixelColor(device, 320, 240); - r0 = (color & 0x00ff0000) >> 16; - g0 = (color & 0x0000ff00) >> 8; - b0 = (color & 0x000000ff) >> 0; - - r1 = (test_formats[fmt_index].resultColorBlending & 0x00ff0000) >> 16; - g1 = (test_formats[fmt_index].resultColorBlending & 0x0000ff00) >> 8; - b1 = (test_formats[fmt_index].resultColorBlending & 0x000000ff) >> 0; - - ok(r0 >= max(r1, 1) - 1 && r0 <= r1 + 1 && - g0 >= max(g1, 1) - 1 && g0 <= g1 + 1 && - b0 >= max(b1, 1) - 1 && b0 <= b1 + 1, - "Offscreen failed for %s: Got color %#08x, expected %#08x.\n", test_formats[fmt_index].fmtName, color, test_formats[fmt_index].resultColorBlending); - } else { - /* No pixel shader blending is supported so expect garbage. The type of 'garbage' depends on the driver version and OS. - * E.g. on G16R16 ati reports (on old r9600 drivers) 0x00ffffff and on modern ones 0x002010ff which is also what Nvidia - * reports. On Vista Nvidia seems to report 0x00ffffff on Geforce7 cards. */ + ok(color_match(color, test_formats[fmt_index].resultColorBlending, 1), + "Offscreen failed for %s: Got color 0x%08x, expected 0x%08x.\n", + test_formats[fmt_index].fmtName, color, test_formats[fmt_index].resultColorBlending); + } + else + { + /* No pixel shader blending is supported so expect garbage. The + * type of 'garbage' depends on the driver version and OS. E.g. on + * G16R16 ATI reports (on old r9600 drivers) 0x00ffffff and on + * modern ones 0x002010ff which is also what NVIDIA reports. On + * Vista NVIDIA seems to report 0x00ffffff on Geforce7 cards. */ color = getPixelColor(device, 320, 240); - ok((color == 0x00ffffff) || (color == test_formats[fmt_index].resultColorNoBlending), "Offscreen failed for %s: expected no color blending but received it anyway.\n", test_formats[fmt_index].fmtName); + ok((color == 0x00ffffff) || (color == test_formats[fmt_index].resultColorNoBlending), + "Offscreen failed for %s: Got unexpected color 0x%08x, expected no color blending.\n", + test_formats[fmt_index].fmtName, color); } IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL);