[PATCH 4/4] ddraw/tests: Add test for checking available depth format.

Jactry Zeng jzeng at codeweavers.com
Wed May 22 02:57:25 CDT 2019


Signed-off-by: Jactry Zeng <jzeng at 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




More information about the wine-devel mailing list