summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRye Cogtail <rye@lindenlab.com>2024-08-23 22:06:28 -0400
committerRye Mutt <rye@alchemyviewer.org>2024-08-24 00:55:34 -0400
commit2ca193ce468cd4420e0ed47a7991661d1b1ca635 (patch)
tree01d98ff74eaa70bcb98d896aa93f7baf42d6f76f
parentcbca17825614d18a96994c94ec0c38e9d8e812cf (diff)
Improve FXAA quality and performance when GL version is greater then 4
Adds gather4 support under GLSL 4.0+
-rw-r--r--indra/llrender/llshadermgr.cpp2
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl20
-rw-r--r--indra/newview/llviewershadermgr.cpp10
3 files changed, 27 insertions, 5 deletions
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 512ef340f9..e9608491a4 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -595,8 +595,6 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
extra_code_text[extra_code_count++] = strdup("precision highp float;\n");
}
}
-
- extra_code_text[extra_code_count++] = strdup("#define FXAA_GLSL_130 1\n");
}
// Use alpha float to store bit flags
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
index 94dac7e5a9..16e23a3da7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
@@ -256,6 +256,10 @@ A. Or use FXAA_GREEN_AS_LUMA.
#define FXAA_GLSL_130 0
#endif
/*--------------------------------------------------------------------------*/
+#ifndef FXAA_GLSL_400
+ #define FXAA_GLSL_400 0
+#endif
+/*--------------------------------------------------------------------------*/
#ifndef FXAA_HLSL_3
#define FXAA_HLSL_3 0
#endif
@@ -342,8 +346,8 @@ A. Or use FXAA_GREEN_AS_LUMA.
// 1 = API supports gather4 on alpha channel.
// 0 = API does not support gather4 on alpha channel.
//
- #if (FXAA_GLSL_130 == 0)
- #define FXAA_GATHER4_ALPHA 0
+ #if (FXAA_GLSL_400 == 1)
+ #define FXAA_GATHER4_ALPHA 1
#endif
#if (FXAA_HLSL_5 == 1)
#define FXAA_GATHER4_ALPHA 1
@@ -652,7 +656,7 @@ NOTE the other tuning knobs are now in the shader function inputs!
API PORTING
============================================================================*/
-#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)
+#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1) || (FXAA_GLSL_400 == 1)
#define FxaaBool bool
#define FxaaDiscard discard
#define FxaaFloat float
@@ -714,6 +718,16 @@ NOTE the other tuning knobs are now in the shader function inputs!
#endif
#endif
/*--------------------------------------------------------------------------*/
+#if (FXAA_GLSL_400 == 1)
+ // Requires "#version 400" or better
+ #define FxaaTexTop(t, p) textureLod(t, p, 0.0)
+ #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
+ #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)
+ #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)
+ #define FxaaTexGreen4(t, p) textureGather(t, p, 1)
+ #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)
+#endif
+/*--------------------------------------------------------------------------*/
#if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1)
#define FxaaInt2 float2
#define FxaaTex sampler2D
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 680a519e12..d1dea16bc0 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -2345,6 +2345,16 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gFXAAProgram.mShaderFiles.clear();
gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER));
gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/fxaaF.glsl", GL_FRAGMENT_SHADER));
+
+ if (gGLManager.mGLVersion > 3.9)
+ {
+ gFXAAProgram.addPermutation("FXAA_GLSL_400", "1");
+ }
+ else
+ {
+ gFXAAProgram.addPermutation("FXAA_GLSL_130", "1");
+ }
+
gFXAAProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
success = gFXAAProgram.createShader();
llassert(success);