From df9d2b6e9613d15d39e3e870fc09686e41b6c37f Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 24 Mar 2023 10:31:32 -0500
Subject: [PATCH] SL-19321 Optimization pass -- reduce occlusion culling frame
 stalls, reduce shadow draw distance in probes.

---
 indra/newview/app_settings/settings.xml | 11 +++++++++++
 indra/newview/llvieweroctree.cpp        |  4 +++-
 indra/newview/pipeline.cpp              |  2 +-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6d7e93b3645..5ade88e32bb 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -14261,6 +14261,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+  <key>RenderOcclusionTimeout</key>
+  <map>
+    <key>Comment</key>
+    <string>Maximum number of frames to wait on an occlusion query before forcibly reading it back</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>S32</string>
+    <key>Value</key>
+    <integer>8</integer>
+  </map>
   <key>UseObjectCacheOcclusion</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index d1d23cfb8e4..a2d8d30fb2c 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -1131,7 +1131,9 @@ void LLOcclusionCullingGroup::checkOcclusion()
                 mOcclusionCheckCount[LLViewerCamera::sCurCameraID]++;
             }
 
-            if (available || mOcclusionCheckCount[LLViewerCamera::sCurCameraID] > 4)
+            static LLCachedControl<S32> occlusion_timeout(gSavedSettings, "RenderOcclusionTimeout", 4);
+
+            if (available || mOcclusionCheckCount[LLViewerCamera::sCurCameraID] > occlusion_timeout)
             {   
                 mOcclusionCheckCount[LLViewerCamera::sCurCameraID] = 0;
                 GLuint query_result;    // Will be # samples drawn, or a boolean depending on mHasOcclusionQuery2 (both are type GLuint)
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 18b01923461..f059c87c91f 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -9419,7 +9419,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 	}
 	else
 	{
-        for (S32 j = 0; j < 4; j++)
+        for (S32 j = 0; j < (gCubeSnapshot ? 3 : 4); j++)
 		{
 			if (!hasRenderDebugMask(RENDER_DEBUG_SHADOW_FRUSTA) && !gCubeSnapshot)
 			{
-- 
GitLab