From c489481ec5edd0470553eca9b7c4cecfe994926c Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Tue, 6 Dec 2022 09:59:30 -0600
Subject: SL-18785 Fix for corrupt reflection probes on various preference
 changes.  Add UI for Screen Space Reflections.

---
 indra/llrender/llvertexbuffer.cpp                  |  4 +--
 indra/newview/app_settings/settings.xml            | 14 +++++++-
 indra/newview/featuretable.txt                     | 20 ++++++++---
 indra/newview/featuretable_mac.txt                 | 17 ++++++---
 indra/newview/llfloaterpreference.cpp              | 13 +++++--
 indra/newview/llviewercontrol.cpp                  |  1 +
 indra/newview/llviewershadermgr.cpp                |  2 +-
 indra/newview/pipeline.cpp                         |  8 ++---
 .../en/floater_preferences_graphics_advanced.xml   | 42 +++++++++++++++++-----
 9 files changed, 93 insertions(+), 28 deletions(-)

(limited to 'indra')

diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index adb3d99553..6122681c09 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -796,8 +796,8 @@ void LLVertexBuffer::cleanupClass()
 
     llassert(0 == LLVBOPool::sBytesPooled);
     llassert(0 == LLVBOPool::sIndexBytesPooled);
-    llassert(0 == sAllocatedBytes);
-    llassert(0 == sAllocatedIndexBytes);
+    //llassert(0 == sAllocatedBytes);
+    //llassert(0 == sAllocatedIndexBytes);
 }
 
 //----------------------------------------------------------------------------
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bea54f0b69..cdfb7ab71b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10327,7 +10327,8 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>RenderReflectionDetail</key>
+  
+  <key>RenderReflectionDetail</key>
     <map>
       <key>Comment</key>
       <string>DEPRECATED -- use RenderTransparentWater and RenderReflectionProbeDetail -- Detail of reflection render pass.</string>
@@ -10349,6 +10350,17 @@
       <key>Value</key>
       <integer>2</integer>
     </map>
+  <key>RenderReflectionsEnabled</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable/disable reflection probes</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
   <key>RenderReflectionProbeDetail</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index aedba9b49a..14819ac5e9 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,4 +1,4 @@
-version 41
+version 42
 // The version number above should be incremented IF AND ONLY IF some
 // change has been made that is sufficiently important to justify
 // resetting the graphics preferences of all users to the recommended
@@ -47,7 +47,8 @@ RenderMaxPartCount			1	8192
 RenderObjectBump			1	1
 RenderLocalLights			1	1
 RenderTransparentWater      1   1
-RenderReflectionProbeDetail		1	2
+RenderReflectionsEnabled    1   1
+RenderReflectionProbeDetail	1	2
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	2.0
 RenderTreeLODFactor			1	1.0
@@ -90,7 +91,8 @@ RenderGlowResolutionPow		1	8
 RenderLocalLights			1	0
 RenderMaxPartCount			1	0
 RenderTransparentWater      1   0
-RenderReflectionProbeDetail	1	-1
+RenderReflectionsEnabled    1   0
+RenderReflectionProbeDetail	1	0
 RenderTerrainDetail			1	0
 RenderTerrainLODFactor		1	1
 RenderTreeLODFactor			1	0
@@ -115,7 +117,8 @@ RenderGlowResolutionPow		1	8
 RenderMaxPartCount			1	2048
 RenderLocalLights			1	1
 RenderTransparentWater      1   0
-RenderReflectionProbeDetail	1	-1
+RenderReflectionsEnabled    1   0
+RenderReflectionProbeDetail	1	0
 RenderTerrainDetail			1	1
 RenderTerrainLODFactor		1	1.0
 RenderTreeLODFactor			1	0.5
@@ -149,6 +152,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	0
 
 //
@@ -174,6 +178,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -199,6 +204,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -224,6 +230,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	2
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -249,6 +256,7 @@ RenderDeferredSSAO			1	1
 RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	2
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -288,4 +296,6 @@ RenderGLContextCoreProfile  1   0
 
 list GL3
 RenderFSAASamples           0   0
