diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index ff743802170263af651af6c0eda16c4e29bf1d82..3b6a49735ea378492acabd6c611f8e45527edca4 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -985,38 +985,56 @@ BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image)
 		return FALSE;
 	}
 
-	if( !mHasExplicitFormat )
-	{
-		switch (mComponents)
-		{
-			case 1:
-			// Use luminance alpha (for fonts)
-			mFormatInternal = GL_LUMINANCE8;
-			mFormatPrimary = GL_LUMINANCE;
-			mFormatType = GL_UNSIGNED_BYTE;
-			break;
-			case 2:
-			// Use luminance alpha (for fonts)
-			mFormatInternal = GL_LUMINANCE8_ALPHA8;
-			mFormatPrimary = GL_LUMINANCE_ALPHA;
-			mFormatType = GL_UNSIGNED_BYTE;
-			break;
-			case 3:
-			mFormatInternal = GL_RGB8;
-			mFormatPrimary = GL_RGB;
-			mFormatType = GL_UNSIGNED_BYTE;
-			break;
-			case 4:
-			mFormatInternal = GL_RGBA8;
-			mFormatPrimary = GL_RGBA;
-			mFormatType = GL_UNSIGNED_BYTE;
-			break;
-			default:
-			LL_ERRS() << "Bad number of components for texture: " << (U32)getComponents() << LL_ENDL;
-		}
-	}
+    if (!mHasExplicitFormat)
+    {
+        switch (mComponents)
+        {
+            case 1:
+                // Use luminance alpha (for fonts)
+                mFormatInternal = GL_LUMINANCE8;
+                mFormatPrimary  = GL_LUMINANCE;
+                mFormatType     = GL_UNSIGNED_BYTE;
+                break;
+            case 2:
+                // Use luminance alpha (for fonts)
+                mFormatInternal = GL_LUMINANCE8_ALPHA8;
+                mFormatPrimary  = GL_LUMINANCE_ALPHA;
+                mFormatType     = GL_UNSIGNED_BYTE;
+                break;
+            case 3:
+#if USE_SRGB_DECODE
+                if (gGLManager.mHasTexturesRGBDecode)
+                {
+                    mFormatInternal = GL_SRGB8;
+                }
+                else
+#endif
+                {
+                    mFormatInternal = GL_RGB8;
+                }
+                mFormatPrimary = GL_RGB;
+                mFormatType    = GL_UNSIGNED_BYTE;
+                break;
+            case 4:
+#if USE_SRGB_DECODE
+                if (gGLManager.mHasTexturesRGBDecode)
+                {
+                    mFormatInternal = GL_SRGB8_ALPHA8;
+                }
+                else
+#endif
+                {
+                    mFormatInternal = GL_RGBA8;
+                }
+                mFormatPrimary = GL_RGBA;
+                mFormatType    = GL_UNSIGNED_BYTE;
+                break;
+            default:
+                LL_ERRS() << "Bad number of components for texture: " << (U32) getComponents() << LL_ENDL;
+        }
+    }
 
-	mCurrentDiscardLevel = discard_level;	
+    mCurrentDiscardLevel = discard_level;	
 	mDiscardLevelInAtlas = discard_level;
 	mTexelsInAtlas = raw_image->getWidth() * raw_image->getHeight() ;
 	mLastBindTime = sLastFrameTime;
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index ebc4659bcfbb0a76d6e5d3329238b6806e7fc2ab..eb9da34ca8c6fae0f89109e7fefee4b7df7143b7 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -849,26 +849,32 @@ void LLTexUnit::debugTextureUnit(void)
 	}
 }
 
