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(); }