diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
index 0b97ee43e32f885551a194b3bb60fa4b28f56aa1..2989332e9842282cff2b3cf906f4531454f151e5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
@@ -24,9 +24,6 @@
  */
 
 
-
-
-
 /*  Parts of this file are taken from Sascha Willem's Vulkan GLTF refernce implementation
 MIT License
 
@@ -351,149 +348,6 @@ vec3 hue_to_rgb(float hue)
 
 // PBR Utils
 
-vec3 fresnelSchlick( vec3 reflect0, vec3 reflect90, float vh)
-{
-    return reflect0 + (reflect90 - reflect0) * pow(clamp(1.0 - vh, 0.0, 1.0), 5.0);
-}
-
-// Approximate Environment BRDF
-vec2 getGGXApprox( vec2 uv )
-{
-    // Reference: Physically Based Shading on Mobile
-    // https://www.unrealengine.com/en-US/blog/physically-based-shading-on-mobile
-    //     EnvBRDFApprox( vec3 SpecularColor, float Roughness, float NoV )
-    float nv        = uv.x;
-    float roughness = uv.y;
-
-    const vec4  c0        = vec4( -1, -0.0275, -0.572, 0.022 );
-    const vec4  c1        = vec4(  1,  0.0425,  1.04 , -0.04 );
-          vec4  r         = roughness * c0 + c1;
-          float a004      = min( r.x * r.x, exp2( -9.28 * nv ) ) * r.x + r.y;
-          vec2  ScaleBias = vec2( -1.04, 1.04 ) * a004 + r.zw;
-    return ScaleBias;
-}
-
-#define PBR_USE_GGX_APPROX 1
-vec2 getGGX( vec2 brdfPoint )
-{
-#if PBR_USE_GGX_APPROX
-    return getGGXApprox( brdfPoint);
-#else
-    return texture2D(GGXLUT, brdfPoint).rg;   // TODO: use GGXLUT
-#endif
-}
-
-
-// Reference: float getRangeAttenuation(float range, float distance)
-float getLightAttenuationPointSpot(float range, float distance)
-{
-#if 1
-    return distance;
-#else
-    float range2 = pow(range, 2.0);
-
-    // support negative range as unlimited
-    if (range <= 0.0)
-    {
-        return 1.0 / range2;
-    }
-
-    return max(min(1.0 - pow(distance / range, 4.0), 1.0), 0.0) / range2;
-#endif
-}
-
-vec3 getLightIntensityPoint(vec3 lightColor, float lightRange, float lightDistance)
-{
-    float  rangeAttenuation = getLightAttenuationPointSpot(lightRange, lightDistance);
-    return rangeAttenuation * lightColor;
-}
-
-float getLightAttenuationSpot(vec3 spotDirection)
-{
-    return 1.0;
-}
-
-vec3 getLightIntensitySpot(vec3 lightColor, float lightRange, float lightDistance, vec3 v)
-{
-    float  spotAttenuation = getLightAttenuationSpot(-v);
-    return spotAttenuation * getLightIntensityPoint( lightColor, lightRange, lightDistance );
-}
-
-// NOTE: This is different from the GGX texture
-float D_GGX( float nh, float alphaRough )
-{
-    float rough2 = alphaRough * alphaRough;
-    float f      = (nh * nh) * (rough2 - 1.0) + 1.0;
-    return rough2 / (M_PI * f * f);
-}
-
-// NOTE: This is different from the GGX texture
-// See:
-//   Real Time Rendering, 4th Edition
-//   Page 341
-//   Equation 9.43
-// Also see:
-//   https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg)
-//   4.4.2 Geometric Shadowing (specular G)
-float V_GGX( float nl, float nv, float alphaRough )
-{
-#if 1
-    // Note: When roughness is zero, has discontuinity in the bottom hemisphere
-    float rough2 = alphaRough * alphaRough;
-    float ggxv   = nl * sqrt(nv * nv * (1.0 - rough2) + rough2);
-    float ggxl   = nv * sqrt(nl * nl * (1.0 - rough2) + rough2);
-
-    float ggx    = ggxv + ggxl;
-    if (ggx > 0.0)
-    {
-        return 0.5 / ggx;
-    }
-    return 0.0;
-#else
-    // See: smithVisibility_GGXCorrelated, V_SmithCorrelated, etc.
-    float rough2 = alphaRough * alphaRough;
-    float ggxv = nl * sqrt(nv * (nv - rough2 * nv) + rough2);
-    float ggxl = nv * sqrt(nl * (nl - rough2 * nl) + rough2);
-    return 0.5 / (ggxv + ggxl);
-#endif
-
-}
-
-// NOTE: Assumes a hard-coded IOR = 1.5
-void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight )
-{
-    float metal      = packedORM.b;
-          c_diff     = mix(diffuse, vec3(0), metal);
-    float IOR        = 1.5;                                // default Index Of Refraction 1.5 (dielectrics)
-          reflect0   = vec3(0.04);                         // -> incidence reflectance 0.04
-//        reflect0   = vec3(calcF0(IOR));
-          reflect0   = mix(reflect0, diffuse, metal);      // reflect at 0 degrees
-          reflect90  = vec3(1);                            // reflect at 90 degrees
-          specWeight = 1.0;
-
-    // When roughness is zero blender shows a tiny specular
-    float perceptualRough = max(packedORM.g, 0.1);
-          alphaRough      = perceptualRough * perceptualRough;
-}
-
-vec3 BRDFDiffuse(vec3 color)
-{
-    return color * ONE_OVER_PI;
-}
-
-vec3 BRDFLambertian( vec3 reflect0, vec3 reflect90, vec3 c_diff, float specWeight, float vh )
-{
-    return (1.0 - fresnelSchlick( reflect0, reflect90, vh)) * BRDFDiffuse(c_diff);
-}
-
-vec3 BRDFSpecularGGX( vec3 reflect0, vec3 reflect90, float alphaRough, float specWeight, float vh, float nl, float nv, float nh )
-{
-    vec3 fresnel    = fresnelSchlick( reflect0, reflect90, vh ); // Fresnel
-    float vis       = V_GGX( nl, nv, alphaRough );               // Visibility
-    float d         = D_GGX( nh, alphaRough );                   // Distribution
-    return fresnel * vis * d;
-}
-
 vec2 BRDF(float NoV, float roughness)
 {
     return texture(brdfLut, vec2(NoV, roughness)).rg;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
index 077c9850922d519fd873432aa528703c391b37f0..aec2a90bda17c79d347016734165d1335a531319 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbralphaF.glsl
@@ -98,9 +98,6 @@ vec3 scaleSoftClipFrag(vec3 l);
 
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
-vec2 getGGX( vec2 brdfPoint );
-void initMaterial( vec3 diffuse, vec3 packedORM,
-        out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight );
 float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen);
 void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv, inout vec3 legacyEnv, 
         vec3 pos, vec3 norm, float glossiness, float envIntensity);
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
index 4fbfaf9898e981c900f96d1e52327ac93a7ab65e..2ee439f61a1127960c9b29a347c4e865faf357a7 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
@@ -52,15 +52,11 @@ uniform mat4  inv_proj;
 
 VARYING vec4 vary_fragcoord;
 
-vec3 BRDFLambertian( vec3 reflect0, vec3 reflect90, vec3 c_diff, float specWeight, float vh );
-vec3 BRDFSpecularGGX( vec3 reflect0, vec3 reflect90, float alphaRoughness, float specWeight, float vh, float nl, float nv, float nh );
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
-vec3 getLightIntensityPoint(vec3 lightColor, float lightRange, float lightDistance);
 vec4 getPosition(vec2 pos_screen);
 vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity);
 vec2 getScreenXY(vec4 clip);
-void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight );
 vec3 srgb_to_linear(vec3 c);
 
 // Util
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
index bcacc44d0bbe236446683905edcb034fba8d089e..6424e18079292a5aab4605aac622eb25fc436937 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
@@ -73,18 +73,15 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
-vec3 BRDFLambertian( vec3 reflect0, vec3 reflect90, vec3 c_diff, float specWeight, float vh );
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
 vec3 colorized_dot(float x);
 bool clipProjectedLightVars(vec3 center, vec3 pos, out float dist, out float l_dist, out vec3 lv, out vec4 proj_tc );
-vec3 getLightIntensitySpot(vec3 lightColor, float lightRange, float lightDistance, vec3 v);
 vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity);
 vec3 getProjectedLightAmbiance(float amb_da, float attenuation, float lit, float nl, float noise, vec2 projected_uv);
 vec3 getProjectedLightDiffuseColor(float light_distance, vec2 projected_uv );
 vec3 getProjectedLightSpecularColor(vec3 pos, vec3 n);
 vec2 getScreenXY(vec4 clip);
-void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight );
 vec3 srgb_to_linear(vec3 cs);
 vec4 texture2DLodSpecular(vec2 tc, float lod);
 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
index 1fc80016cb075e4c400f0e0e120110faef022787..27fca64ab34269b1f25b9669e5ce07114844846a 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
@@ -57,15 +57,11 @@ uniform vec2 screen_res;
 uniform mat4 inv_proj;
 uniform vec4 viewport;
 
-vec3 BRDFLambertian( vec3 reflect0, vec3 reflect90, vec3 c_diff, float specWeight, float vh );
-vec3 BRDFSpecularGGX( vec3 reflect0, vec3 reflect90, float alphaRoughness, float specWeight, float vh, float nl, float nv, float nh );
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
-vec3 getLightIntensityPoint(vec3 lightColor, float lightRange, float lightDistance);
 vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity);
 vec4 getPosition(vec2 pos_screen);
 vec2 getScreenXY(vec4 clip);
-void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight );
 vec3 srgb_to_linear(vec3 c);
 
 vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor, 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
index 787da799a57d91a8037e3964386a15e65313147b..c8d45eb42976317bd3f667389e151d77ecb40305 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
@@ -82,17 +82,14 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
-vec3 BRDFLambertian( vec3 reflect0, vec3 reflect90, vec3 c_diff, float specWeight, float vh );
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
 bool clipProjectedLightVars(vec3 center, vec3 pos, out float dist, out float l_dist, out vec3 lv, out vec4 proj_tc );
-vec3 getLightIntensitySpot(vec3 lightColor, float lightRange, float lightDistance, vec3 v);
 vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity);
 vec3 getProjectedLightAmbiance(float amb_da, float attenuation, float lit, float nl, float noise, vec2 projected_uv);
 vec3 getProjectedLightDiffuseColor(float light_distance, vec2 projected_uv );
 vec3 getProjectedLightSpecularColor(vec3 pos, vec3 n);
 vec2 getScreenXY(vec4 clip_point);
-void initMaterial( vec3 diffuse, vec3 packedORM, out float alphaRough, out vec3 c_diff, out vec3 reflect0, out vec3 reflect90, out float specWeight );
 vec3 srgb_to_linear(vec3 c);
 vec4 texture2DLodSpecular(vec2 tc, float lod);
 
@@ -100,6 +97,13 @@ vec4 getPosition(vec2 pos_screen);
 
 const float M_PI = 3.14159265;
 
+vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor, 
+                    float perceptualRoughness, 
+                    float metallic,
+                    vec3 n, // normal
+                    vec3 v, // surface point to camera
+                    vec3 l); //surface point to light
+
 void main()
 {
 #if defined(LOCAL_LIGHT_KILL)
@@ -147,6 +151,7 @@ void main()
     vec3 dlit    = vec3(0, 0, 0);
     vec3 slit    = vec3(0, 0, 0);
 
+    vec3 amb_rgb = vec3(0);
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
         vec3 colorEmissive = spec.rgb; // PBR sRGB Emissive.  See: pbropaqueF.glsl