Signed-off-by: Jactry Zeng jzeng@codeweavers.com --- dlls/ddraw/tests/ddraw4.c | 44 +++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index cb7582c1d4..db70fa2423 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -16002,6 +16002,49 @@ static void test_clipper_refcount(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{ + DDPIXELFORMAT *z_fmt = ctx; + + if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth) + *z_fmt = *format; + + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + + return DDENUMRET_OK; +} + +static void test_available_fmt(void) +{ + DDPIXELFORMAT z_fmt; + IDirectDraw4 *ddraw; + IDirect3D3 *d3d3; + HWND window; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + window = create_window(); + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + hr = IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d3); + IDirectDraw4_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + memset(&z_fmt, 0, sizeof(z_fmt)); + hr = IDirect3D3_EnumZBufferFormats(d3d3, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt); + if (FAILED(hr) || !z_fmt.dwSize) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D3_Release(d3d3); +} + START_TEST(ddraw4) { DDDEVICEIDENTIFIER identifier; @@ -16134,4 +16177,5 @@ START_TEST(ddraw4) test_gdi_surface(); test_alphatest(); test_clipper_refcount(); + test_available_fmt(); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 5f066a6257..83c6671c54 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -15893,6 +15893,49 @@ static void test_begin_end_state_block(void) DestroyWindow(window); }
+static HRESULT CALLBACK enum_available_fmt(DDPIXELFORMAT *format, void *ctx) +{ + DDPIXELFORMAT *z_fmt = ctx; + + if (U1(*format).dwZBufferBitDepth > U1(*z_fmt).dwZBufferBitDepth) + *z_fmt = *format; + + ok(U3(*format).dwZBitMask != 0xffffffff, "Got unexpected depth format: %#x.\n", U3(*format).dwZBitMask); + + return DDENUMRET_OK; +} + +static void test_available_fmt(void) +{ + DDPIXELFORMAT z_fmt; + IDirectDraw7 *ddraw; + IDirect3D7 *d3d7; + HWND window; + HRESULT hr; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + window = create_window(); + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + + hr = IDirectDraw7_QueryInterface(ddraw, &IID_IDirect3D7, (void **)&d3d7); + IDirectDraw7_Release(ddraw); + if (FAILED(hr)) + { + skip("D3D interface is not available, skipping test.\n"); + return; + } + + memset(&z_fmt, 0, sizeof(z_fmt)); + hr = IDirect3D7_EnumZBufferFormats(d3d7, &IID_IDirect3DHALDevice, enum_available_fmt, &z_fmt); + if (FAILED(hr) || !z_fmt.dwSize) + skip("No depth buffer formats available, skipping test.\n"); + + IDirect3D7_Release(d3d7); +} + START_TEST(ddraw7) { DDDEVICEIDENTIFIER2 identifier; @@ -16038,4 +16081,5 @@ START_TEST(ddraw7) test_alphatest(); test_clipper_refcount(); test_begin_end_state_block(); + test_available_fmt(); }