From 9de895aa03570935e49aeb5eb874444904de59e6 Mon Sep 17 00:00:00 2001
From: Graham Linden <graham@lindenlab.com>
Date: Tue, 15 Jan 2019 16:06:34 -0800
Subject: [PATCH] SL-10369

Fix handling of backfaces in shared shadow sampling broken during de-duplication.
---
 .../shaders/class1/deferred/shadowUtil.glsl            | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl
index f626609fc24..70568bc75f2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl
@@ -120,6 +120,13 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)
 
     float shadow = 0.0f;
     vec4 spos = vec4(shadow_pos,1.0);
+
+    // if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup
+    if (dp_directional_light <= 0.0)
+    {
+        return 0.0;
+    }
+
     if (spos.z > -shadow_clip.w)
     {   
         vec4 lpos;
@@ -174,7 +181,8 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)
 
         shadow /= weight;
     }
-    return shadow;
+
+    return min(dp_directional_light, shadow);
 }
 
 float sampleSpotShadow(vec3 pos, vec3 norm, int index, vec2 pos_screen)
-- 
GitLab