From dd1cc2f3b1df472be405f4b95107972be1ea1a62 Mon Sep 17 00:00:00 2001
From: Graham Linden <graham@lindenlab.com>
Date: Fri, 19 Apr 2019 13:13:50 -0700
Subject: [PATCH] Fix sky and cloud shader usage of density_multiplier (not
 re-ranged from FS to WL).

Remove all refs to now unused calcFragAtmospherics.
---
 .../shaders/class1/deferred/cloudsV.glsl      |  5 +-
 .../shaders/class1/deferred/skyV.glsl         |  5 +-
 .../class1/windlight/atmosphericsF.glsl       |  5 -
 .../class1/windlight/atmosphericsFuncs.glsl   |  4 -
 .../shaders/class2/deferred/skyF.glsl         |  5 +-
 .../class2/windlight/atmosphericsF.glsl       | 96 -------------------
 .../shaders/class2/windlight/cloudsV.glsl     |  5 +-
 .../shaders/class2/windlight/skyV.glsl        |  6 +-
 .../class3/windlight/atmosphericsF.glsl       | 84 ----------------
 9 files changed, 16 insertions(+), 199 deletions(-)

diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
index cfe5632ec08..6cc436c8373 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
@@ -103,10 +103,11 @@ void main()
 	vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
 	vec4 light_atten;
 
+    float dens_mul = density_multiplier * 0.5;
 
 	// Sunlight attenuation effect (hue and brightness) due to atmosphere
 	// this is used later for sunlight modulation at various altitudes
-	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+	light_atten = (blue_density + vec4(haze_density * 0.25)) * (dens_mul * max_y);
 
 	// Calculate relative weights
 	temp1 = blue_density + haze_density;
@@ -119,7 +120,7 @@ void main()
 	sunlight *= exp( - light_atten * temp2.y);
 
 	// Distance
-	temp2.z = Plen * density_multiplier;
+	temp2.z = Plen * dens_mul;
 
 	// Transparency (-> temp1)
 	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
index 83dd9da091c..7d56742d6f3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
@@ -87,10 +87,11 @@ void main()
 	vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
 	vec4 light_atten;
 
+    float dens_mul = density_multiplier * 0.5;
 
 	// Sunlight attenuation effect (hue and brightness) due to atmosphere
 	// this is used later for sunlight modulation at various altitudes
-	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+	light_atten = (blue_density + vec4(haze_density * 0.25)) * (dens_mul * max_y);
 
 	// Calculate relative weights
 	temp1 = blue_density + haze_density;
@@ -103,7 +104,7 @@ void main()
 	sunlight *= exp( - light_atten * temp2.y);
 
 	// Distance
-	temp2.z = Plen * density_multiplier;
+	temp2.z = Plen * dens_mul;
 
 	// Transparency (-> temp1)
 	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
index 4f0e2a6cb6b..4e0618e2761 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
@@ -46,8 +46,3 @@ vec3 atmosLighting(vec3 light)
     return light;
 }
 
-void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive)
-{
-    /* stub function for fallback compatibility on class1 hardware */
-}
-
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
index 1d105690d10..3d05912f49f 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
@@ -42,10 +42,6 @@ uniform mat3 ssao_effect_mat;
 uniform int no_atmo;
 uniform float sun_moon_glow_factor;
 
-vec3 nothing() {
-    return vec3(0, 0, 0);
-}
-
 void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
 
     vec3 P = inPositionEye;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
index 26f8095dc12..ea926ab5f18 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
@@ -117,10 +117,11 @@ void main()
     vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
     vec4 light_atten;
 
+    float dens_mul = density_multiplier * 0.5;
 
     // Sunlight attenuation effect (hue and brightness) due to atmosphere
     // this is used later for sunlight modulation at various altitudes
-    light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+    light_atten = (blue_density + vec4(haze_density * 0.25)) * (dens_mul * max_y);
 
     // Calculate relative weights
     temp1 = blue_density + haze_density;
@@ -133,7 +134,7 @@ void main()
     sunlight *= exp( - light_atten * temp2.y);
 
     // Distance
-    temp2.z = Plen * density_multiplier;
+    temp2.z = Plen * dens_mul;
 
     // Transparency (-> temp1)
     // ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
index 7b46a2ed288..a93253c9818 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
@@ -37,8 +37,6 @@ uniform vec4 blue_density;
 uniform float haze_horizon;
 uniform float haze_density;
 uniform float cloud_shadow;
