From 94fa18bf3cafe50d2bcb54d52efd7b696c05282a Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Sun, 8 Oct 2023 15:10:56 -0400
Subject: [PATCH] Only reset probe mip chain and render target on resolution
 change

---
 indra/newview/llreflectionmapmanager.cpp | 11 +++++++++--
 indra/newview/llviewercontrol.cpp        |  1 -
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 3510d09db84..c0e166676d5 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -1210,11 +1210,15 @@ void LLReflectionMapManager::initReflectionMaps()
 {
     U32 count = LL_MAX_REFLECTION_PROBE_COUNT;
 
-    if (mTexture.isNull() || mReflectionProbeCount != count || mReset)
+    static LLCachedControl<U32> probe_res_cc(gSavedSettings, "RenderReflectionProbeResolution", 128);
+    U32 probe_resolution = nhpo2(llclamp(probe_res_cc(), (U32)64, (U32)512));
+    bool probe_resolution_changed = mProbeResolution != probe_resolution;
+
+    if (mTexture.isNull() || mReflectionProbeCount != count || probe_resolution_changed || mReset)
     {
         mReset = false;
         mReflectionProbeCount = count;
-        mProbeResolution = nhpo2(llclamp(gSavedSettings.getU32("RenderReflectionProbeResolution"), (U32)64, (U32)512));
+        mProbeResolution = probe_resolution;
         mMaxProbeLOD = log2f(mProbeResolution) - 1.f; // number of mips - 1
 
         mTexture = new LLCubeMapArray();
@@ -1259,7 +1263,10 @@ void LLReflectionMapManager::initReflectionMaps()
         mDefaultProbe->mRadius = 4096.f;
         mDefaultProbe->mProbeIndex = 0;
         touch_default_probe(mDefaultProbe);
+    }
 
+    if (probe_resolution_changed)
+    {
         mRenderTarget.release();
         mMipChain.clear();
     }
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 11623e11607..c56646b30f2 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -747,7 +747,6 @@ void settings_setup_listeners()
 // [/SL:KB]
     setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeLevel", handleReflectionProbeDetailChanged);
     setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeDetail", handleReflectionProbeDetailChanged);
-    setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeResolution", handleReflectionProbeDetailChanged);
     setting_setup_signal_listener(gSavedSettings, "RenderReflectionsEnabled", handleReflectionProbeDetailChanged);
     setting_setup_signal_listener(gSavedSettings, "RenderScreenSpaceReflections", handleReflectionProbeDetailChanged);
     setting_setup_signal_listener(gSavedSettings, "RenderShaderCacheEnabled", handleSetShaderChanged);
-- 
GitLab