[PATCH 08/11] ddraw/tests: Run test_zenable() for each device type.
Paul Gofman
pgofman at codeweavers.com
Wed Mar 3 16:35:38 CST 2021
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
dlls/ddraw/tests/ddraw1.c | 18 +++++++++---------
dlls/ddraw/tests/ddraw2.c | 36 +++++++++++++++++++++++++-----------
dlls/ddraw/tests/ddraw4.c | 36 +++++++++++++++++++++++++-----------
dlls/ddraw/tests/ddraw7.c | 34 ++++++++++++++++++++++++----------
4 files changed, 83 insertions(+), 41 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 5f450c60708..fe458ffddd5 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -1610,7 +1610,7 @@ static void test_viewport_object(void)
IDirectDraw_Release(ddraw);
}
-static void test_zenable(void)
+static void test_zenable(const GUID *device_guid)
{
static D3DRECT clear_rect = {{0}, {0}, {640}, {480}};
static D3DTLVERTEX tquad[] =
@@ -1638,7 +1638,7 @@ static void test_zenable(void)
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
- if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
+ if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
IDirectDraw_Release(ddraw);
@@ -1669,20 +1669,20 @@ static void test_zenable(void)
inst_length = (BYTE *)ptr - (BYTE *)exec_desc.lpData;
inst_length -= sizeof(tquad);
hr = IDirect3DExecuteBuffer_Unlock(execute_buffer);
- ok(SUCCEEDED(hr), "Failed to unlock execute buffer, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport_Clear(viewport, 1, &clear_rect, D3DCLEAR_TARGET);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
set_execute_data(execute_buffer, 4, sizeof(tquad), inst_length);
hr = IDirect3DDevice_Execute(device, execute_buffer, viewport, D3DEXECUTE_CLIPPED);
- ok(SUCCEEDED(hr), "Failed to execute exec buffer, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice_QueryInterface(device, &IID_IDirectDrawSurface, (void **)&rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 4; ++j)
@@ -14378,7 +14378,7 @@ START_TEST(ddraw1)
test_surface_interface_mismatch();
test_coop_level_threaded();
test_viewport_object();
- test_zenable();
+ run_for_each_device_type(test_zenable);
test_ck_rgba();
test_ck_default();
test_ck_complex();
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index db52a8da74e..5cf7ce1fbbc 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -1829,7 +1829,7 @@ static void test_viewport_object(void)
IDirectDraw2_Release(ddraw);
}
-static void test_zenable(void)
+static void test_zenable(const GUID *device_guid)
{
static D3DRECT clear_rect = {{0}, {0}, {640}, {480}};
static D3DTLVERTEX tquad[] =
@@ -1853,7 +1853,7 @@ static void test_zenable(void)
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
- if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
+ if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
IDirectDraw2_Release(ddraw);
@@ -1865,22 +1865,36 @@ static void test_zenable(void)
viewport = create_viewport(device, 0, 0, 640, 480);
viewport_set_background(device, viewport, background);
hr = IDirect3DDevice2_SetCurrentViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to set current viewport, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_SetRenderState(device, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
- ok(SUCCEEDED(hr), "Failed to disable z-buffering, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport2_Clear(viewport, 1, &clear_rect, D3DCLEAR_TARGET);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ hr = IDirect3DDevice2_GetRenderTarget(device, &rt);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ color = get_surface_color(rt, 80, 60);
+ /* For some reason clears and colour fill blits randomly fail with software render target. */
+ ok(color == 0x00ff0000 || broken(is_software_device_type(device_guid) && !color),
+ "Got unexpected colour %#x.\n", color);
+ if (!color)
+ {
+ fill_surface(rt, 0xffff0000);
+
+ color = get_surface_color(rt, 80, 60);
+ ok(color == 0x00ff0000, "Got unexpected colour %#x.\n", color);
+ }
+
hr = IDirect3DDevice2_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DVT_TLVERTEX, tquad, 4, 0);
- ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice2_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- hr = IDirect3DDevice2_GetRenderTarget(device, &rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 4; ++j)
@@ -15340,7 +15354,7 @@ START_TEST(ddraw2)
run_for_each_device_type(test_depth_blit);
test_texture_load_ckey();
test_viewport_object();
- test_zenable();
+ run_for_each_device_type(test_zenable);
test_ck_rgba();
test_ck_default();
test_ck_complex();
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 3597a6a1745..17178c4f370 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -2071,7 +2071,7 @@ static void test_viewport_object(void)
IDirectDraw4_Release(ddraw);
}
-static void test_zenable(void)
+static void test_zenable(const GUID *device_guid)
{
static D3DRECT clear_rect = {{0}, {0}, {640}, {480}};
static struct
@@ -2096,7 +2096,7 @@ static void test_zenable(void)
UINT i, j;
window = create_window();
- if (!(device = create_device(window, DDSCL_NORMAL)))
+ if (!(device = create_device_ex(window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
DestroyWindow(window);
@@ -2105,22 +2105,36 @@ static void test_zenable(void)
viewport = create_viewport(device, 0, 0, 640, 480);
hr = IDirect3DDevice3_SetCurrentViewport(device, viewport);
- ok(SUCCEEDED(hr), "Failed to set current viewport, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_SetRenderState(device, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
- ok(SUCCEEDED(hr), "Failed to disable z-buffering, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DViewport3_Clear2(viewport, 1, &clear_rect, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffff0000, 0.0f, 0);
- ok(SUCCEEDED(hr), "Failed to clear viewport, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ hr = IDirect3DDevice3_GetRenderTarget(device, &rt);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ color = get_surface_color(rt, 80, 60);
+ /* For some reason clears and colour fill blits randomly fail with software render target. */
+ ok(color == 0x00ff0000 || broken(is_software_device_type(device_guid) && !color),
+ "Got unexpected colour %#x.\n", color);
+ if (!color)
+ {
+ fill_surface(rt, 0xffff0000);
+
+ color = get_surface_color(rt, 80, 60);
+ ok(color == 0x00ff0000, "Got unexpected colour %#x.\n", color);
+ }
+
hr = IDirect3DDevice3_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, tquad, 4, 0);
- ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice3_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- hr = IDirect3DDevice3_GetRenderTarget(device, &rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 4; ++j)
@@ -18401,7 +18415,7 @@ START_TEST(ddraw4)
run_for_each_device_type(test_depth_blit);
test_texture_load_ckey();
test_viewport_object();
- test_zenable();
+ run_for_each_device_type(test_zenable);
test_ck_rgba();
test_ck_default();
test_ck_complex();
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 9e8e75eaac8..f306a907465 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -1708,7 +1708,7 @@ static void test_texture_load_ckey(void)
DestroyWindow(window);
}
-static void test_zenable(void)
+static void test_zenable(const GUID *device_guid)
{
static struct
{
@@ -1731,7 +1731,7 @@ static void test_zenable(void)
UINT i, j;
window = create_window();
- if (!(device = create_device(window, DDSCL_NORMAL)))
+ if (!(device = create_device_ex(window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
DestroyWindow(window);
@@ -1739,19 +1739,33 @@ static void test_zenable(void)
}
hr = IDirect3DDevice7_SetRenderState(device, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
- ok(SUCCEEDED(hr), "Failed to disable z-buffering, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_Clear(device, 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffff0000, 0.0f, 0);
- ok(SUCCEEDED(hr), "Failed to clear render target, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ hr = IDirect3DDevice7_GetRenderTarget(device, &rt);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
+ color = get_surface_color(rt, 80, 60);
+ /* For some reason clears and colour fill blits randomly fail with software render target. */
+ ok(color == 0x00ff0000 || broken(is_software_device_type(device_guid) && !color),
+ "Got unexpected colour %#x.\n", color);
+ if (!color)
+ {
+ fill_surface(rt, 0xffff0000);
+
+ color = get_surface_color(rt, 80, 60);
+ ok(color == 0x00ff0000, "Got unexpected colour %#x.\n", color);
+ }
+
hr = IDirect3DDevice7_BeginScene(device);
- ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_DrawPrimitive(device, D3DPT_TRIANGLESTRIP, D3DFVF_XYZRHW | D3DFVF_DIFFUSE, tquad, 4, 0);
- ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
hr = IDirect3DDevice7_EndScene(device);
- ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
- hr = IDirect3DDevice7_GetRenderTarget(device, &rt);
- ok(SUCCEEDED(hr), "Failed to get render target, hr %#x.\n", hr);
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 4; ++j)
@@ -18687,7 +18701,7 @@ START_TEST(ddraw7)
test_coop_level_threaded();
run_for_each_device_type(test_depth_blit);
test_texture_load_ckey();
- test_zenable();
+ run_for_each_device_type(test_zenable);
test_ck_rgba();
test_ck_default();
test_ck_complex();
--
2.29.2
More information about the wine-devel
mailing list