[PATCH 3/4] d3d9/tests: Add test for CreateDepthStencilSurfaceEx().

Józef Kucia jkucia at codeweavers.com
Thu Jan 7 09:22:46 CST 2016


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/d3d9/tests/d3d9ex.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/dlls/d3d9/tests/d3d9ex.c b/dlls/d3d9/tests/d3d9ex.c
index 151db41..e1ca770 100644
--- a/dlls/d3d9/tests/d3d9ex.c
+++ b/dlls/d3d9/tests/d3d9ex.c
@@ -42,6 +42,11 @@ struct device_desc
     DWORD flags;
 };
 
+static BOOL adapter_is_warp(const D3DADAPTER_IDENTIFIER9 *identifier)
+{
+    return !strcmp(identifier->Driver, "d3d10warp.dll");
+}
+
 static BOOL color_match(D3DCOLOR c1, D3DCOLOR c2, BYTE max_diff)
 {
     unsigned int i;
@@ -644,6 +649,81 @@ out:
     IDirect3D9Ex_Release(d3d9ex);
 }
 
+static void test_create_depth_stencil_surface_ex(void)
+{
+    static const struct
+    {
+        DWORD usage;
+        HRESULT hr;
+        BOOL broken_warp;
+    }
+    tests[] =
+    {
+        {0,                           D3D_OK,             FALSE},
+        {D3DUSAGE_DEPTHSTENCIL,       D3DERR_INVALIDCALL, FALSE},
+        {D3DUSAGE_RESTRICTED_CONTENT, D3D_OK,             TRUE},
+    };
+
+    D3DADAPTER_IDENTIFIER9 identifier;
+    D3DSURFACE_DESC surface_desc;
+    IDirect3DDevice9Ex *device;
+    IDirect3DSurface9 *surface;
+    IDirect3D9 *d3d;
+    unsigned int i;
+    HWND window;
+    HRESULT hr;
+    ULONG ref;
+    BOOL warp;
+
+    window = create_window();
+
+    if (!(device = create_device(window, NULL)))
+    {
+        skip("Failed to create a D3D device.\n");
+        DestroyWindow(window);
+        return;
+    }
+
+    hr = IDirect3DDevice9Ex_GetDirect3D(device, &d3d);
+    ok(SUCCEEDED(hr), "Failed to get Direct3D9, hr %#x.\n", hr);
+    hr = IDirect3D9_GetAdapterIdentifier(d3d, D3DADAPTER_DEFAULT, 0, &identifier);
+    ok(SUCCEEDED(hr), "Failed to get adapter identifier, hr %#x.\n", hr);
+    warp = adapter_is_warp(&identifier);
+    IDirect3D9_Release(d3d);
+
+    for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
+    {
+        surface = (IDirect3DSurface9 *)0xdeadbeef;
+        hr = IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(device, 64, 64, D3DFMT_D24S8,
+                D3DMULTISAMPLE_NONE, 0, TRUE, &surface, NULL, tests[i].usage);
+        ok(hr == tests[i].hr || broken(warp && tests[i].broken_warp),
+                "Test %u: Got unexpected hr %#x.\n", i, hr);
+        if (SUCCEEDED(hr))
+        {
+            hr = IDirect3DSurface9_GetDesc(surface, &surface_desc);
+            ok(SUCCEEDED(hr), "Test %u: GetDesc failed, hr %#x.\n", i, hr);
+            ok(surface_desc.Type == D3DRTYPE_SURFACE, "Test %u: Got unexpected type %#x.\n",
+                    i, surface_desc.Type);
+            ok(surface_desc.Pool == D3DPOOL_DEFAULT, "Test %u: Got unexpected pool %#x.\n",
+                    i,  surface_desc.Pool);
+            ok(surface_desc.Usage == (tests[i].usage | D3DUSAGE_DEPTHSTENCIL),
+                    "Test %u: Got unexpected usage %#x.\n", i, surface_desc.Usage);
+
+            ref = IDirect3DSurface9_Release(surface);
+            ok(!ref, "Test %u: Surface has %u references left.\n", i, ref);
+        }
+        else
+        {
+            ok(surface == (IDirect3DSurface9 *)0xdeadbeef || broken(warp && tests[i].broken_warp),
+                    "Test %u: Got unexpected surface pointer %p.\n", i, surface);
+        }
+    }
+
+    ref = IDirect3DDevice9Ex_Release(device);
+    ok(!ref, "Device has %u references left.\n", ref);
+    DestroyWindow(window);
+}
+
 static void test_user_memory(void)
 {
     static const struct
@@ -3078,6 +3158,7 @@ START_TEST(d3d9ex)
     test_swapchain_get_displaymode_ex();
     test_get_adapter_luid();
     test_get_adapter_displaymode_ex();
+    test_create_depth_stencil_surface_ex();
     test_user_memory();
     test_reset();
     test_reset_resources();
-- 
2.4.10




More information about the wine-patches mailing list