From dba9521cf6e2b14a345f7e4a2554e536fb69feff Mon Sep 17 00:00:00 2001
From: Graham Linden <graham@lindenlab.com>
Date: Mon, 22 Oct 2018 19:23:10 +0100
Subject: [PATCH] SL-9806

Get dome rendering to not assert the depth test state behind deferred render's back.

Make clouds write and test depth to give stars something to depth test against.

Add z-bias in star vert shader to force some depth testing of stars against clouds.
---
 .../app_settings/shaders/class1/deferred/starsV.glsl |  8 +++++++-
 indra/newview/lldrawpoolwlsky.cpp                    | 12 +++++++-----
 indra/newview/llvowlsky.cpp                          |  4 +++-
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
index e14d02a4a95..bb2a2ee72b1 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
@@ -38,7 +38,13 @@ VARYING vec2 screenpos;
 void main()
 {
 	//transform vertex
-	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); 
+    vec4 pos = modelview_projection_matrix * vec4(position, 1.0);
+
+// bias z to fix SL-9806 and get stars to depth test against clouds
+    pos.z += 0.001f;
+
+	gl_Position = pos;
+
     float t = mod(time, 1.25f);
     screenpos = position.xy * vec2(t, t);
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index b9e041a3d55..c4560e89f44 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -325,6 +325,8 @@ void LLDrawPoolWLSky::renderStarsDeferred(void) const
 {
 	LLGLSPipelineSkyBox gls_sky;
 	LLGLEnable blend(GL_BLEND);
+    LLGLDepthTest depth_test(GL_TRUE, GL_FALSE, GL_LESS);
+
 	gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
 
     F32 star_alpha = LLEnvironment::instance().getCurrentSky()->getStarBrightness() / 500.0f;
@@ -386,6 +388,7 @@ void LLDrawPoolWLSky::renderSkyClouds(const LLVector3& camPosLocal, F32 camHeigh
 {
 	if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && gSky.mVOSkyp->getCloudNoiseTex())
 	{
+        LLGLDepthTest depth(GL_TRUE, GL_TRUE);
 		LLGLEnable blend(GL_BLEND);
 		gGL.setSceneBlendType(LLRender::BT_ALPHA);
 		
@@ -549,22 +552,21 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
     if (gPipeline.canUseWindLightShaders())
     {
         {
+            // Disable depth-writes for sky, but re-enable depth writes for the cloud
+            // rendering below so the cloud shader can write out depth for the stars to test against         
             LLGLDepthTest depth(GL_TRUE, GL_FALSE);
 
             if (gPipeline.useAdvancedAtmospherics())
             {
-                //LLGLSquashToFarClip far_clip(get_current_projection());
 	            renderSkyHazeDeferred(origin, camHeightLocal);
             }
             else
             {
-                // Disable depth-test for sky, but re-enable depth writes for the cloud
-                // rendering below so the cloud shader can write out depth for the stars to test against            
-                renderSkyHaze(origin, camHeightLocal);   
-		    
+                renderSkyHaze(origin, camHeightLocal);
             }
             renderHeavenlyBodies();
         }
+
         renderSkyClouds(origin, camHeightLocal);
     }    
     gGL.setColorMask(true, true);
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index a8bc8d4d450..b4b6bb252fd 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -299,7 +299,9 @@ void LLVOWLSky::drawDome(void)
 		updateGeometry(mDrawable);
 	}
 
-	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
+    // This is handled upstream now as we may make different decisions
+    // for some dome users (the sky) than for others (the clouds)
+	//LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
 
 	const U32 data_mask = LLDrawPoolWLSky::SKY_VERTEX_DATA_MASK;
 	
-- 
GitLab