-uniform float density_multiplier;
-uniform float distance_multiplier;
 uniform float max_y;
 uniform vec4 glow;
 uniform float scene_light_strength;
@@ -64,97 +62,3 @@ vec3 atmosLighting(vec3 light)
 {
     return atmosFragLighting(light, getAdditiveColor(), getAtmosAttenuation());
 }
-
-void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
-
-    vec3 P = inPositionEye;
-   
-    //(TERRAIN) limit altitude
-    if (P.y > max_y) P *= (max_y / P.y);
-    if (P.y < -max_y) P *= (-max_y / P.y); 
-
-    vec3 tmpLightnorm = lightnorm.xyz;
-
-    vec3 Pn = normalize(P);
-    float Plen = length(P);
-
-    vec4 temp1 = vec4(0);
-    vec3 temp2 = vec3(0);
-    vec4 blue_weight;
-    vec4 haze_weight;
-    vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
-    vec4 light_atten;
-
-    //sunlight attenuation effect (hue and brightness) due to atmosphere
-    //this is used later for sunlight modulation at various altitudes
-    light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
-        //I had thought blue_density and haze_density should have equal weighting,
-        //but attenuation due to haze_density tends to seem too strong
-
-    temp1 = blue_density + vec4(haze_density);
-    blue_weight = blue_density / temp1;
-    haze_weight = vec4(haze_density) / temp1;
-
-    //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
-    temp2.y = max(0.0, tmpLightnorm.y);
-    if (temp2.y > 0.001f)
-    {
-        temp2.y = 1. / temp2.y;
-    }
-    temp2.y = max(0.001f, temp2.y);
-    sunlight *= exp(-light_atten * temp2.y);
-
-    // main atmospheric scattering line integral
-    temp2.z = Plen * density_multiplier;
-
-    // Transparency (-> temp1)
-    // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati
-    // compiler gets confused.
-    temp1 = exp(-temp1 * temp2.z * distance_multiplier);
-
-    //final atmosphere attenuation factor
-    atten = temp1.rgb;
-    
-    //compute haze glow
-    //(can use temp2.x as temp because we haven't used it yet)
-    temp2.x = dot(Pn, tmpLightnorm.xyz);
-    temp2.x = 1. - temp2.x;
-        //temp2.x is 0 at the sun and increases away from sun
-    temp2.x = max(temp2.x, .03);    //was glow.y
-        //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)
-    temp2.x *= glow.x;
-        //higher glow.x gives dimmer glow (because next step is 1 / "angle")
-    temp2.x = pow(temp2.x, glow.z);
-        //glow.z should be negative, so we're doing a sort of (1 / "angle") function
-
-    //add "minimum anti-solar illumination"
-    temp2.x += .25;
-
-    temp2.x *= sun_moon_glow_factor;
-    
-    //increase ambient when there are more clouds
-    vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;
-    
-    /*  decrease value and saturation (that in HSV, not HSL) for occluded areas
-     * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html
-     * // The following line of code performs the equivalent of:
-     * float ambAlpha = tmpAmbient.a;
-     * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis
-     * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue);
-     * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha);
-     */
-    tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a);
-
-    //haze color
-        additive =
-        vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)
-                  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x
-          + tmpAmbient));
-
-    //brightness of surface both sunlight and ambient
-    sunlit = vec3(sunlight.rgb);
-    amblit = vec3(tmpAmbient * .25);
-    additive  = normalize(additive);
-    additive *= vec3(1.0 - exp(-temp2.z * distance_multiplier)) * 0.5;
-}
-
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
index 36badc5214a..fcfe5bbba0c 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
@@ -103,10 +103,11 @@ void main()
     vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
     vec4 light_atten;
 
+    float dens_mul = density_multiplier * 0.5;
 
     // Sunlight attenuation effect (hue and brightness) due to atmosphere
     // this is used later for sunlight modulation at various altitudes
-    light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+    light_atten = (blue_density + vec4(haze_density * 0.25)) * (dens_mul * max_y);
 
     // Calculate relative weights
     temp1 = blue_density + haze_density;
@@ -119,7 +120,7 @@ void main()
     sunlight *= exp( - light_atten * temp2.y);
 
     // Distance
-    temp2.z = Plen * density_multiplier;
+    temp2.z = Plen * dens_mul;
 
     // Transparency (-> temp1)
     // ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
