Signed-off-by: Jactry Zeng <jzeng(a)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();
}
--
2.20.1