diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
index 1e640d95aeb09ab58f1bf83cedc9ab224b89177f..929b4e17b18b074fe32eb5332393135c2e4a5738 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
@@ -35,7 +35,6 @@ out vec4 frag_color;
 
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
-uniform sampler2D bloomMap;
 
 uniform float depth_cutoff;
 uniform float norm_cutoff;
@@ -81,7 +80,6 @@ void main()
 	sc = min(sc, max_cof);
 	sc = max(sc, -max_cof);
 	
-	vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy);
-	frag_color.rgb = diff.rgb + bloom.rgb;
+	frag_color.rgb = diff.rgb;
 	frag_color.a = sc/max_cof*0.5+0.5;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index 383fcaa9a721147aef702bd07816f1b6018189aa..87324bca7f4fd89ebd68bad8928f8384feb47ac5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -34,6 +34,7 @@ out vec4 frag_color;
 #endif
 
 uniform sampler2D diffuseRect;
+uniform sampler2D emissiveRect;
 
 uniform vec2 screen_res;
 VARYING vec2 vary_fragcoord;
@@ -180,7 +181,7 @@ vec3 legacyGamma(vec3 color)
 void main() 
 {
     //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB)
-    vec4 diff = texture2D(diffuseRect, vary_fragcoord);
+    vec4 diff = texture2D(diffuseRect, vary_fragcoord) + texture2D(emissiveRect, vary_fragcoord);
     diff.rgb = toneMap(diff.rgb);
     diff.rgb = legacyGamma(diff.rgb);
     
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
index a79f644aef8615f136f4a87f581c957eaf5beab5..1b868aee8d5c7334e38de79f2d0ce1d883f01324 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
@@ -34,7 +34,6 @@ out vec4 frag_color;
 #endif
 
 uniform sampler2D diffuseRect;
-uniform sampler2D bloomMap;
 
 uniform vec2 screen_res;
 VARYING vec2 vary_fragcoord;
@@ -43,7 +42,6 @@ void main()
 {
 	vec4 diff = texture2D(diffuseRect, vary_fragcoord.xy);
 	
-	vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy);
-	frag_color = diff + bloom;
+	frag_color = diff;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
index 3ead2149f5f32347277c2ac99c0c9b5c0cbc1b8c..770c436edea5b8ebdcce0dcbe1023d1748604e69 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -29,7 +29,6 @@
 
 out vec4 frag_color;
 
-uniform sampler2D emissiveRect;
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
 
@@ -37,8 +36,7 @@ in vec2 tc;
 
 void main() 
 {
-	frag_color = texture2D(emissiveRect, tc) +
-					texture2D(diffuseRect, tc);
+	frag_color = texture2D(diffuseRect, tc);
 
     gl_FragDepth = texture(depthMap, tc).r;
 }
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index ac36c51dd533611ae2c1f0b8590746da33d64c4b..ec03556ff40739dbe53b7ab55ea4b9a008a066ff 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -101,8 +101,6 @@ F32 LLViewerTexture::sCurrentTime = 0.0f;
 
 LLViewerTexture::EDebugTexels LLViewerTexture::sDebugTexelsMode = LLViewerTexture::DEBUG_TEXELS_OFF;
 
-const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by
-const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of levels to reduce image quality by
 const F64 log_2 = log(2.0);
 
 #if ADDRESS_SIZE == 32
@@ -469,8 +467,6 @@ void LLViewerTexture::initClass()
 }
 
 // tuning params