-RenderReflectionProbeDetail	0	-1
+RenderReflectionsEnabled    0   0
+RenderReflectionProbeDetail	0	0
+
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index d40e7aff0b..621499de2e 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 41
+version 42
 // The version number above should be incremented IF AND ONLY IF some
 // change has been made that is sufficiently important to justify
 // resetting the graphics preferences of all users to the recommended
@@ -71,6 +71,7 @@ RenderFSAASamples			1	16
 RenderMaxTextureIndex		1	16
 RenderGLContextCoreProfile         1   1
 RenderGLMultiThreaded       1   0
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	2
 
 //
@@ -97,7 +98,8 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	0
-RenderReflectionProbeDetail	1	-1
+RenderReflectionsEnabled    1   0
+RenderReflectionProbeDetail	1	0
 
 //
 // Medium Low Graphics Settings
@@ -122,7 +124,8 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	0
-RenderReflectionProbeDetail	1	-1
+RenderReflectionsEnabled    1   0
+RenderReflectionProbeDetail	1	0
 
 //
 // Medium Graphics Settings (standard)
@@ -147,6 +150,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	0
 
 //
@@ -172,6 +176,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	0
 
 //
@@ -197,6 +202,7 @@ RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -222,6 +228,7 @@ RenderShadowDetail			1	2
 RenderUseAdvancedAtmospherics 1 0
 WLSkyDetail					1	48
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -247,6 +254,7 @@ RenderDeferredSSAO			1	1
 RenderUseAdvancedAtmospherics 1 0
 RenderShadowDetail			1	2
 RenderFSAASamples			1	2
+RenderReflectionsEnabled    1   1
 RenderReflectionProbeDetail	1	1
 
 //
@@ -291,4 +299,5 @@ RenderFSAASamples			1	0
 
 list GL3
 RenderFSAASamples           0   0
-RenderReflectionProbeDetail	0	-1
+RenderReflectionProbeDetail	0	0
+RenderReflectionsEnabled    0   0
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 81b3c23417..4c8b4df0b6 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1220,10 +1220,19 @@ void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState()
         getChildView("fsaa")->setEnabled(FALSE);
     }
 
-    if (!LLFeatureManager::instance().isFeatureAvailable("RenderReflectionProbeDetail"))
+    enabled = false;
+    if (!LLFeatureManager::instance().isFeatureAvailable("RenderReflectionsEnabled"))
     {
-        getChildView("ReflectionDetail")->setEnabled(FALSE);
+        getChildView("ReflectionsEnabled")->setEnabled(FALSE);
     }
+    else 
+    {
+        enabled = gSavedSettings.getBOOL("RenderReflectionsEnabled");
+    }
+
+    getChildView("ReflectionDetail")->setEnabled(enabled);
+    getChildView("ReflectionDetailText")->setEnabled(enabled);
+    getChildView("ScreenSpaceReflections")->setEnabled(enabled);
 
 	// Hardware settings
 	
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 0c9324cc42..534f3413b3 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -724,6 +724,7 @@ void settings_setup_listeners()
 	setting_setup_signal_listener(gSavedSettings, "RenderResolutionDivisor", handleRenderResolutionDivisorChanged);
 	// DEPRECATED - setting_setup_signal_listener(gSavedSettings, "RenderDeferred", handleRenderDeferredChanged);
     setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeDetail", handleReflectionProbeDetailChanged);
+    setting_setup_signal_listener(gSavedSettings, "RenderReflectionsEnabled", handleReflectionProbeDetailChanged);
 	setting_setup_signal_listener(gSavedSettings, "RenderShadowDetail", handleSetShaderChanged);
 	setting_setup_signal_listener(gSavedSettings, "RenderDeferredSSAO", handleSetShaderChanged);
 	setting_setup_signal_listener(gSavedSettings, "RenderPerformanceTest", handleRenderPerfTestChanged);
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index a742264801..408e60595c 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -912,7 +912,7 @@ std::string LLViewerShaderMgr::loadBasicShaders()
 		ch = llmax(LLGLSLShader::sIndexedTextureChannels, 1);
 	}
 
