From ef98be881c3f13e7668f75cb0d302261053d9804 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Thu, 1 Sep 2022 17:30:48 -0400
Subject: [PATCH] Use an SRGB buffer for initial reflection map capture for
 proper linear sampling Fix irradiance gen up vector to be properly normalized

---
 .../app_settings/shaders/class1/interface/irradianceGenF.glsl | 2 +-
 .../app_settings/shaders/class3/deferred/softenLightF.glsl    | 4 +++-
 indra/newview/llreflectionmapmanager.cpp                      | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl b/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl
index 4d91395a1ba..4681fa1abd1 100644
--- a/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/irradianceGenF.glsl
@@ -79,7 +79,7 @@ void main()
 	vec3 N = normalize(vary_dir);
 	vec3 up = vec3(0.0, 1.0, 0.0);
 	vec3 right = normalize(cross(up, N));
-	up = cross(N, right);
+	up = normalize(cross(N, right));
 
 	const float TWO_PI = PI * 2.0;
 	const float HALF_PI = PI * 0.5;
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index 85bb9fbbd13..e6017534ca7 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -335,7 +335,6 @@ void main()
 #if PBR_USE_IRRADIANCE_HACK
         irradiance       = max(amblit,irradiance) * ambocc;
 #endif
-        specLight        = srgb_to_linear(specLight);
 #if DEBUG_PBR_SPECLIGHT051
         specLight        = vec3(0,0.5,1.0);
         irradiance       = specLight;
@@ -670,6 +669,9 @@ else
     diffuse.rgb = linear_to_srgb(diffuse.rgb); // SL-14035
 
     sampleReflectionProbes(ambenv, glossenv, legacyenv, pos.xyz, norm.xyz, spec.a, envIntensity);
+    ambenv.rgb = linear_to_srgb(ambenv.rgb); 
+    glossenv.rgb = linear_to_srgb(glossenv.rgb);
+    legacyenv.rgb = linear_to_srgb(legacyenv.rgb);
 
     amblit = max(ambenv, amblit);
     color.rgb = amblit*ambocc;
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index d349b7e0242..677e9200318 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -80,7 +80,7 @@ void LLReflectionMapManager::update()
 
     if (!mRenderTarget.isComplete())
     {
-        U32 color_fmt = GL_RGBA;
+        U32 color_fmt = GL_SRGB8_ALPHA8;
         const bool use_depth_buffer = true;
         const bool use_stencil_buffer = true;
         U32 targetRes = LL_REFLECTION_PROBE_RESOLUTION * 2; // super sample
-- 
GitLab