index 5798493ce52..a253bb72d52 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
@@ -87,9 +87,11 @@ void main()
 	vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
 	vec4 light_atten;
 
+    float dens_mul = density_multiplier * 0.5;
+
 	// Sunlight attenuation effect (hue and brightness) due to atmosphere
 	// this is used later for sunlight modulation at various altitudes
-	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+	light_atten = (blue_density + vec4(haze_density * 0.25)) * (dens_mul * max_y);
 
 	// Calculate relative weights
 	temp1 = blue_density + haze_density;
@@ -102,7 +104,7 @@ void main()
 	sunlight *= exp( - light_atten * temp2.y);
 
 	// Distance
-	temp2.z = Plen * density_multiplier;
+	temp2.z = Plen * dens_mul;
 
 	// Transparency (-> temp1)
 	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati
diff --git a/indra/newview/app_settings/shaders/class3/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class3/windlight/atmosphericsF.glsl
index bc13aa93884..c0a0d4782df 100644
--- a/indra/newview/app_settings/shaders/class3/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class3/windlight/atmosphericsF.glsl
@@ -37,8 +37,6 @@ uniform vec4 blue_density;
 uniform float haze_horizon;
 uniform float haze_density;
 uniform float cloud_shadow;
-uniform float density_multiplier;
-uniform float distance_multiplier;
 uniform float max_y;
 uniform vec4 glow;
 uniform float scene_light_strength;
@@ -58,85 +56,3 @@ vec3 atmosLighting(vec3 light)
     return atmosFragLighting(light, getAdditiveColor(), getAtmosAttenuation());
 }
 
-void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) {
-
-	vec3 P = inPositionEye;
-	
-	vec3 tmpLightnorm = lightnorm.xyz;
-
-	vec3 Pn = normalize(P);
-	float Plen = length(P);
-
-	vec4 temp1 = vec4(0);
-	vec3 temp2 = vec3(0);
-	vec4 blue_weight;
-	vec4 haze_weight;
-	vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color;
-	vec4 light_atten;
-
-	//sunlight attenuation effect (hue and brightness) due to atmosphere
-	//this is used later for sunlight modulation at various altitudes
-	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
-		//I had thought blue_density and haze_density should have equal weighting,
-		//but attenuation due to haze_density tends to seem too strong
-
-	temp1 = blue_density + vec4(haze_density);
-	blue_weight = blue_density / temp1;
-	haze_weight = vec4(haze_density) / temp1;
-
-	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
-	temp2.y = max(0.0, tmpLightnorm.y);
-	temp2.y = 1. / temp2.y;
-	sunlight *= exp( - light_atten * temp2.y);
-
-	// main atmospheric scattering line integral
-	temp2.z = Plen * density_multiplier;
-
-	// Transparency (-> temp1)
-	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati
-	// compiler gets confused.
-	temp1 = exp(-temp1 * temp2.z * distance_multiplier);
-
-	//final atmosphere attenuation factor
-	atten = temp1.rgb;
-	
-	//compute haze glow
-	//(can use temp2.x as temp because we haven't used it yet)
-	temp2.x = dot(Pn, tmpLightnorm.xyz);
-	temp2.x = 1. - temp2.x;
-		//temp2.x is 0 at the sun and increases away from sun
-	temp2.x = max(temp2.x, .03);	//was glow.y
-		//set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)
-	temp2.x *= glow.x;
-		//higher glow.x gives dimmer glow (because next step is 1 / "angle")
-	temp2.x = pow(temp2.x, glow.z);
-		//glow.z should be negative, so we're doing a sort of (1 / "angle") function
-
-	//add "minimum anti-solar illumination"
-	temp2.x += .25;
-	
-	//increase ambient when there are more clouds
-	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;
-	
-	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas
-	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html
-	 * // The following line of code performs the equivalent of:
-	 * float ambAlpha = tmpAmbient.a;
-	 * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis
-	 * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue);
-	 * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha);
-	 */
-	tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a);
-
-	//haze color
-        additive =
-		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)
-     	          + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x
-		  + tmpAmbient));
-
-	//brightness of surface both sunlight and ambient
-	sunlit = vec3(sunlight * .5);
-	amblit = vec3(tmpAmbient * .25);
-	additive *= vec3(1.0 - temp1);
-}
-
-- 
GitLab