From 89878f55a25d60d6cb4826c69cd2ecc07b64cef9 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Wed, 12 Apr 2023 23:24:01 -0400
Subject: [PATCH] Fix alpost

---
 indra/newview/alrenderutils.cpp | 16 ++++++++++------
 indra/newview/alrenderutils.h   |  4 ++--
 indra/newview/pipeline.cpp      | 24 ++++++++++++++++++++++--
 3 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/indra/newview/alrenderutils.cpp b/indra/newview/alrenderutils.cpp
index 809fa98c1cc..50d7d7affc2 100644
--- a/indra/newview/alrenderutils.cpp
+++ b/indra/newview/alrenderutils.cpp
@@ -513,9 +513,9 @@ bool ALRenderUtil::setupColorGrade()
 	return true;
 }
 
-void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure)
+void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure, LLRenderTarget* dst)
 {
-	LLGLDepthTest depth(GL_FALSE, GL_FALSE);
+	dst->bindTarget();
 
 	LLGLSLShader* tone_shader = (mCGLut != 0 ) ? &gDeferredPostColorGradeLUTProgram[mTonemapType] : &gDeferredPostTonemapProgram[mTonemapType];
 
@@ -578,6 +578,8 @@ void ALRenderUtil::renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure)
 	tone_shader->unbindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
 	tone_shader->unbindTexture(LLShaderMgr::EXPOSURE_MAP, exposure->getUsage());
 	tone_shader->unbind();
+
+	dst->flush();
 }
 
 bool ALRenderUtil::setupSharpen()
@@ -625,13 +627,16 @@ bool ALRenderUtil::setupSharpen()
 	return true;
 }
 
-void ALRenderUtil::renderSharpen(LLRenderTarget* src)
+void ALRenderUtil::renderSharpen(LLRenderTarget* src, LLRenderTarget* dst)
 {
 	if (mSharpenMethod == ALSharpen::SHARPEN_NONE)
 	{
+		gPipeline.copyRenderTarget(src, dst);
 		return;
 	}
 
+	dst->bindTarget();
+
 	LLGLSLShader* sharpen_shader = nullptr;
 	switch (mSharpenMethod)
 	{
@@ -646,8 +651,6 @@ void ALRenderUtil::renderSharpen(LLRenderTarget* src)
 		break;
 	}
 
-	LLGLDepthTest depth(GL_FALSE, GL_FALSE);
-
 	// Bind setup:
 	sharpen_shader->bind();
 
@@ -657,6 +660,7 @@ void ALRenderUtil::renderSharpen(LLRenderTarget* src)
 	mRenderBuffer->setBuffer();
 	mRenderBuffer->drawArrays(LLRender::TRIANGLES, 0, 3);
 
-	sharpen_shader->unbindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
 	sharpen_shader->unbind();
+
+	dst->flush();
 }
diff --git a/indra/newview/alrenderutils.h b/indra/newview/alrenderutils.h
index 3008416ee84..1363c9bc99f 100644
--- a/indra/newview/alrenderutils.h
+++ b/indra/newview/alrenderutils.h
@@ -62,7 +62,7 @@ class ALRenderUtil
 	};
 	bool setupTonemap();
 	bool setupColorGrade();
-	void renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure);
+	void renderTonemap(LLRenderTarget* src, LLRenderTarget* exposure, LLRenderTarget* dst);
 
 	enum ALSharpen : uint32_t
 	{
@@ -73,7 +73,7 @@ class ALRenderUtil
 	};
 
 	bool setupSharpen();
-	void renderSharpen(LLRenderTarget* src);
+	void renderSharpen(LLRenderTarget* src, LLRenderTarget* dst);
 	// End Deferred Only
 
 	U32 getSharpenMethod() { return mSharpenMethod; };
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 078323efa99..7f3cb7f40c4 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7304,7 +7304,25 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst) {
 			mRT->fxaaBuffer.flush();
 
 			dst->bindTarget();
-			shader = &gFXAAProgram;
+
+			U32 fsaa_quality = 0;
+			switch (RenderFSAASamples)
+			{
+			case 2:
+				fsaa_quality = 0;
+				break;
+			case 4:
+				fsaa_quality = 1;
+				break;
+			default:
+			case 8:
+				fsaa_quality = 2;
+				break;
+			case 16:
+				fsaa_quality = 3;
+				break;
+			}
+			shader = &gFXAAProgram[fsaa_quality];
 			shader->bind();
 
 			channel = shader->enableTexture(LLShaderMgr::DIFFUSE_MAP, mRT->fxaaBuffer.getUsage());
@@ -7618,7 +7636,9 @@ void LLPipeline::renderFinalize()
 
 		generateExposure(&mLuminanceMap, &mExposureMap);
 
-		gammaCorrect(&mRT->screen, &mPostMap);
+		mALRenderUtil->renderTonemap(&mRT->screen, &mExposureMap, &mPostFXMap);
+		mALRenderUtil->renderSharpen(&mPostFXMap, &mPostMap);
+		//gammaCorrect(&mRT->screen, &mPostMap);
 
         LLVertexBuffer::unbind();
     }
-- 
GitLab