diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 026301d9140a8e0453fea7c5b307695fbd9d23c5..bce3720d3b16017432d8f14b416b8aa9b76fc5dd 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -1305,8 +1305,6 @@ void LLShaderMgr::initAttribsAndUniforms()
 	mReservedUniforms.push_back("bloomMap");
 	mReservedUniforms.push_back("projectionMap");
 	mReservedUniforms.push_back("norm_mat");
-
-	mReservedUniforms.push_back("global_gamma");
 	mReservedUniforms.push_back("texture_gamma");
 	
 	mReservedUniforms.push_back("specular_color");
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 98caa9295ef7abac23b7cb6f48081892ff718850..127b5ce5b6875785a1de467a27fbf2bbc3724b90 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -173,10 +173,7 @@ class LLShaderMgr
 		DEFERRED_BLOOM,
 		DEFERRED_PROJECTION,
 		DEFERRED_NORM_MATRIX,
-
-		GLOBAL_GAMMA,
-		TEXTURE_GAMMA,
-		
+		TEXTURE_GAMMA,		
 		SPECULAR_COLOR,
 		ENVIRONMENT_INTENSITY,
 		
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index 0c4707098bff090e87a7c3808318ed1d220cfe36..546a502ee1e667c2e2ff0712fb74ed916096ed3a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -37,10 +37,7 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
-uniform float display_gamma;
-uniform vec4 gamma;
 uniform mat3 env_mat;
-
 uniform vec3 sun_dir;
 uniform vec3 moon_dir;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
index f6694aae2ae2935ba7c6eae67593259ac95d3987..ae1ac5de7f07e55644fee8016149f4c0ec6a8676 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
@@ -43,7 +43,6 @@ uniform sampler2D cloud_noise_texture_next;
 uniform float blend_factor;
 uniform vec4 cloud_pos_density1;
 uniform vec4 cloud_pos_density2;
-uniform vec4 gamma;
 uniform float cloud_scale;
 uniform float cloud_variance;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 38792601f672556c37392247131e4837dba4d552..a13c8de43ef86b3d9c02eb1365d7d43abb5fe3e7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -31,7 +31,6 @@
 #define DIFFUSE_ALPHA_MODE_EMISSIVE 3
 
 uniform float emissive_brightness;
-uniform float display_gamma;
 uniform int sun_up_factor;
 
 #ifdef WATER_FOG
@@ -64,8 +63,6 @@ uniform sampler2D     lightFunc;
 // Inputs
 uniform vec4 morphFactor;
 uniform vec3 camPosLocal;
-//uniform vec4 camPosWorld;
-uniform vec4 gamma;
 uniform mat3 env_mat;
 
 uniform vec3 sun_dir;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index 058e939ec8f0b6820a5e6461c71546915f9331d0..9f519708a289e5d1debacd46e68ee261707bea76 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -37,7 +37,6 @@ uniform sampler2DRect diffuseRect;
 
 uniform vec2 screen_res;
 VARYING vec2 vary_fragcoord;
-
 uniform float display_gamma;
 
 vec3 linear_to_srgb(vec3 cl);
