From ba682fdd4be09d4a6a6fa35cd23da5fbe39ff0fc Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Mon, 13 Mar 2023 15:19:36 -0400
Subject: [PATCH] Shader cleanup

---
 indra/llrender/llshadermgr.cpp                | 24 +++++++++++++++++--
 .../shaders/class1/alchemy/CASF.glsl          | 20 ++++++++--------
 .../shaders/class1/alchemy/DLSF.glsl          | 20 ++++++++--------
 .../shaders/class1/alchemy/postNoTCV.glsl     |  2 +-
 .../shaders/class1/alchemy/toneMapF.glsl      |  8 +++----
 5 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 5b8c2394b6b..dbd81396d32 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -619,11 +619,31 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
 	{  
         if (major_version >= 4)
         {
-            //set version to 400 or 420
-            if (minor_version >= 20)
+            //set versions 400 through 460
+            if (minor_version <= 69)
+            {
+                shader_code_text[shader_code_count++] = strdup("#version 460\n");
+            }
+            else if (minor_version <= 59)
+            {
+                shader_code_text[shader_code_count++] = strdup("#version 450\n");
+            }
+            else if (minor_version <= 49)
+            {
+                shader_code_text[shader_code_count++] = strdup("#version 440\n");
+            }
+            else if (minor_version <= 39)
+            {
+                shader_code_text[shader_code_count++] = strdup("#version 430\n");
+            }
+            else if (minor_version <= 29)
             {
                 shader_code_text[shader_code_count++] = strdup("#version 420\n");
             }
+            else if (minor_version <= 19)
+            {
+                shader_code_text[shader_code_count++] = strdup("#version 410\n");
+            }
             else
             {
                 shader_code_text[shader_code_count++] = strdup("#version 400\n");
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
index 2a1c9942c4a..5b5590cbd96 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/CASF.glsl
@@ -33,7 +33,7 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 uniform sampler2D tex0;
 
@@ -64,18 +64,18 @@ void main()
     //  a b c
     //  d(e)f
     //  g h i
-    vec4 inputColor = texture2DLod(tex0, vary_fragcoord, 0.0f);
+    vec4 inputColor = textureLod(tex0, vary_fragcoord, 0.0f);
     float alpha = inputColor.a;
 
-    vec3 a = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1,-1)).rgb;
-    vec3 b = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0,-1)).rgb;
-    vec3 c = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1,-1)).rgb;
-    vec3 d = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 0)).rgb;
+    vec3 a = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1,-1)).rgb;
+    vec3 b = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0,-1)).rgb;
+    vec3 c = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1,-1)).rgb;
+    vec3 d = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 0)).rgb;
     vec3 e = inputColor.rgb;
-    vec3 f = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 0)).rgb;
-    vec3 g = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 1)).rgb;
-    vec3 h = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0, 1)).rgb;
-    vec3 i = texture2DLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 1)).rgb;
+    vec3 f = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 0)).rgb;
+    vec3 g = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2(-1, 1)).rgb;
+    vec3 h = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 0, 1)).rgb;
+    vec3 i = textureLodOffset(tex0, vary_fragcoord, 0.0f, ivec2( 1, 1)).rgb;
 
     // Soft min and max.
     //  a b c             b
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
index ff5073758c7..bbe1eb5fa3f 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/DLSF.glsl
@@ -34,7 +34,7 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 uniform sampler2D tex0;
 
@@ -86,17 +86,17 @@ void main()
     ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
 
-    vec4 x = texture2DLod(tex0, vary_fragcoord, 0.f);
+    vec4 x = textureLod(tex0, vary_fragcoord, 0.f);
 
-    vec4 a = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  0));
-    vec4 b = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  0));
-    vec4 c = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0,  1));
-    vec4 d = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0, -1));
+    vec4 a = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  0));
+    vec4 b = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  0));
+    vec4 c = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0,  1));
+    vec4 d = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 0, -1));
 
-    vec4 e = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1, -1));
-    vec4 f = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  1));
-    vec4 g = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  1));
-    vec4 h = texture2DLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1, -1));
+    vec4 e = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1, -1));
+    vec4 f = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1,  1));
+    vec4 g = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2(-1,  1));
+    vec4 h = textureLodOffset(tex0, vary_fragcoord, 0.0, ivec2( 1, -1));
 
     float lx = GetLuma(x);
 
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/postNoTCV.glsl b/indra/newview/app_settings/shaders/class1/alchemy/postNoTCV.glsl
index 5f1e9468ce0..c108e89c2f7 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/postNoTCV.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/postNoTCV.glsl
@@ -23,7 +23,7 @@
  */
 
 ATTRIBUTE vec3 position;
-VARYING vec2 vary_fragcoord;
+out vec2 vary_fragcoord;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
index f04ef631f9b..d21cce5f22e 100644
--- a/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
+++ b/indra/newview/app_settings/shaders/class1/alchemy/toneMapF.glsl
@@ -30,7 +30,7 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 uniform sampler2D diffuseRect;
 uniform sampler2D bloomMap;
@@ -293,9 +293,9 @@ vec3 legacyGamma(vec3 color)
 
 void main()
 {
-    vec4 diff = texture2D(diffuseRect, vary_fragcoord);
+    vec4 diff = texture(diffuseRect, vary_fragcoord);
     
-    // vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res);
+    // vec4 bloom = texture(bloomMap, vary_fragcoord.xy/screen_res);
     // diff.rgb += bloom.rgb;
 
     #if TONEMAP_METHOD != 0
@@ -357,7 +357,7 @@ void main()
     //see https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter24.html
     vec3 scale = (vec3(colorgrade_lut_size.x) - 1.0) / vec3(colorgrade_lut_size.x);
     vec3 offset = 1.0 / (2.0 * vec3(colorgrade_lut_size.x));
-    diff = vec4(linear_to_srgb(texture3DLod(colorgrade_lut, scale * diff.rgb + offset, 0).rgb), diff.a);
+    diff = vec4(linear_to_srgb(textureLod(colorgrade_lut, scale * diff.rgb + offset, 0).rgb), diff.a);
     #endif
 
     diff.rgb = legacyGamma(diff.rgb);
-- 
GitLab