Matteo Bruni : ddraw/tests: Accept broken testbot result for ddraw1: test_texturemapblend().
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 21 07:24:24 CDT 2015
Module: wine
Branch: master
Commit: 5ec54d2f3b14db8195de0b8a9b8edcfc1ba12374
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ec54d2f3b14db8195de0b8a9b8edcfc1ba12374
Author: Matteo Bruni <mbruni at codeweavers.com>
Date: Thu May 21 00:24:45 2015 +0200
ddraw/tests: Accept broken testbot result for ddraw1:test_texturemapblend().
---
dlls/ddraw/tests/ddraw1.c | 35 +++++++++++++++++++++++++++++------
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index a1e595c..f97b964 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -6427,6 +6427,24 @@ static void test_texturemapblend(void)
emit_set_rs(&ptr, D3DRENDERSTATE_ZENABLE, D3DZB_FALSE);
emit_set_rs(&ptr, D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCALPHA);
emit_set_rs(&ptr, D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCALPHA);
+ /* The history of D3DRENDERSTATE_ALPHABLENDENABLE is quite a mess. In the
+ * first D3D release there was a D3DRENDERSTATE_BLENDENABLE (enum value 27).
+ * D3D5 introduced a new and separate D3DRENDERSTATE_ALPHABLENDENABLE (42)
+ * together with D3DRENDERSTATE_COLORKEYENABLE (41). The docs aren't all
+ * that clear but they mention that D3DRENDERSTATE_BLENDENABLE overrides the
+ * two new states.
+ * Then D3D6 came and got rid of the new D3DRENDERSTATE_ALPHABLENDENABLE
+ * state (42), renaming the older D3DRENDERSTATE_BLENDENABLE enum (27)
+ * as D3DRENDERSTATE_ALPHABLENDENABLE.
+ * There is a comment in the D3D6 docs which mentions that hardware
+ * rasterizers always used D3DRENDERSTATE_BLENDENABLE to just toggle alpha
+ * blending while prior to D3D5 software rasterizers toggled both color
+ * keying and alpha blending according to it. What I gather is that, from
+ * D3D6 onwards, D3DRENDERSTATE_ALPHABLENDENABLE always only toggles the
+ * alpha blending state.
+ * These tests seem to show that actual, current hardware follows the D3D6
+ * behavior even when using the original D3D interfaces, for the HAL device
+ * at least. */
emit_set_rs(&ptr, D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
emit_set_rs(&ptr, D3DRENDERSTATE_TEXTUREMAPBLEND, D3DTBLEND_MODULATE);
emit_set_rs(&ptr, D3DRENDERSTATE_TEXTUREHANDLE, texture_handle);
@@ -6658,10 +6676,12 @@ static void test_texturemapblend(void)
emit_process_vertices(&ptr, D3DPROCESSVERTICES_COPY, 0, 8);
emit_set_rs(&ptr, D3DRENDERSTATE_ALPHABLENDENABLE, TRUE);
emit_set_rs(&ptr, D3DRENDERSTATE_TEXTUREHANDLE, texture_handle);
- /* This is supposed to be on by default on version 1 devices,
- * but for some reason it randomly defaults to FALSE on the W8
- * testbot. This is either the fault of Windows 8 or the WARP
- * driver. */
+ /* D3DRENDERSTATE_COLORKEYENABLE is supposed to be on by default on version
+ * 1 devices, but for some reason it randomly defaults to FALSE on the W8
+ * testbot. This is either the fault of Windows 8 or the WARP driver.
+ * Also D3DRENDERSTATE_COLORKEYENABLE was introduced in D3D 5 aka version 2
+ * devices only, which might imply this doesn't actually do anything on
+ * WARP. */
emit_set_rs(&ptr, D3DRENDERSTATE_COLORKEYENABLE, TRUE);
emit_tquad(&ptr, 0);
@@ -6681,12 +6701,15 @@ static void test_texturemapblend(void)
hr = IDirect3DDevice_EndScene(device);
ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
+ /* Allow broken WARP results (colorkey disabled). */
color = get_surface_color(rt, 5, 5);
- ok(compare_color(color, 0x00000000, 2), "Got unexpected color 0x%08x.\n", color);
+ ok(compare_color(color, 0x00000000, 2) || broken(compare_color(color, 0x000000ff, 2)),
+ "Got unexpected color 0x%08x.\n", color);
color = get_surface_color(rt, 400, 5);
ok(compare_color(color, 0x00ff0000, 2), "Got unexpected color 0x%08x.\n", color);
color = get_surface_color(rt, 5, 245);
- ok(compare_color(color, 0x00000000, 2), "Got unexpected color 0x%08x.\n", color);
+ ok(compare_color(color, 0x00000000, 2) || broken(compare_color(color, 0x00000080, 2)),
+ "Got unexpected color 0x%08x.\n", color);
color = get_surface_color(rt, 400, 245);
ok(compare_color(color, 0x00800000, 2), "Got unexpected color 0x%08x.\n", color);
More information about the wine-cvs
mailing list