[PATCH 5/5] wined3d: Ignore lights out of maximum range for legacy FFP lighting too.

Matteo Bruni mbruni at codeweavers.com
Sun Apr 9 14:03:39 CDT 2017


Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
 dlls/ddraw/tests/ddraw2.c  | 25 +++++++++++++++++++++++++
 dlls/ddraw/tests/ddraw4.c  | 25 +++++++++++++++++++++++++
 dlls/wined3d/glsl_shader.c | 14 ++++++--------
 3 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 59e073b..d7dbbbd 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -7115,6 +7115,17 @@ static void test_specular_lighting(void)
         100.0f,
         0.0f,
         1.0f, 0.0f, 0.0f,
+    },
+    point_far =
+    {
+        sizeof(D3DLIGHT2),
+        D3DLIGHT_POINT,
+        {{1.0f}, {1.0f}, {1.0f}, {0.0f}},
+        {{0.0f}, {0.0f}, {0.1f}},
+        {{0.0f}, {0.0f}, {0.0f}},
+        1.0f,
+        0.0f,
+        1.0f, 0.0f, 0.0f,
     };
     static const struct expected_color
     {
@@ -7180,6 +7191,18 @@ static void test_specular_lighting(void)
         {160, 360, 0x00000000},
         {320, 360, 0x00000000},
         {480, 360, 0x00000000},
+    },
+    expected_point_far[] =
+    {
+        {160, 120, 0x00000000},
+        {320, 120, 0x00000000},
+        {480, 120, 0x00000000},
+        {160, 240, 0x00000000},
+        {320, 240, 0x00ffffff},
+        {480, 240, 0x00000000},
+        {160, 360, 0x00000000},
+        {320, 360, 0x00000000},
+        {480, 360, 0x00000000},
     };
     static const struct
     {
@@ -7200,6 +7223,8 @@ static void test_specular_lighting(void)
                 sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])},
         {&point_side, 0.0f, expected_point_side,
                 sizeof(expected_point_side) / sizeof(expected_point_side[0])},
+        {&point_far, 1.0f, expected_point_far,
+                sizeof(expected_point_far) / sizeof(expected_point_far[0])},
     };
     IDirect3D2 *d3d;
     IDirect3DDevice2 *device;
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 90face2..045ff94 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -4167,6 +4167,17 @@ static void test_specular_lighting(void)
         100.0f,
         0.0f,
         1.0f, 0.0f, 0.0f,
+    },
+    point_far =
+    {
+        sizeof(D3DLIGHT2),
+        D3DLIGHT_POINT,
+        {{1.0f}, {1.0f}, {1.0f}, {0.0f}},
+        {{0.0f}, {0.0f}, {0.1f}},
+        {{0.0f}, {0.0f}, {0.0f}},
+        1.0f,
+        0.0f,
+        1.0f, 0.0f, 0.0f,
     };
     static const struct expected_color
     {
@@ -4232,6 +4243,18 @@ static void test_specular_lighting(void)
         {160, 360, 0x00000000},
         {320, 360, 0x00000000},
         {480, 360, 0x00000000},
+    },
+    expected_point_far[] =
+    {
+        {160, 120, 0x00000000},
+        {320, 120, 0x00000000},
+        {480, 120, 0x00000000},
+        {160, 240, 0x00000000},
+        {320, 240, 0x00ffffff},
+        {480, 240, 0x00000000},
+        {160, 360, 0x00000000},
+        {320, 360, 0x00000000},
+        {480, 360, 0x00000000},
     };
     static const struct
     {
@@ -4257,6 +4280,8 @@ static void test_specular_lighting(void)
                 sizeof(expected_parallelpoint) / sizeof(expected_parallelpoint[0])},
         {&point_side, TRUE, 0.0f, expected_point_side,
                 sizeof(expected_point_side) / sizeof(expected_point_side[0])},
+        {&point_far, TRUE, 1.0f, expected_point_far,
+                sizeof(expected_point_far) / sizeof(expected_point_far[0])},
     };
     IDirect3D3 *d3d;
     IDirect3DDevice3 *device;
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 7c657bc..4450ea7 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -7672,6 +7672,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
         {
             shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx);
             shader_addline(buffer, "dst.z = dst.y * dst.y;\n");
+            shader_addline(buffer, "if (dst.y > 0.0)\n{\n");
         }
         else
         {
@@ -7684,14 +7685,12 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
         shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx);
         if (!settings->normal)
         {
-            if (!legacy_lighting)
-                shader_addline(buffer, "}\n");
+            shader_addline(buffer, "}\n");
             continue;
         }
         shader_addline(buffer, "dir = normalize(dir);\n");
         shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i);
-        if (!legacy_lighting)
-            shader_addline(buffer, "}\n");
+        shader_addline(buffer, "}\n");
     }
 
     for (i = 0; i < settings->spot_light_count; ++i, ++idx)
@@ -7704,6 +7703,7 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
         {
             shader_addline(buffer, "dst.y = (ffp_light[%u].range - dst.y) / ffp_light[%u].range;\n", idx, idx);
             shader_addline(buffer, "dst.z = dst.y * dst.y;\n");
+            shader_addline(buffer, "if (dst.y > 0.0)\n{\n");
         }
         else
         {
@@ -7727,13 +7727,11 @@ static void shader_glsl_ffp_vertex_lighting(struct wined3d_string_buffer *buffer
         shader_addline(buffer, "ambient += ffp_light[%u].ambient.xyz * att;\n", idx);
         if (!settings->normal)
         {
-            if (!legacy_lighting)
-                shader_addline(buffer, "}\n");
+            shader_addline(buffer, "}\n");
             continue;
         }
         shader_glsl_ffp_vertex_lighting_footer(buffer, settings, i);
-        if (!legacy_lighting)
-            shader_addline(buffer, "}\n");
+        shader_addline(buffer, "}\n");
     }
 
     for (i = 0; i < settings->directional_light_count; ++i, ++idx)
-- 
2.10.2




More information about the wine-patches mailing list