Signed-off-by: Jactry Zeng jzeng@codeweavers.com --- dlls/ddraw/tests/ddraw1.c | 65 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw2.c | 65 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw4.c | 31 +++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 31 +++++++++++++++++++ 4 files changed, 192 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 860e101159..6ae9d0c49c 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -12899,6 +12899,70 @@ static void test_caps(void) IDirectDraw_Release(ddraw); }
+static void test_available_formats(void) +{ + static const DWORD z_bitmasks[] = {0x00ffffff, 0xffffff00, 0xffffffff}; + DDSURFACEDESC surface_desc, desc; + IDirectDrawSurface *surface; + IDirectDraw *ddraw; + HWND window; + HRESULT hr; + int i; + + window = create_window(); + ddraw = create_ddraw(); + + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_ZBUFFERBITDEPTH | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + U2(surface_desc).dwZBufferBitDepth = 32; + surface_desc.dwWidth = 64; + surface_desc.dwHeight = 64; + hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + ok((desc.dwFlags & DDSD_ZBUFFERBITDEPTH), "Got unexpected flags: %#x.\n", desc.dwFlags); + ok(U2(desc).dwZBufferBitDepth == 32, "Got unexpected dwZBufferBitDepth: %d.\n", U2(desc).dwZBufferBitDepth); + IDirectDrawSurface_Release(surface); + + for (i = 0; i < ARRAY_SIZE(z_bitmasks); ++i) + { + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + surface_desc.ddpfPixelFormat.dwSize = sizeof(surface_desc.ddpfPixelFormat); + surface_desc.ddpfPixelFormat.dwFlags = DDPF_ZBUFFER; + U1(surface_desc.ddpfPixelFormat).dwZBufferBitDepth = 32; + U3(surface_desc.ddpfPixelFormat).dwZBitMask = z_bitmasks[i]; + surface_desc.dwWidth = 64; + surface_desc.dwHeight = 64; + + hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x, i=%d.\n", hr, i); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + ok((desc.dwFlags & DDSD_ZBUFFERBITDEPTH) && !(desc.dwFlags & DDSD_PIXELFORMAT), + "Got unexpected flags: %#x, i=%d.\n", desc.dwFlags, i); + ok(U2(desc).dwZBufferBitDepth == 32, "Got unexpected dwZBufferBitDepth: %d, i=%d.\n", + U2(desc).dwZBufferBitDepth, i); + + IDirectDrawSurface_Release(surface); + } + + IDirectDraw_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw1) { DDDEVICEIDENTIFIER identifier; @@ -13010,4 +13074,5 @@ START_TEST(ddraw1) test_alphatest(); test_clipper_refcount(); test_caps(); + test_available_formats(); } diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 2c047a5e1f..f443352e5c 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -13775,6 +13775,70 @@ static void test_caps(void) IDirectDraw2_Release(ddraw); }
+static void test_available_formats(void) +{ + static const DWORD z_bitmasks[] = {0x00ffffff, 0xffffff00, 0xffffffff}; + DDSURFACEDESC surface_desc, desc; + IDirectDrawSurface *surface; + IDirectDraw2 *ddraw; + HWND window; + HRESULT hr; + int i; + + window = create_window(); + ddraw = create_ddraw(); + + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_ZBUFFERBITDEPTH | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + U2(surface_desc).dwZBufferBitDepth = 32; + surface_desc.dwWidth = 64; + surface_desc.dwHeight = 64; + hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n", hr); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + ok((desc.dwFlags & DDSD_ZBUFFERBITDEPTH), "Got unexpected flags: %#x.\n", desc.dwFlags); + ok(U2(desc).dwZBufferBitDepth == 32, "Got unexpected dwZBufferBitDepth: %d.\n", U2(desc).dwZBufferBitDepth); + IDirectDrawSurface_Release(surface); + + for (i = 0; i < ARRAY_SIZE(z_bitmasks); ++i) + { + memset(&surface_desc, 0, sizeof(surface_desc)); + surface_desc.dwSize = sizeof(surface_desc); + surface_desc.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT; + surface_desc.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + surface_desc.ddpfPixelFormat.dwSize = sizeof(surface_desc.ddpfPixelFormat); + surface_desc.ddpfPixelFormat.dwFlags = DDPF_ZBUFFER; + U1(surface_desc.ddpfPixelFormat).dwZBufferBitDepth = 32; + U3(surface_desc.ddpfPixelFormat).dwZBitMask = z_bitmasks[i]; + surface_desc.dwWidth = 64; + surface_desc.dwHeight = 64; + + hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL); + ok(SUCCEEDED(hr), "Failed to create surface, hr %#x, i=%d.\n", hr, i); + + memset(&desc, 0, sizeof(desc)); + desc.dwSize = sizeof(desc); + IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + ok((desc.dwFlags & DDSD_ZBUFFERBITDEPTH) && !(desc.dwFlags & DDSD_PIXELFORMAT), + "Got unexpected flags: %#x, i=%d.\n", desc.dwFlags, i); + ok(U2(desc).dwZBufferBitDepth == 32, "Got unexpected dwZBufferBitDepth: %d, i=%d.\n", + U2(desc).dwZBufferBitDepth, i); + + IDirectDrawSurface_Release(surface); + } + + IDirectDraw2_Release(ddraw); + DestroyWindow(window); +} + START_TEST(ddraw2) { DDDEVICEIDENTIFIER identifier; @@ -13893,4 +13957,5 @@ START_TEST(ddraw2) test_alphatest(); test_clipper_refcount(); test_caps(); + test_available_formats(); } diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 77ae359a9c..6cb7b75fca 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16215,6 +16215,36 @@ static void test_caps(void) IDirectDraw4_Release(ddraw); }
+static HRESULT CALLBACK enum_available_formats(DDPIXELFORMAT *format, void *ctx) +{ + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + return DDENUMRET_OK; +} + +static void test_available_formats(void) +{ + IDirectDraw4 *ddraw; + IDirect3D3 *d3d3; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + hr = IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d3); + IDirectDraw4_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_available_formats, NULL); + if (FAILED(hr)) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D3_Release(d3d3); +} + START_TEST(ddraw4) { DDDEVICEIDENTIFIER identifier; @@ -16348,4 +16378,5 @@ START_TEST(ddraw4) test_alphatest(); test_clipper_refcount(); test_caps(); + test_available_formats(); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index b0fc634eef..b91de58984 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -16289,6 +16289,36 @@ static void test_caps(void) IDirectDraw7_Release(ddraw); }
+static HRESULT CALLBACK enum_available_formats(DDPIXELFORMAT *format, void *ctx) +{ + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + return DDENUMRET_OK; +} + +static void test_available_formats(void) +{ + IDirectDraw7 *ddraw; + IDirect3D7 *d3d7; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + hr = IDirectDraw7_QueryInterface(ddraw, &IID_IDirect3D7, (void **)&d3d7); + IDirectDraw7_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + hr = IDirect3D7_EnumZBufferFormats(d3d7, &IID_IDirect3DHALDevice, enum_available_formats, NULL); + if (FAILED(hr)) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D7_Release(d3d7); +} + START_TEST(ddraw7) { DDDEVICEIDENTIFIER2 identifier; @@ -16436,4 +16466,5 @@ START_TEST(ddraw7) test_clipper_refcount(); test_begin_end_state_block(); test_caps(); + test_available_formats(); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=53763
Your paranoid android.
=== wvistau64 (32 bit report) ===
ddraw: ddraw1.c:2801: Test failed: Expected message 0x46, but didn't receive it. ddraw1.c:2803: Test failed: Expected screen size 1024x768, got 0x0. ddraw1.c:2809: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2839: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2846: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2872: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2895: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2924: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2950: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:2970: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3006: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3016: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3042: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3065: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3087: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3113: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3133: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746). ddraw1.c:3170: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,746).
=== w8adm (32 bit report) ===
ddraw: ddraw1.c:11005: Test failed: Got unexpected color 0x00ffffff. ddraw1.c:11025: Test failed: Got unexpected color 0x00ffffff.
=== w1064v1507 (32 bit report) ===
ddraw: ddraw1.c:11025: Test failed: Got unexpected color 0x00ffffff.
=== wvistau64_zh_CN (32 bit report) ===
ddraw: ddraw4.c:3066: Test failed: Expected message 0x46, but didn't receive it. ddraw4.c:3068: Test failed: Expected screen size 1024x768, got 0x0. ddraw4.c:3074: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3104: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3111: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3137: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3160: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3182: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3208: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3228: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3264: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3274: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3300: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3323: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3345: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3371: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3391: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745). ddraw4.c:3428: Test failed: Expected (0,0)-(1024,768), got (-8,-8)-(1032,745).
=== w1064v1809 (32 bit report) ===
ddraw: 1198:ddraw7: unhandled exception c0000005 at 733C40F8
=== debian9 (32 bit Japanese:Japan report) ===
ddraw: ddraw7.c:2597: Test failed: Expected message 0x46, but didn't receive it. ddraw7.c:2599: Test failed: Expected screen size 1920x1200, got 0x0. ddraw7.c:2604: Test failed: Expected (0,0)-(1920,1200), got (0,0)-(1920,1080).