-const F32 discard_bias_delta = .25f;
-const F32 discard_delta_time = 0.5f;
 const F32 GPU_MEMORY_CHECK_WAIT_TIME = 1.0f;
 // non-const (used externally
 F32 texmem_lower_bound_scale = 0.85f;
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 8db4db795ec62119bf8566cf484cbb99b0c51a28..0f89401bf1f3a6a30b41afcee061a2160021b7e1 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -893,10 +893,6 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
 
                 if (face && face->getViewerObject() && face->getTextureEntry())
                 {
-                    F32 radius;
-                    F32 cos_angle_to_view_dir;
-                    BOOL in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
-
                     F32 vsize = face->getPixelArea();
 
 #if LL_DARWIN
@@ -905,6 +901,9 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
                     vsize /= LLViewerTexture::sDesiredDiscardBias;
                     vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale));
 
+                    F32 radius;
+                    F32 cos_angle_to_view_dir;
+                    BOOL in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
                     if (!in_frustum || !face->getDrawable()->isVisible())
                     { // further reduce by discard bias when off screen or occluded
                         vsize /= LLViewerTexture::sDesiredDiscardBias;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index ffb314c013517a9691671059245e766d41488a15..e6ad42c23b61e43619b216d9f8b176db2e90b989 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7423,6 +7423,12 @@ void LLPipeline::renderFinalize()
 				screenTarget()->bindTexture(0, channel, LLTexUnit::TFO_POINT);
             }
 
+			channel = gDeferredPostGammaCorrectProgram.enableTexture(LLShaderMgr::DEFERRED_EMISSIVE, screenTarget()->getUsage());
+			if (channel > -1)
+			{
+				mGlow[1].bindTexture(0, channel, LLTexUnit::TFO_BILINEAR);
+			}
+
             gDeferredPostGammaCorrectProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, screenTarget()->getWidth(), screenTarget()->getHeight());
 
             static LLCachedControl<F32> exposure(gSavedSettings, "RenderExposure", 1.f);
@@ -7450,8 +7456,8 @@ void LLPipeline::renderFinalize()
 		bool multisample = RenderFSAASamples > 1 && mRT->fxaaBuffer.isComplete();
 		LLGLSLShader* shader = &gGlowCombineProgram;
 
-		S32 width = mRT->screen.getWidth();
-		S32 height = mRT->screen.getHeight();
+		S32 width = screenTarget()->getWidth();
+		S32 height = screenTarget()->getHeight();
 
 		S32 channel = -1;
 
@@ -7469,10 +7475,10 @@ void LLPipeline::renderFinalize()
 			shader->bind();
 			shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, width, height);
 
-			channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
+			channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, screenTarget()->getUsage());
 			if (channel > -1)
 			{
-				mRT->deferredLight.bindTexture(0, channel);
+				screenTarget()->bindTexture(0, channel);
 			}
 
             {
@@ -7483,7 +7489,7 @@ void LLPipeline::renderFinalize()
 
 			gGL.flush();
 
-			shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mRT->deferredLight.getUsage());
+			shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, screenTarget()->getUsage());
 			shader->unbind();
 
 			mRT->fxaaBuffer.flush();
@@ -7535,11 +7541,9 @@ void LLPipeline::renderFinalize()
 
 			shader->bind();
 
-            S32 glow_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_EMISSIVE);
             S32 screen_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_DIFFUSE);
             S32 depth_channel = shader->getTextureChannel(LLShaderMgr::DEFERRED_DEPTH);
 
-			gGL.getTexUnit(glow_channel)->bind(&mGlow[1]);
 			gGL.getTexUnit(screen_channel)->bind(screenTarget());
             gGL.getTexUnit(depth_channel)->bind(&mRT->deferredScreen, true);
 
@@ -7556,7 +7560,6 @@ void LLPipeline::renderFinalize()
 			shader->unbind();
 		}
 	}
-    
 
     gGL.setSceneBlendType(LLRender::BT_ALPHA);
 
@@ -7713,12 +7716,6 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
         }
 	}
 
-	channel = shader.enableTexture(LLShaderMgr::DEFERRED_BLOOM);
-	if (channel > -1)
-	{
-		mGlow[1].bindTexture(0, channel);
-	}
-
 	stop_glerror();
 
     bindShadowMaps(shader);