Module: wine Branch: master Commit: 05b3222b397569774893ea3d653e8b3cb3faf2e6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=05b3222b397569774893ea3d65...
Author: Stefan Dösinger stefan@codeweavers.com Date: Tue Aug 30 12:11:39 2011 +0200
ddraw: Add a test for DDSD_ZBUFFERBITDEPTH and DDSD_PIXELFORMAT.
---
dlls/ddraw/tests/dsurface.c | 89 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 89 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/tests/dsurface.c b/dlls/ddraw/tests/dsurface.c index 75646d6..b4e158b 100644 --- a/dlls/ddraw/tests/dsurface.c +++ b/dlls/ddraw/tests/dsurface.c @@ -4027,6 +4027,94 @@ static void zbufferbitdepth_test(void) ddsd.dwZBufferBitDepth); }
+static void test_ddsd(DDSURFACEDESC *ddsd, BOOL expect_pf, BOOL expect_zd, const char *name) +{ + IDirectDrawSurface *surface; + IDirectDrawSurface7 *surface7; + HRESULT hr; + DDSURFACEDESC out; + DDSURFACEDESC2 out2; + + hr = IDirectDraw_CreateSurface(lpDD, ddsd, &surface, NULL); + if (hr == DDERR_NOZBUFFERHW) + { + skip("Z buffers not supported, skipping Z flag test\n"); + return; + } + ok(SUCCEEDED(hr), "IDirectDraw_CreateSurface failed, hr %#x.\n", hr); + hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirectDrawSurface7, (void **) &surface7); + ok(SUCCEEDED(hr), "IDirectDrawSurface_QueryInterface failed, hr %#x.\n", hr); + + reset_ddsd(&out); + hr = IDirectDrawSurface_GetSurfaceDesc(surface, &out); + ok(SUCCEEDED(hr), "IDirectDrawSurface_GetSurfaceDesc failed, hr %#x.\n", hr); + memset(&out2, 0, sizeof(out2)); + out2.dwSize = sizeof(out2); + hr = IDirectDrawSurface7_GetSurfaceDesc(surface7, &out2); + ok(SUCCEEDED(hr), "IDirectDrawSurface_GetSurfaceDesc failed, hr %#x.\n", hr); + + if (expect_pf) + { + ok(out.dwFlags & DDSD_PIXELFORMAT, "%s surface: Expected DDSD_PIXELFORMAT to be set\n", name); + } + else + { + ok(!(out.dwFlags & DDSD_PIXELFORMAT), "%s surface: Expected DDSD_PIXELFORMAT not to be set\n", name); + ok(out2.dwFlags & DDSD_PIXELFORMAT, + "%s surface: Expected DDSD_PIXELFORMAT to be set in DDSURFACEDESC2\n", name); + } + if (expect_zd) + { + ok(out.dwFlags & DDSD_ZBUFFERBITDEPTH, "%s surface: Expected DDSD_ZBUFFERBITDEPTH to be set\n", name); + ok(!(out2.dwFlags & DDSD_ZBUFFERBITDEPTH), + "%s surface: Did not expect DDSD_ZBUFFERBITDEPTH to be set in DDSURFACEDESC2\n", name); + } + else + { + ok(!(out.dwFlags & DDSD_ZBUFFERBITDEPTH), "%s surface: Expected DDSD_ZBUFFERBITDEPTH not to be set\n", name); + } + + IDirectDrawSurface7_Release(surface7); + IDirectDrawSurface_Release(surface); +} + +static void pixelformat_flag_test(void) +{ + DDSURFACEDESC ddsd; + DDCAPS caps; + HRESULT hr; + + memset(&caps, 0, sizeof(caps)); + caps.dwSize = sizeof(caps); + hr = IDirectDraw_GetCaps(lpDD, &caps, NULL); + ok(SUCCEEDED(hr), "IDirectDraw_GetCaps failed, hr %#x.\n", hr); + if (!(caps.ddsCaps.dwCaps & DDSCAPS_ZBUFFER)) + { + skip("Z buffers not supported, skipping DDSD_PIXELFORMAT test\n"); + return; + } + + reset_ddsd(&ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.dwWidth = 64; + ddsd.dwHeight = 64; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + test_ddsd(&ddsd, TRUE, FALSE, "offscreen plain"); + + reset_ddsd(&ddsd); + ddsd.dwFlags = DDSD_CAPS; + ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; + test_ddsd(&ddsd, TRUE, FALSE, "primary"); + + reset_ddsd(&ddsd); + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_ZBUFFERBITDEPTH; + ddsd.dwWidth = 64; + ddsd.dwHeight = 64; + ddsd.dwZBufferBitDepth = 16; + ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER; + test_ddsd(&ddsd, FALSE, TRUE, "Z buffer"); +} + START_TEST(dsurface) { HRESULT ret; @@ -4085,5 +4173,6 @@ START_TEST(dsurface) CreateSurfaceBadCapsSizeTest(); no_ddsd_caps_test(); zbufferbitdepth_test(); + pixelformat_flag_test(); ReleaseDirectDraw(); }