From 4259ea79535e88ef6d8ec8415c53c28d0c2d89ac Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Fri, 3 Feb 2023 11:34:11 -0600
Subject: [PATCH] SL-19150 Fix for stuttering real-time reflection probes.

---
 indra/newview/llreflectionmapmanager.cpp | 10 ++++++++++
 indra/newview/llreflectionmapmanager.h   |  5 +++++
 2 files changed, 15 insertions(+)

diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index e622f547564..4fd10b85ad4 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -206,11 +206,21 @@ void LLReflectionMapManager::update()
     {
         LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("rmmu - realtime");
         // update the closest dynamic probe realtime
+        // should do a full irradiance pass on "odd" frames and a radiance pass on "even" frames
         closestDynamic->autoAdjustOrigin();
+
+        // store and override the value of "isRadiancePass" -- parts of the render pipe rely on "isRadiancePass" to set 
+        // lighting values etc
+        bool radiance_pass = isRadiancePass();
+        mRadiancePass = mRealtimeRadiancePass;
         for (U32 i = 0; i < 6; ++i)
         {
             updateProbeFace(closestDynamic, i);
         }
+        mRealtimeRadiancePass = !mRealtimeRadiancePass;
+
+        // restore "isRadiancePass"
+        mRadiancePass = radiance_pass;
     }
 
     // switch to updating the next oldest probe
diff --git a/indra/newview/llreflectionmapmanager.h b/indra/newview/llreflectionmapmanager.h
index 5936b26b889..85f428d75ba 100644
--- a/indra/newview/llreflectionmapmanager.h
+++ b/indra/newview/llreflectionmapmanager.h
@@ -169,6 +169,11 @@ class alignas(16) LLReflectionMapManager
     // This should avoid feedback loops and ensure that the colors in the radiance maps match the colors in the environment.
     bool mRadiancePass = false;
 
+    // same as above, but for the realtime probe.
+    // Realtime probes should update all six sides of the irradiance map on "odd" frames and all six sides of the
+    // radiance map on "even" frames.
+    bool mRealtimeRadiancePass = false;
+
     LLPointer<LLReflectionMap> mDefaultProbe;  // default reflection probe to fall back to for pixels with no probe influences (should always be at cube index 0)
 
     // number of reflection probes to use for rendering (based on saved setting RenderReflectionProbeCount)
-- 
GitLab