-void LLTexUnit::setTextureColorSpace(eTextureColorSpace space) {
+void LLTexUnit::setTextureColorSpace(eTextureColorSpace space)
+{
     mTexColorSpace = space;
 
 #if USE_SRGB_DECODE
-    if (gGLManager.mHasTexturesRGBDecode) {
-
-        if (space == TCS_SRGB) {
+    if (gGLManager.mHasTexturesRGBDecode)
+    {
+        if (space == TCS_SRGB)
+        {
             glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_DECODE_EXT);
         }
-        else {
+        else
+        {
             glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
         }
 
-        if (gDebugGL) {
+        if (gDebugGL)
+        {
             assert_glerror();
         }
     }
+    else
 #endif
-    glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
-
+    {
+        glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
+    }
 }
 
 LLLightState::LLLightState(S32 index)
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 9fb4f7f2b07d18aed7bf79ea6bf7d69cad19a89d..e3c0255290fde73daac8dc5ff82493f47a4e186a 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -501,23 +501,23 @@ U32 LLRenderTarget::getNumTextures() const
 	return mTex.size();
 }
 
-
 void LLRenderTarget::bindTexture(U32 index, S32 channel, LLTexUnit::eTextureFilterOptions filter_options)
 {
-	gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index));
+    gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index));
 
     bool isSRGB = false;
     llassert(mInternalFormat.size() > index);
     switch (mInternalFormat[index])
     {
-        case GL_SRGB_ALPHA:
         case GL_SRGB:
+        case GL_SRGB8:
+        case GL_SRGB_ALPHA:
         case GL_SRGB8_ALPHA8:
             isSRGB = true;
-        break;
+            break;
 
         default:
-        break;
+            break;
     }
 
     gGL.getTexUnit(channel)->setTextureFilteringOption(filter_options);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 0d1cc817866ad5d07da80ed3a1f251888808bb29..8c402fcb5466f54b229074e4498326d370085c67 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -1,24 +1,24 @@
