diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 7ef70c17102..0c4e98367e3 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -81,6 +81,60 @@ static BOOL compare_vec4(const struct vec4 *vec, float x, float y, float z, floa && compare_float(vec->w, w, ulps); } +static BOOL ddraw_is_warp(IDirectDraw *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return !!strstr(identifier.szDriver, "warp"); +} + +static BOOL ddraw_is_nvidia(IDirectDraw *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return identifier.dwVendorId == 0x10de; +} + +static BOOL ddraw_is_intel(IDirectDraw *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return identifier.dwVendorId == 0x8086; +} + static IDirectDrawSurface *create_overlay(IDirectDraw *ddraw, unsigned int width, unsigned int height, DWORD format) { @@ -4208,6 +4262,15 @@ static void test_flip(void) for (i = 0; i < sizeof(test_data) / sizeof(*test_data); ++i) { + /* Creating a flippable texture induces a BSoD on some versions of the + * Intel graphics driver. At least Intel GMA 950 with driver version + * 6.14.10.4926 on Windows XP SP3 is affected. */ + if ((test_data[i].caps & DDSCAPS_TEXTURE) && ddraw_is_intel(ddraw)) + { + win_skip("Skipping flippable texture test.\n"); + continue; + } + memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; @@ -5329,23 +5392,6 @@ static void test_palette_complex(void) DestroyWindow(window); } -static BOOL ddraw_is_warp(IDirectDraw *ddraw) -{ - IDirectDraw4 *ddraw4; - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); - ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); - hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - IDirectDraw4_Release(ddraw4); - return !!strstr(identifier.szDriver, "warp"); -} - static void test_p8_blit(void) { IDirectDrawSurface *src, *dst, *dst_p8; @@ -7626,23 +7672,6 @@ done: DestroyWindow(window); } -static BOOL ddraw_is_nvidia(IDirectDraw *ddraw) -{ - IDirectDraw4 *ddraw4; - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); - ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); - hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - IDirectDraw4_Release(ddraw4); - return identifier.dwVendorId == 0x10de; -} - static void test_colorkey_precision(void) { static D3DTLVERTEX quad[] = diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index e72a1fad745..d2cce927456 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -83,6 +83,60 @@ static BOOL compare_vec4(const struct vec4 *vec, float x, float y, float z, floa && compare_float(vec->w, w, ulps); } +static BOOL ddraw_is_warp(IDirectDraw2 *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return !!strstr(identifier.szDriver, "warp"); +} + +static BOOL ddraw_is_nvidia(IDirectDraw2 *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return identifier.dwVendorId == 0x10de; +} + +static BOOL ddraw_is_intel(IDirectDraw2 *ddraw) +{ + IDirectDraw4 *ddraw4; + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); + ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); + hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + IDirectDraw4_Release(ddraw4); + + return identifier.dwVendorId == 0x8086; +} + static IDirectDrawSurface *create_overlay(IDirectDraw2 *ddraw, unsigned int width, unsigned int height, DWORD format) { @@ -4838,6 +4892,15 @@ static void test_flip(void) for (i = 0; i < sizeof(test_data) / sizeof(*test_data); ++i) { + /* Creating a flippable texture induces a BSoD on some versions of the + * Intel graphics driver. At least Intel GMA 950 with driver version + * 6.14.10.4926 on Windows XP SP3 is affected. */ + if ((test_data[i].caps & DDSCAPS_TEXTURE) && ddraw_is_intel(ddraw)) + { + win_skip("Skipping flippable texture test.\n"); + continue; + } + memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; @@ -6386,23 +6449,6 @@ static void test_palette_complex(void) DestroyWindow(window); } -static BOOL ddraw_is_warp(IDirectDraw2 *ddraw) -{ - IDirectDraw4 *ddraw4; - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); - ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); - hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - IDirectDraw4_Release(ddraw4); - return !!strstr(identifier.szDriver, "warp"); -} - static void test_p8_blit(void) { IDirectDrawSurface *src, *dst, *dst_p8; @@ -8785,23 +8831,6 @@ done: DestroyWindow(window); } -static BOOL ddraw_is_nvidia(IDirectDraw2 *ddraw) -{ - IDirectDraw4 *ddraw4; - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw2_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&ddraw4); - ok(SUCCEEDED(hr), "Failed to get IDirectDraw4 interface, hr %#x.\n", hr); - hr = IDirectDraw4_GetDeviceIdentifier(ddraw4, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - IDirectDraw4_Release(ddraw4); - return identifier.dwVendorId == 0x10de; -} - static void test_colorkey_precision(void) { static D3DLVERTEX quad[] = diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 6cce150e06c..80de81a47ef 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -92,6 +92,48 @@ static BOOL compare_color(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff) return TRUE; } +static BOOL ddraw_is_warp(IDirectDraw4 *ddraw) +{ + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw4_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return !!strstr(identifier.szDriver, "warp"); +} + +static BOOL ddraw_is_nvidia(IDirectDraw4 *ddraw) +{ + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw4_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return identifier.dwVendorId == 0x10de; +} + +static BOOL ddraw_is_intel(IDirectDraw4 *ddraw) +{ + DDDEVICEIDENTIFIER identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw4_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return identifier.dwVendorId == 0x8086; +} + static IDirectDrawSurface4 *create_overlay(IDirectDraw4 *ddraw, unsigned int width, unsigned int height, DWORD format) { @@ -6128,6 +6170,15 @@ static void test_flip(void) for (i = 0; i < sizeof(test_data) / sizeof(*test_data); ++i) { + /* Creating a flippable texture induces a BSoD on some versions of the + * Intel graphics driver. At least Intel GMA 950 with driver version + * 6.14.10.4926 on Windows XP SP3 is affected. */ + if ((test_data[i].caps & DDSCAPS_TEXTURE) && ddraw_is_intel(ddraw)) + { + win_skip("Skipping flippable texture test.\n"); + continue; + } + memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; @@ -7883,19 +7934,6 @@ static void test_palette_complex(void) DestroyWindow(window); } -static BOOL ddraw_is_warp(IDirectDraw4 *ddraw) -{ - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw4_GetDeviceIdentifier(ddraw, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - return !!strstr(identifier.szDriver, "warp"); -} - static void test_p8_blit(void) { IDirectDrawSurface4 *src, *dst, *dst_p8; @@ -9890,19 +9928,6 @@ static void test_texcoordindex(void) DestroyWindow(window); } -static BOOL ddraw_is_nvidia(IDirectDraw4 *ddraw) -{ - DDDEVICEIDENTIFIER identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw4_GetDeviceIdentifier(ddraw, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - return identifier.dwVendorId == 0x10de; -} - static void test_colorkey_precision(void) { static struct diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 4027220dc4d..3014d3681be 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -102,6 +102,48 @@ static ULONG get_refcount(IUnknown *iface) return IUnknown_Release(iface); } +static BOOL ddraw_is_warp(IDirectDraw7 *ddraw) +{ + DDDEVICEIDENTIFIER2 identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return !!strstr(identifier.szDriver, "warp"); +} + +static BOOL ddraw_is_nvidia(IDirectDraw7 *ddraw) +{ + DDDEVICEIDENTIFIER2 identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return identifier.dwVendorId == 0x10de; +} + +static BOOL ddraw_is_intel(IDirectDraw7 *ddraw) +{ + DDDEVICEIDENTIFIER2 identifier; + HRESULT hr; + + if (!strcmp(winetest_platform, "wine")) + return FALSE; + + hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &identifier, 0); + ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); + + return identifier.dwVendorId == 0x8086; +} + static IDirectDrawSurface7 *create_overlay(IDirectDraw7 *ddraw, unsigned int width, unsigned int height, DWORD format) { @@ -5994,6 +6036,15 @@ static void test_flip(void) for (i = 0; i < sizeof(test_data) / sizeof(*test_data); ++i) { + /* Creating a flippable texture induces a BSoD on some versions of the + * Intel graphics driver. At least Intel GMA 950 with driver version + * 6.14.10.4926 on Windows XP SP3 is affected. */ + if ((test_data[i].caps & DDSCAPS_TEXTURE) && ddraw_is_intel(ddraw)) + { + win_skip("Skipping flippable texture test.\n"); + continue; + } + memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); surface_desc.dwFlags = DDSD_CAPS; @@ -7791,19 +7842,6 @@ static void test_palette_complex(void) DestroyWindow(window); } -static BOOL ddraw_is_warp(IDirectDraw7 *ddraw) -{ - DDDEVICEIDENTIFIER2 identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - return !!strstr(identifier.szDriver, "warp"); -} - static void test_p8_blit(void) { IDirectDrawSurface7 *src, *dst, *dst_p8; @@ -10221,19 +10259,6 @@ static void test_texcoordindex(void) DestroyWindow(window); } -static BOOL ddraw_is_nvidia(IDirectDraw7 *ddraw) -{ - DDDEVICEIDENTIFIER2 identifier; - HRESULT hr; - - if (!strcmp(winetest_platform, "wine")) - return FALSE; - - hr = IDirectDraw7_GetDeviceIdentifier(ddraw, &identifier, 0); - ok(SUCCEEDED(hr), "Failed to get device identifier, hr %#x.\n", hr); - return identifier.dwVendorId == 0x10de; -} - static void test_colorkey_precision(void) { static struct