[PATCH v2 4/4] ddraw/tests: Add tests for checking available depth formats.

Jactry Zeng jzeng at codeweavers.com
Sun Jun 16 09:46:36 CDT 2019


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




More information about the wine-devel mailing list