diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 74cfa60b27a5b96df3178e3800a40919a48baac0..458f83aabe9c3799e96199c196421ab77326b622 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -62,6 +62,23 @@ U32 LLGLSLShader::sTotalDrawCalls = 0;
 LLGLSLShader    gUIProgram;
 LLGLSLShader    gSolidColorProgram;
 
+// NOTE:Keep gShaderConsts* and LLGLSLShader::ShaderConsts_e in sync!
+const std::string gShaderConstsKey[ LLGLSLShader::NUM_SHADER_CONSTS ] =
+{
+	  "LL_SHADER_CONST_CLOUD_DEPTH"
+	, "LL_SHADER_CONST_MOON_DEPTH"
+	, "LL_SHADER_CONST_STAR_DEPTH"
+};
+
+// NOTE:Keep gShaderConsts* and LLGLSLShader::ShaderConsts_e in sync!
+const std::string gShaderConstsVal[ LLGLSLShader::NUM_SHADER_CONSTS ] =
+{
+	  "0.999985" // SHADER_CONST_CLOUD_DEPTH // SL-14113
+	, "0.999985" // SHADER_CONST_MOON_DEPTH  // SL-14113
+	, "0.999995" // SHADER_CONST_STAR_DEPTH  // SL-14113
+};
+
+
 BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
 {
     return v1 != v2;
@@ -755,6 +772,11 @@ void LLGLSLShader::addPermutation(std::string name, std::string value)
     mDefines[name] = value;
 }
 
+void LLGLSLShader::addConstant( const LLGLSLShader::eShaderConsts shader_const )
+{
+    addPermutation( gShaderConstsKey[ shader_const ], gShaderConstsVal[ shader_const ] );
+}
+
 void LLGLSLShader::removePermutation(std::string name)
 {
     mDefines[name].erase();
diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h
index 7cf6d3c941f294da9fadfbd014f8f3e04f890ef8..35e796e961c127b6d357c7464b22ecdfa32e08fa 100644
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -67,6 +67,14 @@ class LLShaderFeatures
 class LLGLSLShader
 {
 public:
+    // NOTE:Keep gShaderConsts and LLGLSLShader::ShaderConsts_e in sync!
+    enum eShaderConsts
+    {
+          SHADER_CONST_CLOUD_DEPTH
+        , SHADER_CONST_MOON_DEPTH
+        , SHADER_CONST_STAR_DEPTH
+        , NUM_SHADER_CONSTS
+    };
 
 	enum 
 	{
@@ -149,7 +157,9 @@ class LLGLSLShader
     void clearPermutations();
 	void addPermutation(std::string name, std::string value);
 	void removePermutation(std::string name);
-	
+
+    void addConstant( const LLGLSLShader::eShaderConsts shader_const );
+
 	//enable/disable texture channel for specified uniform
 	//if given texture uniform is active in the shader, 
 	//the corresponding channel will be active upon return
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
index 187fed72e119ec04fcc8d495b2467713bb2e76c8..ad8ab771b84fefcfd4f955c54e4b52b7055519a3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
@@ -126,6 +126,6 @@ void main()
     frag_data[1] = vec4(0.0,0.0,0.0,0.0);
     frag_data[2] = vec4(0,0,0,1);
 
-    gl_FragDepth = 0.999985; // SL-14113 Stars and Clouds need same depth
+    gl_FragDepth = LL_SHADER_CONST_CLOUD_DEPTH; // SL-14113 Stars and Clouds need same depth
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
index 5906194437292fdddeea30126f3ccd40f52b49c7..ffeaf2b60015b204e79250924f0b16657e924595 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
@@ -74,6 +74,6 @@ void main()
     frag_data[1] = vec4(0.0);
     frag_data[2] = vec4(0.0f);
 
-    gl_FragDepth = 0.999985f;
+    gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
index b028c40ed9c594793154983bef6e5a7b03efbb9f..8d9c7e35079aa3df83bc9304d6dc2344b7b24fec 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
@@ -67,6 +67,6 @@ void main()
     frag_data[1] = vec4(0.0f);
     frag_data[2] = vec4(0.0, 1.0, 0.0, 1.0);
 
-    gl_FragDepth = 0.999995f; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
+    gl_FragDepth = LL_SHADER_CONST_STAR_DEPTH; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/environment/moonF.glsl b/indra/newview/app_settings/shaders/class1/environment/moonF.glsl
index e1592c19fb43068fbb77529adbd1b165bcf8cc8f..983cd17979ab05fa043def82e577d5901e275ae1 100644
--- a/indra/newview/app_settings/shaders/class1/environment/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/moonF.glsl
@@ -47,5 +47,5 @@ void main()
         discard;
 
     frag_color = color;
-    gl_FragDepth = 0.999985f; // SL-14113 Moon is infront of stars
+    gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113 Moon is infront of stars
 }
diff --git a/indra/newview/app_settings/shaders/class1/environment/starsF.glsl b/indra/newview/app_settings/shaders/class1/environment/starsF.glsl
index 95ab4cbf8b7a76bed9e4645fda285e81b9ab78de..e1a9cc6387cd73f748f028eaf3ad5c1bd825b1e6 100644
--- a/indra/newview/app_settings/shaders/class1/environment/starsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/starsF.glsl
@@ -47,5 +47,5 @@ void main()
     color.a *= max(custom_alpha, vertex_color.a);
 
     frag_color = color;
-    gl_FragDepth = 0.999995f; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
+    gl_FragDepth = LL_SHADER_CONST_STAR_DEPTH; // SL-14113 Moon Haze -- Stars need to depth test behind the moon
 }
diff --git a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
index 327accbd3b816e1a561155c05146b5fee2e11fe9..293e09620fd63fa446532d8545224a0a301c4b34 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl
@@ -68,6 +68,6 @@ void main()
          c.rgb  = scaleSoftClip(c.rgb);
 
     frag_color = vec4(c.rgb, c.a);
-    gl_FragDepth = 0.999985f; // SL-14113
+    gl_FragDepth = LL_SHADER_CONST_MOON_DEPTH; // SL-14113
 }
 
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index 1c592402d4f8b60d3a91554297e6072de46d9c99..ec53ae75f9baedb3d1265e754a22d67a7ee0962f 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -132,6 +132,6 @@ void main()
     // camera above water: class1\deferred\cloudsF.glsl
     // camera below water: class2\windlight\coudsV.glsl
     // See: starsV.glsl, cloudsV.glsl, moonF.glsl