@@ -45,7 +44,7 @@ vec3 linear_to_srgb(vec3 cl);
 void main() 
 {
     vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
-    diff.rgb = linear_to_srgb(diff.rgb);
+    diff.rgb = pow(diff.rgb, vec3(display_gamma));
     frag_color = diff;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
index 65e4fdf17f18728003725c2160861cf23028f117..331249dc33b509b52648944fa4363a81392a4f24 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
@@ -37,8 +37,6 @@ out vec4 frag_data[3];
 
 VARYING vec4 vary_HazeColor;
 
-uniform vec4 gamma;
-
 /// Soft clips the light with a gamma correction
 vec3 scaleSoftClip(vec3 light);
 vec3 srgb_to_linear(vec3 c);
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
index 0607ea8bc55d2f86f0bdf983be2495047aff4652..4460ef905b2f02618130293d58869d46cab3fec1 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl
@@ -22,7 +22,6 @@
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
-uniform vec4 gamma;
 uniform vec4 lightnorm;
 uniform vec4 sunlight_color;
 uniform vec4 moonlight_color;
diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
index 346634af333f0afa59256a4f5ea5622f8f98ef17..fc51e811773c6ffe0a86927d1dee06b840c5591d 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
@@ -24,7 +24,6 @@
  */
  
 uniform int no_atmo;
-uniform vec4 gamma;
 
 vec3 scaleSoftClipFrag(vec3 light)
 {
diff --git a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
index b826cff3045aaf4cbf53d6363c55577569f9fe4a..1dce85a83b0ed14eea22f039ca8dd13d4e6454a6 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/skyF.glsl
@@ -64,7 +64,6 @@ VARYING vec3 pos;
 // The fragment shader for the sky
 /////////////////////////////////////////////////////////////////////////
 
-uniform vec4 gamma;
 uniform sampler2D rainbow_map;
 uniform sampler2D halo_map;
 
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index 3ac0fc224bd3901803819617ba28776fd7ed3c16..75bf8730df46e3efcdff262cc488f1518a564a2e 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -44,7 +44,6 @@ uniform sampler2D cloud_noise_texture_next;
 uniform float blend_factor;
 uniform vec4 cloud_pos_density1;
 uniform vec4 cloud_pos_density2;
-uniform vec4 gamma;
 uniform float cloud_scale;
 uniform float cloud_variance;
 
diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
index 5c339f96635c49b567d77b9cd9836c6fa20d401e..68db7fcbb18d5c636124aaa1a0f3978ed9f58325 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
@@ -22,10 +22,7 @@
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
- 
-
-
-uniform vec4 gamma;
+uniform float gamma;
 uniform int no_atmo;
 
 vec3 getAtmosAttenuation();
@@ -39,7 +36,7 @@ vec3 scaleSoftClipFrag(vec3 light)
     }
     //soft clip effect:
     light = 1. - clamp(light, vec3(0.), vec3(1.));
-    light = 1. - pow(light, gamma.xxx);
+    light = 1. - pow(light, vec3(gamma)); // s/b inverted already CPU-side
     return light;
 }
 
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
index de6fb276aa3b30ebc60f7a1b3c352723e3f949a2..71463494530ade8f017e828d552c1da3c47a9482 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
@@ -35,8 +35,6 @@ out vec4 frag_color;
 
 VARYING vec4 vary_HazeColor;
 
-uniform vec4 gamma;
-
 /// Soft clips the light with a gamma correction
 vec3 scaleSoftClip(vec3 light);
 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/genSkyShF.glsl b/indra/newview/app_settings/shaders/class3/deferred/genSkyShF.glsl
index c02e6d1e57d4b12fa085f561885b42d484c46682..d5d91c88f07c78a6159f68f1c819cdcdf8a4e324 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/genSkyShF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/genSkyShF.glsl
@@ -37,7 +37,6 @@ uniform sampler2D transmittance_texture;
 uniform sampler3D scattering_texture;
 uniform sampler3D single_mie_scattering_texture;
 uniform sampler2D irradiance_texture;
-uniform vec4 gamma;
 
 vec3 GetSkyLuminance(vec3 camPos, vec3 view_dir, float shadow_length, vec3 dir, out vec3 transmittance);
 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class3/deferred/skyF.glsl
index d0514f7d2349ff97d2d0d058ea9e6b287ad873a7..6de01cb667c3e6bc9f55a1d96493a5d84ea51420 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/skyF.glsl
@@ -44,7 +44,6 @@ uniform sampler3D single_mie_scattering_texture;
 uniform sampler2D irradiance_texture;
 uniform sampler2D rainbow_map;
 uniform sampler2D halo_map;
