=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: d3d/tests: Geforce8+ GPUs abs() table fog.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Feb 13 07:55:57 CST 2015


Module: wine
Branch: master
Commit: f75d1b0c2f77d8c85f7c2a9bcc3545f14e271a86
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f75d1b0c2f77d8c85f7c2a9bcc3545f14e271a86

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Fri Feb 13 10:51:38 2015 +0100

d3d/tests: Geforce8+ GPUs abs() table fog.

---

 dlls/d3d8/tests/visual.c  | 23 ++++++++++++++---------
 dlls/d3d9/tests/visual.c  | 23 ++++++++++++++---------
 dlls/ddraw/tests/ddraw7.c | 28 +++++++++++++++++++---------
 3 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/dlls/d3d8/tests/visual.c b/dlls/d3d8/tests/visual.c
index 40bbc59..c095463 100644
--- a/dlls/d3d8/tests/visual.c
+++ b/dlls/d3d8/tests/visual.c
@@ -5458,26 +5458,30 @@ static void test_negative_fixedfunction_fog(void)
             DWORD d;
         } start, end;
         D3DFOGMODE vfog, tfog;
-        DWORD color, color_broken;
+        DWORD color, color_broken, color_broken2;
     }
     tests[] =
     {
-        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot. */
+        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot.
+         *
+         * Geforce8+ GPUs on Windows abs() table fog, everything else does not. */
         {D3DFVF_XYZRHW, tquad,  sizeof(*tquad), &identity, { 0.0f}, {1.0f},
-                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00ff0000, 0x00ff0000},
+                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00ff0000, 0x00808000, 0x00808000},
         /* r200 GPUs and presumably all d3d8 and older HW clamp the fog
          * parameters to 0.0 and 1.0 in the table fog case. */
         {D3DFVF_XYZRHW, tquad,  sizeof(*tquad), &identity, {-1.0f}, {0.0f},
-                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00808000, 0x00ff0000},
+                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00808000, 0x00ff0000, 0x0000ff00},
         /* test_fog_interpolation shows that vertex fog evaluates the fog
          * equation in the vertex pipeline. Start = -1.0 && end = 0.0 shows
-         * that the abs happens before the fog equation is evaluated. */
+         * that the abs happens before the fog equation is evaluated.
+         *
+         * Vertex fog abs() behavior is the same on all GPUs. */
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     { 0.0f}, {1.0f},
-                D3DFOG_LINEAR, D3DFOG_NONE,   0x00808000, 0x00808000},
+                D3DFOG_LINEAR, D3DFOG_NONE,   0x00808000, 0x00808000, 0x00808000},
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     {-1.0f}, {0.0f},
-                D3DFOG_LINEAR, D3DFOG_NONE,   0x0000ff00, 0x0000ff00},
+                D3DFOG_LINEAR, D3DFOG_NONE,   0x0000ff00, 0x0000ff00, 0x0000ff00},
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     { 0.0f}, {1.0f},
-                D3DFOG_EXP,    D3DFOG_NONE,   0x009b6400, 0x009b6400},
+                D3DFOG_EXP,    D3DFOG_NONE,   0x009b6400, 0x009b6400, 0x009b6400},
     };
     D3DCAPS8 caps;
 
@@ -5539,7 +5543,8 @@ static void test_negative_fixedfunction_fog(void)
         ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
 
         color = getPixelColor(device, 320, 240);
-        ok(color_match(color, tests[i].color, 2) || broken(color_match(color, tests[i].color_broken, 2)),
+        ok(color_match(color, tests[i].color, 2) || broken(color_match(color, tests[i].color_broken, 2))
+                || broken(color_match(color, tests[i].color_broken2, 2)),
                 "Got unexpected color 0x%08x, case %u.\n", color, i);
         hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL);
         ok(SUCCEEDED(hr), "Failed to present, hr %#x.\n", hr);
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
index b4df9c4..a8cf55f 100644
--- a/dlls/d3d9/tests/visual.c
+++ b/dlls/d3d9/tests/visual.c
@@ -17057,26 +17057,30 @@ static void test_negative_fixedfunction_fog(void)
             DWORD d;
         } start, end;
         D3DFOGMODE vfog, tfog;
-        DWORD color, color_broken;
+        DWORD color, color_broken, color_broken2;
     }
     tests[] =
     {
-        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot. */
+        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot.
+         *
+         * Geforce8+ GPUs on Windows abs() table fog, everything else does not. */
         {D3DFVF_XYZRHW, tquad,  sizeof(*tquad), &identity, { 0.0f}, {1.0f},
-                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00ff0000, 0x00ff0000},
+                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00ff0000, 0x00808000, 0x00808000},
         /* r200 GPUs and presumably all d3d8 and older HW clamp the fog
          * parameters to 0.0 and 1.0 in the table fog case. */
         {D3DFVF_XYZRHW, tquad,  sizeof(*tquad), &identity, {-1.0f}, {0.0f},
-                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00808000, 0x00ff0000},
+                D3DFOG_NONE,   D3DFOG_LINEAR, 0x00808000, 0x00ff0000, 0x0000ff00},
         /* test_fog_interpolation shows that vertex fog evaluates the fog
          * equation in the vertex pipeline. Start = -1.0 && end = 0.0 shows
-         * that the abs happens before the fog equation is evaluated. */
+         * that the abs happens before the fog equation is evaluated.
+         *
+         * Vertex fog abs() behavior is the same on all GPUs. */
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     { 0.0f}, {1.0f},
-                D3DFOG_LINEAR, D3DFOG_NONE,   0x00808000, 0x00808000},
+                D3DFOG_LINEAR, D3DFOG_NONE,   0x00808000, 0x00808000, 0x00808000},
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     {-1.0f}, {0.0f},
-                D3DFOG_LINEAR, D3DFOG_NONE,   0x0000ff00, 0x0000ff00},
+                D3DFOG_LINEAR, D3DFOG_NONE,   0x0000ff00, 0x0000ff00, 0x0000ff00},
         {D3DFVF_XYZ,    quad,   sizeof(*quad),  &zero,     { 0.0f}, {1.0f},
-                D3DFOG_EXP,    D3DFOG_NONE,   0x009b6400, 0x009b6400},
+                D3DFOG_EXP,    D3DFOG_NONE,   0x009b6400, 0x009b6400, 0x009b6400},
     };
     D3DCAPS9 caps;
 
