diff --git a/indra/newview/alrenderutils.cpp b/indra/newview/alrenderutils.cpp
index d3dd56d5cf8015696f743ab4b9da37ca8f62f3f9..e51b98a9d0e1da695c913d5869b4b9ddc08b7d3a 100644
--- a/indra/newview/alrenderutils.cpp
+++ b/indra/newview/alrenderutils.cpp
@@ -464,13 +464,13 @@ bool ALRenderUtil::setupColorGrade()
 					case 3:
 					{
 						primary_format = GL_RGB;
-						int_format = GL_SRGB8;
+						int_format = GL_RGB8;
 						break;
 					}
 					case 4:
 					{
 						primary_format = GL_RGBA;
-						int_format = GL_SRGB8_ALPHA8;
+						int_format = GL_RGBA8;
 						break;
 					}
 					default:
@@ -493,12 +493,9 @@ bool ALRenderUtil::setupColorGrade()
 							stop_glerror();
 							glTexImage3D(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE_3D), 0, int_format, image_height, image_height, image_height, 0, primary_format, GL_UNSIGNED_BYTE, raw_image->getData());
 							stop_glerror();
-							glGenerateMipmap(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE_3D));
-							stop_glerror();
 						}
 						gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
 						gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
-						gGL.getTexUnit(0)->setTextureColorSpace(LLTexUnit::TCS_LINEAR);
 						gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE_3D);
 					}
 					else
@@ -577,7 +574,6 @@ void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* dst, LLRen
 			gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE_3D, mCGLut);
 			gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
 			gGL.getTexUnit(channel)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
-			gGL.getTexUnit(channel)->setTextureColorSpace(LLTexUnit::TCS_LINEAR);
 		}
 
 		tone_shader->uniform4fv(LLShaderMgr::COLORGRADE_LUT_SIZE, 1, mCGLutSize.mV);
@@ -668,9 +664,13 @@ void ALRenderUtil::renderSharpen(LLRenderTarget* src, LLRenderTarget* dst)
 
 	sharpen_shader->bind();
 
-	// Draw
-	src->bindTexture(0, 0, LLTexUnit::TFO_POINT);
+	S32 channel = sharpen_shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
+	if (channel > -1)
+	{
+		src->bindTexture(0, channel, LLTexUnit::TFO_POINT);
+	}
 
+	// Draw
 	mRenderBuffer->setBuffer();
 	mRenderBuffer->drawArrays(LLRender::TRIANGLES, 0, 3);
 
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
index 5b5590cbd96d945ce9a0530d4da0e13e5808d664..8b8ddb1d6255e64065a02846d1a39ebea07c17f1 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
@@ -35,7 +35,7 @@ out vec4 frag_color;
 
 in vec2 vary_fragcoord;
 
-uniform sampler2D tex0;
+uniform sampler2D diffuseRect;
 
 uniform vec3 sharpen_params = vec3(1.0, 0.5, 0.0);
 
@@ -64,18 +64,18 @@ void main()
     //  a b c
     //  d(e)f
     //  g h i
-    vec4 inputColor = textureLod(tex0, vary_fragcoord, 0.0f);
+    vec4 inputColor = textureLod(diffuseRect, vary_fragcoord, 0.0f);
     float alpha = inputColor.a;
 
-    vec3 a = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1,-1)).rgb;
-    vec3 b = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0,-1)).rgb;
-    vec3 c = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1,-1)).rgb;
-    vec3 d = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 0)).rgb;
+    vec3 a = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2(-1,-1)).rgb;
+    vec3 b = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2( 0,-1)).rgb;
+    vec3 c = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2( 1,-1)).rgb;
+    vec3 d = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2(-1, 0)).rgb;
     vec3 e = inputColor.rgb;
-    vec3 f = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 0)).rgb;
-    vec3 g = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 1)).rgb;
-    vec3 h = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0, 1)).rgb;
-    vec3 i = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 1)).rgb;
+    vec3 f = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2( 1, 0)).rgb;
+    vec3 g = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2(-1, 1)).rgb;
+    vec3 h = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2( 0, 1)).rgb;
+    vec3 i = textureLodOffset(diffuseRect, vary_fragcoord, 0.0f, ivec2( 1, 1)).rgb;
 
     // Soft min and max.
     //  a b c             b
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
index bbe1eb5fa3fcae473c6e3aa0e44e6aaccf2dfea5..9c50f84735dc4d7d876677b82922db47a9898e96 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
@@ -36,7 +36,7 @@ out vec4 frag_color;
 
 in vec2 vary_fragcoord;
 
-uniform sampler2D tex0;
+uniform sampler2D diffuseRect;
 
 uniform vec3 sharpen_params;
 
@@ -86,17 +86,17 @@ void main()
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
 
-    vec4 x = textureLod(tex0, vary_fragcoord, 0.f);
+    vec4 x = textureLod(diffuseRect, vary_fragcoord, 0.f);
 
-    vec4 a = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  0));
-    vec4 b = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  0));
-    vec4 c = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0,  1));
-    vec4 d = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0, -1));
+    vec4 a = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2(-1,  0));
+    vec4 b = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2( 1,  0));
+    vec4 c = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2( 0,  1));
+    vec4 d = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2( 0, -1));
 
-    vec4 e = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1, -1));
-    vec4 f = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  1));
-    vec4 g = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  1));
-    vec4 h = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1, -1));
+    vec4 e = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2(-1, -1));
+    vec4 f = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2( 1,  1));
+    vec4 g = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2(-1,  1));
+    vec4 h = textureLodOffset(diffuseRect, vary_fragcoord, 0.0, ivec2( 1, -1));
 
     float lx = GetLuma(x);
 
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
index 31d3f3bcdc4d12a4f0934a451a860d2ff2717733..d7116b1b58432cab9c2f9f6bf2910eaf898c88c7 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
@@ -354,7 +354,7 @@ void main()
     //see https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter24.html
     vec3 scale = (vec3(colorgrade_lut_size.x) - 1.0) / vec3(colorgrade_lut_size.x);
     vec3 offset = 1.0 / (2.0 * vec3(colorgrade_lut_size.x));
-    diff = vec4(linear_to_srgb(textureLod(colorgrade_lut, scale * diff.rgb + offset, 0).rgb), diff.a);
+    diff = vec4(textureLod(colorgrade_lut, scale * diff.rgb + offset, 0).rgb, diff.a);
     #endif
 
     diff.rgb = legacyGamma(diff.rgb);