[PATCH 2/4] ddraw/tests: Add some tests for viewport state and stateblock interaction.

Zebediah Figura z.figura12 at gmail.com
Tue May 7 12:28:30 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/ddraw/tests/ddraw7.c | 167 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 167 insertions(+)

diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 69eba24f99..eccaf86190 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -16208,6 +16208,172 @@ static void test_transform_state(void)
     DestroyWindow(window);
 }
 
+static void test_viewport_state(void)
+{
+    D3DVIEWPORT7 vp1 = {10, 10, 16, 16, 0.0f, 0.0f}, vp2 = {20, 20, 32, 32, 1.0f, 1.0f}, ret_vp;
+    IDirect3DDevice7 *device;
+    DWORD stateblock;
+    ULONG refcount;
+    HWND window;
+    HRESULT hr;
+
+    window = create_window();
+    if (!(device = create_device(window, DDSCL_NORMAL)))
+    {
+        skip("Failed to create 3D device.\n");
+        DestroyWindow(window);
+        return;
+    }
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(ret_vp.dwX == 0, "Got unexpected dwX %u.\n", ret_vp.dwX);
+    ok(ret_vp.dwY == 0, "Got unexpected dwY %u.\n", ret_vp.dwY);
+    ok(ret_vp.dwWidth == 640, "Got unexpected dwWidth %u.\n", ret_vp.dwWidth);
+    ok(ret_vp.dwHeight == 480, "Got unexpected dwHeight %u.\n", ret_vp.dwHeight);
+    ok(ret_vp.dvMinZ == 0.0f, "Got unexpected dvMinZ %.8e.\n", ret_vp.dvMinZ);
+    ok(ret_vp.dvMaxZ == 1.0f, "Got unexpected dvMaxZ %.8e.\n", ret_vp.dvMaxZ);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    /* Recorded stateblock. */
+
+    hr = IDirect3DDevice7_BeginStateBlock(device);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_EndStateBlock(device, &stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp2, sizeof(vp2)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_CaptureStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    /* Predefined stateblock, D3DSBT_ALL. */
+
+    hr = IDirect3DDevice7_CreateStateBlock(device, D3DSBT_ALL, &stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_CaptureStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp2, sizeof(vp2)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    /* Predefined stateblock, D3DSBT_VERTEXSTATE. */
+
+    hr = IDirect3DDevice7_CreateStateBlock(device, D3DSBT_VERTEXSTATE, &stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp2, sizeof(vp2)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_CaptureStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    /* Predefined stateblock, D3DSBT_PIXELSTATE. */
+
+    hr = IDirect3DDevice7_CreateStateBlock(device, D3DSBT_PIXELSTATE, &stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp2);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp2, sizeof(vp2)), "Got unexpected viewport.\n");
+
+    hr = IDirect3DDevice7_CaptureStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_SetViewport(device, &vp1);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_ApplyStateBlock(device, stateblock);
+    ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
+
+    hr = IDirect3DDevice7_GetViewport(device, &ret_vp);
+    ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+    ok(!memcmp(&ret_vp, &vp1, sizeof(vp1)), "Got unexpected viewport.\n");
+
+    refcount = IDirect3DDevice7_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
+    DestroyWindow(window);
+}
+
 START_TEST(ddraw7)
 {
     DDDEVICEIDENTIFIER2 identifier;
@@ -16354,4 +16520,5 @@ START_TEST(ddraw7)
     test_clipper_refcount();
     test_begin_end_state_block();
     test_transform_state();
+    test_viewport_state();
 }
-- 
2.21.0




More information about the wine-devel mailing list