@@ -17138,7 +17142,8 @@ static void test_negative_fixedfunction_fog(void)
         ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
 
         color = getPixelColor(device, 320, 240);
-        ok(color_match(color, tests[i].color, 2) || broken(color_match(color, tests[i].color_broken, 2)),
+        ok(color_match(color, tests[i].color, 2) || broken(color_match(color, tests[i].color_broken, 2))
+                || broken(color_match(color, tests[i].color_broken2, 2)),
                 "Got unexpected color 0x%08x, case %u.\n", color, i);
         hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL);
         ok(SUCCEEDED(hr), "Failed to present, hr %#x.\n", hr);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 01d0fcb..90ea739 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -8097,21 +8097,30 @@ static void test_negative_fixedfunction_fog(void)
             DWORD d;
         } start, end;
         D3DFOGMODE vfog, tfog;
-        DWORD color, color_broken;
+        DWORD color, color_broken, color_broken2;
     }
     tests[] =
     {
-        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot. */
-        {D3DFVF_XYZRHW, tquad,  &identity, { 0.0f}, {1.0f}, D3DFOG_NONE,   D3DFOG_LINEAR, 0x00ff0000, 0x00ff0000},
+        /* Run the XYZRHW tests first. Depth clamping is broken after RHW draws on the testbot.
+         *
+         * Geforce8+ GPUs on Windows abs() table fog, everything else does not. */
+        {D3DFVF_XYZRHW, tquad,  &identity, { 0.0f}, {1.0f}, D3DFOG_NONE,   D3DFOG_LINEAR,
+                0x00ff0000, 0x00808000, 0x00808000},
         /* r200 GPUs and presumably all d3d8 and older HW clamp the fog
          * parameters to 0.0 and 1.0 in the table fog case. */
-        {D3DFVF_XYZRHW, tquad,  &identity, {-1.0f}, {0.0f}, D3DFOG_NONE,   D3DFOG_LINEAR, 0x00808000, 0x00ff0000},
+        {D3DFVF_XYZRHW, tquad,  &identity, {-1.0f}, {0.0f}, D3DFOG_NONE,   D3DFOG_LINEAR,
+                0x00808000, 0x00ff0000, 0x0000ff00},
         /* test_fog_interpolation shows that vertex fog evaluates the fog
          * equation in the vertex pipeline. Start = -1.0 && end = 0.0 shows
-         * that the abs happens before the fog equation is evaluated. */
-        {D3DFVF_XYZ,    quad,   &zero,     { 0.0f}, {1.0f}, D3DFOG_LINEAR, D3DFOG_NONE,   0x00808000, 0x00808000},
-        {D3DFVF_XYZ,    quad,   &zero,     {-1.0f}, {0.0f}, D3DFOG_LINEAR, D3DFOG_NONE,   0x0000ff00, 0x0000ff00},
-        {D3DFVF_XYZ,    quad,   &zero,     { 0.0f}, {1.0f}, D3DFOG_EXP,    D3DFOG_NONE,   0x009b6400, 0x009b6400},
+         * that the abs happens before the fog equation is evaluated.
+         *
+         * Vertex fog abs() behavior is the same on all GPUs. */
+        {D3DFVF_XYZ,    quad,   &zero,     { 0.0f}, {1.0f}, D3DFOG_LINEAR, D3DFOG_NONE,
+                0x00808000, 0x00808000, 0x00808000},
+        {D3DFVF_XYZ,    quad,   &zero,     {-1.0f}, {0.0f}, D3DFOG_LINEAR, D3DFOG_NONE,
+                0x0000ff00, 0x0000ff00, 0x0000ff00},
+        {D3DFVF_XYZ,    quad,   &zero,     { 0.0f}, {1.0f}, D3DFOG_EXP,    D3DFOG_NONE,
+                0x009b6400, 0x009b6400, 0x009b6400},
     };
     D3DDEVICEDESC7 caps;
 
@@ -8170,7 +8179,8 @@ static void test_negative_fixedfunction_fog(void)
         ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr);
 
         color = get_surface_color(rt, 0, 240);
-        ok(compare_color(color, tests[i].color, 2) || broken(compare_color(color, tests[i].color_broken, 2)),
+        ok(compare_color(color, tests[i].color, 2) || broken(compare_color(color, tests[i].color_broken, 2))
+                || broken(compare_color(color, tests[i].color_broken2, 2)),
                 "Got unexpected color 0x%08x, case %u.\n", color, i);
     }
 




More information about the wine-cvs mailing list