-    gl_FragDepth = 0.999985;
+    gl_FragDepth = LL_SHADER_CONST_CLOUD_DEPTH;
 }
 
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 8eb57799c94546a0c45e1dad6db3ffd782a4f5f7..1dcd9289ef3dcbd2cd4081e719e3cf5659419269 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -1063,6 +1063,7 @@ BOOL LLViewerShaderMgr::loadShadersEnvironment()
 		gStarsProgram.mShaderFiles.push_back(make_pair("environment/starsV.glsl", GL_VERTEX_SHADER_ARB));
 		gStarsProgram.mShaderFiles.push_back(make_pair("environment/starsF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gStarsProgram.mShaderLevel = mShaderLevel[SHADER_ENVIRONMENT];
+        gStarsProgram.addConstant( LLGLSLShader::SHADER_CONST_STAR_DEPTH ); // SL-14113
 		success = gStarsProgram.createShader(NULL, NULL);
 		llassert(success);
 	}
@@ -1074,8 +1075,10 @@ BOOL LLViewerShaderMgr::loadShadersEnvironment()
 		gMoonProgram.mShaderFiles.push_back(make_pair("environment/moonV.glsl", GL_VERTEX_SHADER_ARB));
 		gMoonProgram.mShaderFiles.push_back(make_pair("environment/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gMoonProgram.mShaderLevel = mShaderLevel[SHADER_ENVIRONMENT];
+        gMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
 		success = gMoonProgram.createShader(NULL, NULL);
 		if (success)
+
 		{
 			gMoonProgram.bind();
 			gMoonProgram.uniform1i(sTex0, 0);
@@ -2750,6 +2753,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredWLCloudProgram.mShaderFiles.push_back(make_pair("deferred/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredWLCloudProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
 		gDeferredWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
+        gDeferredWLCloudProgram.addConstant( LLGLSLShader::SHADER_CONST_CLOUD_DEPTH ); // SL-14113
 		success = gDeferredWLCloudProgram.createShader(NULL, NULL);
 		llassert(success);
 	}
@@ -2789,6 +2793,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
         gDeferredWLMoonProgram.mShaderFiles.push_back(make_pair("deferred/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
         gDeferredWLMoonProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
         gDeferredWLMoonProgram.mShaderGroup = LLGLSLShader::SG_SKY;
+        gDeferredWLMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
  	 	success = gDeferredWLMoonProgram.createShader(NULL, NULL);
         llassert(success);
  	}
@@ -2801,6 +2806,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredStarProgram.mShaderFiles.push_back(make_pair("deferred/starsF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredStarProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
 		gDeferredStarProgram.mShaderGroup = LLGLSLShader::SG_SKY;
+        gDeferredStarProgram.addConstant( LLGLSLShader::SHADER_CONST_STAR_DEPTH ); // SL-14113
 		success = gDeferredStarProgram.createShader(NULL, NULL);
         llassert(success);
 	}
@@ -4157,6 +4163,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
         gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));
         gWLCloudProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
         gWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY;
+        gWLCloudProgram.addConstant( LLGLSLShader::SHADER_CONST_CLOUD_DEPTH ); // SL-14113
         success = gWLCloudProgram.createShader(NULL, NULL);
     }
 
@@ -4193,6 +4200,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
         gWLMoonProgram.mShaderFiles.push_back(make_pair("windlight/moonF.glsl", GL_FRAGMENT_SHADER_ARB));
         gWLMoonProgram.mShaderLevel = mShaderLevel[SHADER_WINDLIGHT];
         gWLMoonProgram.mShaderGroup = LLGLSLShader::SG_SKY;
+        gWLMoonProgram.addConstant( LLGLSLShader::SHADER_CONST_MOON_DEPTH ); // SL-14113
         success = gWLMoonProgram.createShader(NULL, NULL);
     }