-uniform vec4 gamma;
 
 uniform float moisture_level;
 uniform float droplet_radius;
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index 82a899ad6578063d3383520bce54ac5f4c63fc11..978c25b86a1e4a9eb5fdc2fb4d8e72835c45b694 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -50,7 +50,6 @@ uniform vec3 camPosLocal;
 uniform float cloud_shadow;
 uniform float max_y;
 uniform vec4 glow;
-uniform float global_gamma;
 uniform mat3 env_mat;
 uniform vec4 shadow_clip;
 
@@ -94,7 +93,6 @@ void main()
     norm.xyz = getNorm(tc);
 
     float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
-              da = pow(da, global_gamma + 0.3);
 
     vec4 diffuse = texture2DRect(diffuseRect, tc); // linear
 
@@ -106,7 +104,6 @@ void main()
         vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
         
         vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
-//        scol_ambocc = pow(scol_ambocc, vec3(global_gamma + 0.3));
 
         float scol = max(scol_ambocc.r, diffuse.a); 
 
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index d20c05fe67f7efb4235a8e4bd7a671aba8cdf7a7..daff4b7186fd14a19dc62229721303f6db8eb0d6 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -1596,16 +1596,6 @@ void LLEnvironment::updateGLVariablesForSettings(LLGLSLShader *shader, const LLS
     //_WARNS("RIDER") << "----------------------------------------------------------------" << LL_ENDL;
 
     psetting->applySpecial(shader);
-
-    if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && !LLPipeline::sUnderWaterRender)
-    {
-        shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
-    }
-    else 
-    {
-        shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
-    }
-
 }
 
 void LLEnvironment::updateShaderUniforms(LLGLSLShader *shader)
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index cc70f651cf21c1b6347e344fb20a8ab88fb3bc0f..5b336f0870f2e30559125aab08293efd760e0387 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -706,11 +706,15 @@ void LLSettingsVOSky::applySpecial(void *ptarget)
         shader->uniform4fv(LLShaderMgr::CLOUD_COLOR, 1, cloud_color.mV);
 	}
 
-    F32 g = getGamma();
+    
 
     shader->uniform1f(LLShaderMgr::SCENE_LIGHT_STRENGTH, mSceneLightStrength);
-    shader->uniform4f(LLShaderMgr::GAMMA, g, 0.0, 0.0, 1.0);
-    shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, g);
+    
+    F32 g             = getGamma();    
+    F32 display_gamma = gSavedSettings.getF32("RenderDeferredDisplayGamma");
+
+    shader->uniform1f(LLShaderMgr::GAMMA, g);
+    shader->uniform1f(LLShaderMgr::DISPLAY_GAMMA, display_gamma);
 }
 
 LLSettingsSky::parammapping_t LLSettingsVOSky::getParameterMap() const
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index eb1ffc91f76ab0d2442c76d9868b6d7a05d88db3..448b65272bfcb335bc7bf41a1398dddffa973d48 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7913,13 +7913,6 @@ void LLPipeline::renderBloom(bool for_snapshot, F32 zoom_factor, int subfield)
 					mScreen.bindTexture(0, channel);
 				}
 
-				if (!LLViewerCamera::getInstance()->cameraUnderWater())
-				{
-					shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
-				} else {
-					shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
-				}
-
 				shader->uniform1f(LLShaderMgr::DOF_MAX_COF, CameraMaxCoF);
 				shader->uniform1f(LLShaderMgr::DOF_RES_SCALE, CameraDoFResScale);
 				shader->uniform1f(LLShaderMgr::DOF_WIDTH, dof_width-1);
@@ -7961,13 +7954,6 @@ void LLPipeline::renderBloom(bool for_snapshot, F32 zoom_factor, int subfield)
 				mScreen.bindTexture(0, channel);
 			}
 
-			if (!LLViewerCamera::getInstance()->cameraUnderWater())
-			{
-				shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
-			} else {
-				shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
-			}
-
 			gGL.begin(LLRender::TRIANGLE_STRIP);
 			gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
 			gGL.vertex2f(-1,-1);