-    bool has_reflection_probes = gSavedSettings.getS32("RenderReflectionProbeDetail") >= 0 && gGLManager.mGLVersion > 3.99f;
+    bool has_reflection_probes = gSavedSettings.getBOOL("RenderReflectionsEnabled") && gGLManager.mGLVersion > 3.99f;
 
 	std::vector<S32> index_channels;    
 	index_channels.push_back(-1);    shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl",      mShaderLevel[SHADER_WINDLIGHT] ) );
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index fa46b0f02a..b41a02d491 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -410,7 +410,7 @@ void LLPipeline::init()
 	sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights");
 	sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles");
 
-	mInitialized = true;
+    mInitialized = true;
 	
 	stop_glerror();
 
@@ -1019,8 +1019,6 @@ void LLPipeline::updateRenderBump()
 void LLPipeline::updateRenderDeferred()
 {
     sRenderPBR = sRenderDeferred;
-    static LLCachedControl<S32> sProbeDetail(gSavedSettings, "RenderReflectionProbeDetail", -1);
-    sReflectionProbesEnabled = sProbeDetail >= 0 && gGLManager.mGLVersion > 3.99f;
 }
 
 // static
@@ -1112,7 +1110,9 @@ void LLPipeline::refreshCachedSettings()
 	CameraDoFResScale = gSavedSettings.getF32("CameraDoFResScale");
 	RenderAutoHideSurfaceAreaLimit = gSavedSettings.getF32("RenderAutoHideSurfaceAreaLimit");
     RenderScreenSpaceReflections = gSavedSettings.getBOOL("RenderScreenSpaceReflections");
+    sReflectionProbesEnabled = gSavedSettings.getBOOL("RenderReflectionsEnabled");
 	RenderSpotLight = nullptr;
+
 	updateRenderDeferred();
 
 	if (gNonInteractive)
@@ -7397,8 +7397,6 @@ void LLPipeline::doResetVertexBuffers(bool forced)
 	LLVOPartGroup::destroyGL();
     gGL.resetVertexBuffer();
 
-    mReflectionMapManager.cleanup();
-
 	SUBSYSTEM_CLEANUP(LLVertexBuffer);
 	
 	if (LLVertexBuffer::sGLCount != 0)
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
index 75b50c0e39..8ce365878a 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml
@@ -647,31 +647,57 @@
        name="2"
        value="2"/>
   </combo_box>
+
+  <check_box
+    control_name="RenderReflectionsEnabled"
+    height="16"
+    initial_value="true"
+    label="Reflections (requires restart)"
+    layout="topleft"
+    left="420"
+    name="ReflectionsEnabled"
+    top_delta="16"
+    width="240">
+    <check_box.commit_callback
+      function="Pref.RenderOptionUpdate" />
+  </check_box>
+
+  <check_box
+    control_name="RenderScreenSpaceReflections"
+    height="16"
+    initial_value="true"
+    label="Screen Space Reflections"
+    layout="topleft"
+    left="440"
+    name="ScreenSpaceReflections"
+    top_delta="16"
+    width="240">
+    <check_box.commit_callback
+      function="Pref.RenderOptionUpdate" />
+  </check_box>
+  
   <text
     type="string"
     length="1"
     follows="left|top"
     height="16"
     layout="topleft"
-    left="420"
-    name="RenderReflectionDetailText"
+    left="440"
+    name="ReflectionDetailText"
     text_readonly_color="LabelDisabledColor"
     top_delta="16"
     width="128">
-    Reflections:
+    Reflection Detail:
   </text>
+
   <combo_box
    control_name="RenderReflectionProbeDetail"
    height="18"
    layout="topleft"
-   left_delta="130"
+   left_delta="110"
    top_delta="0"
    name="ReflectionDetail"
    width="150">
-    <combo_box.item
-      label="Disabled"
-      name="0"
-      value="-1"/>
     <combo_box.item
       label="Static Only"
       name="0"
-- 
cgit v1.2.3