-/** 
- * @file multiPointLightF.glsl
+/**
+ * @file class1/deferred/multiPointLightF.glsl
  *
  * $LicenseInfo:firstyear=2007&license=viewerlgpl$
  * Second Life Viewer Source Code
  * Copyright (C) 2007, Linden Research, Inc.
- * 
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation;
  * version 2.1 of the License only.
- * 
+ *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- * 
+ *
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
@@ -36,119 +36,112 @@ out vec4 frag_color;
 uniform sampler2DRect depthMap;
 uniform sampler2DRect diffuseRect;
 uniform sampler2DRect specularRect;
-uniform samplerCube environmentMap;
-uniform sampler2D noiseMap;
-uniform sampler2D lightFunc;
+uniform samplerCube   environmentMap;
+uniform sampler2D     noiseMap;
+uniform sampler2D     lightFunc;
 
-
-uniform vec3 env_mat[3];
+uniform vec3  env_mat[3];
 uniform float sun_wash;
+uniform int   light_count;
+uniform vec4  light[LIGHT_COUNT];
+uniform vec4  light_col[LIGHT_COUNT];
 
-uniform int light_count;
-
-uniform vec4 light[LIGHT_COUNT];
-uniform vec4 light_col[LIGHT_COUNT];
-
-VARYING vec4 vary_fragcoord;
-uniform vec2 screen_res;
-
+uniform vec2  screen_res;
 uniform float far_z;
+uniform mat4  inv_proj;
 
-uniform mat4 inv_proj;
+VARYING vec4 vary_fragcoord;
 
 vec4 getPosition(vec2 pos_screen);
 vec3 getNorm(vec2 pos_screen);
 vec3 srgb_to_linear(vec3 c);
 
-void main() 
+void main()
 {
-	vec3 out_col = vec3(0,0,0);
-
 #if defined(LOCAL_LIGHT_KILL)
-    discard;
-#else
-	vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res;
-	vec3 pos = getPosition(frag.xy).xyz;
-	if (pos.z < far_z)
-	{
-		discard;
-	}
-	
-	vec3 norm = getNorm(frag.xy);
-
-	vec4 spec = texture2DRect(specularRect, frag.xy);
-	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
-    diff.rgb = srgb_to_linear(diff.rgb);
-	
-	float noise = texture2D(noiseMap, frag.xy/128.0).b;
-	vec3 npos = normalize(-pos);
-
-	// As of OSX 10.6.7 ATI Apple's crash when using a variable size loop
-	for (int i = 0; i < LIGHT_COUNT; ++i)
-	{
-		vec3 lv = light[i].xyz-pos;
-		float dist = length(lv);
-		dist /= light[i].w;
-		if (dist <= 1.0)
-		{
-		float da = dot(norm, lv);
-			if (da > 0.0)
-		{
-			lv = normalize(lv);
-			da = dot(norm, lv);
-			
-			float fa = light_col[i].a+1.0;
-			float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
-			dist_atten *= dist_atten;
-            
-            // Tweak falloff slightly to match pre-EEP attenuation
-			// NOTE: this magic number also shows up in a great many other places, search for dist_atten *= to audit
-			dist_atten *= 2.0;
-			
-			dist_atten *= noise;
-
-			float lit = da * dist_atten;
-						
-			vec3 col = light_col[i].rgb*lit*diff;
-			
-			//vec3 col = vec3(dist2, light_col[i].a, lit);
-			
-			if (spec.a > 0.0)
-			{
-				lit = min(da*6.0, 1.0) * dist_atten;
-				//vec3 ref = dot(pos+lv, norm);
-				vec3 h = normalize(lv+npos);
-				float nh = dot(norm, h);
-				float nv = dot(norm, npos);
-				float vh = dot(npos, h);
-				float sa = nh;
-				float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
-
-				float gtdenom = 2 * nh;
-				float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
-								
-				if (nh > 0.0)
-				{
-					float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
-					col += lit*scol*light_col[i].rgb*spec.rgb;
-					//col += spec.rgb;
-				}
-			}
-			
-			out_col += col;
-		}
-	}
-	}
+    discard;  // Bail immediately
 #endif
-	
-	frag_color.rgb = out_col;
-	frag_color.a = 0.0;
+
+    vec3 out_col = vec3(0, 0, 0);
+    vec2 frag    = (vary_fragcoord.xy * 0.5 + 0.5) * screen_res;
+    vec3 pos     = getPosition(frag.xy).xyz;
+    if (pos.z < far_z)
+    {
+        discard;
+    }
+
+    vec3 norm = getNorm(frag.xy);
+
+    vec4 spec = texture2DRect(specularRect, frag.xy);
+    spec.rgb  = srgb_to_linear(spec.rgb);
+    vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
+    diff.rgb  = srgb_to_linear(diff.rgb);
+
+    float noise = texture2D(noiseMap, frag.xy / 128.0).b;
+    vec3  npos  = normalize(-pos);
+
+    // As of OSX 10.6.7 ATI Apple's crash when using a variable size loop
+    for (int i = 0; i < LIGHT_COUNT; ++i)
+    {
+        vec3  lv   = light[i].xyz - pos;
+        float dist = length(lv);
+        dist /= light[i].w;
+        if (dist <= 1.0)
+        {
+            float da = dot(norm, lv);
+            if (da > 0.0)
+            {
+                lv = normalize(lv);
+                da = dot(norm, lv);
+
+                float fa         = light_col[i].a + 1.0;
+                float dist_atten = clamp(1.0 - (dist - 1.0 * (1.0 - fa)) / fa, 0.0, 1.0);
+                dist_atten *= dist_atten;
+
+                // Tweak falloff slightly to match pre-EEP attenuation
+                // NOTE: this magic number also shows up in a great many other places, search for dist_atten *= to audit
+                dist_atten *= 2.0;
+
+                dist_atten *= noise;
+
+                float lit = da * dist_atten;
+
+                vec3 col = light_col[i].rgb * lit * diff;
+
+                if (spec.a > 0.0)
+                {
+                    lit        = min(da * 6.0, 1.0) * dist_atten;
+                    vec3  h    = normalize(lv + npos);
+                    float nh   = dot(norm, h);
+                    float nv   = dot(norm, npos);
+                    float vh   = dot(npos, h);
+                    float sa   = nh;
+                    float fres = pow(1 - dot(h, npos), 5) * 0.4 + 0.5;
+
+                    float gtdenom = 2 * nh;
+                    float gt      = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+
+                    if (nh > 0.0)
+                    {
+                        float scol = fres * texture2D(lightFunc, vec2(nh, spec.a)).r * gt / (nh * da);
+                        col += lit * scol * light_col[i].rgb * spec.rgb;
+                    }
+                }
+
+                out_col += col;
+            }
+        }
+    }
+
+    frag_color.rgb = out_col;
+    frag_color.a   = 0.0;
 
 #ifdef IS_AMD_CARD
-	// If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage awawy which leads to unfun crashes and artifacts.
-	vec4 dummy1 = light[0];
-	vec4 dummy2 = light_col[0];
-	vec4 dummy3 = light[LIGHT_COUNT-1];
-	vec4 dummy4 = light_col[LIGHT_COUNT-1];
+    // If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage
+    // awawy which leads to unfun crashes and artifacts.
+    vec4 dummy1 = light[0];
+    vec4 dummy2 = light_col[0];
+    vec4 dummy3 = light[LIGHT_COUNT - 1];
+    vec4 dummy4 = light_col[LIGHT_COUNT - 1];
 #endif
 }