From 61172283c14325763858c8f27927b6b2571307bb Mon Sep 17 00:00:00 2001 From: S2S <12202580+standard-two-simplex@users.noreply.github.com> Date: Mon, 14 Dec 2020 22:52:46 +0100 Subject: [PATCH] Update blender to use coverage --- .../GLSL/glsl_CombinerProgramBuilder.cpp | 22 +++++++++++++------ .../glsl_CombinerProgramUniformFactory.cpp | 17 +++++++------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp index c0ce21fc..a558597a 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp @@ -673,7 +673,6 @@ public: if (_glinfo.dual_source_blending || _glinfo.ext_fetch || _glinfo.ext_fetch_arm) { m_part += "if (uBlendAlphaMode != 2) { \n" - " lowp float cvg = clampedColor.a; \n" " lowp vec4 srcAlpha = vec4(cvg, cvg, 1.0, 0.0); \n" " lowp vec4 dstFactorAlpha = vec4(1.0, 1.0, 0.0, 1.0); \n" " if (uBlendAlphaMode == 0) \n" @@ -941,7 +940,7 @@ public: "highp vec2 tcData1[5]; \n" "uniform lowp int uCvgDest; \n" "uniform lowp int uBlendAlphaMode; \n" - "lowp float mcvg;" + "lowp float cvg;" ; if (config.generalEmulation.enableLegacyBlending != 0) { @@ -1063,7 +1062,7 @@ public: "uniform lowp int uScreenSpaceTriangle; \n" "uniform lowp int uCvgDest; \n" "uniform lowp int uBlendAlphaMode; \n" - "lowp float mcvg; \n" + "lowp float cvg; \n" ; if (config.generalEmulation.enableLegacyBlending != 0) { @@ -2603,9 +2602,9 @@ public: "highp vec2 deltaBC1 = vec2(dBCdx[1], dBCdy[1]); \n" "highp vec2 deltaBC2 = vec2(dBCdx[2], dBCdy[2]); \n" "highp vec2 deltaBC3 = vec2(dBCdx[3], dBCdy[3]); \n" - "mcvg = 0.0; \n" + "cvg = 0.0; \n" "for (int i = 0; i<8; i++) { \n" - " mcvg += 0.125 * step(0.0, vBaryCoords[0] + dot(deltaBC0, bias[i])) * step(0.0, vBaryCoords[1] + dot(deltaBC1, bias[i])) " + " cvg += 0.125 * step(0.0, vBaryCoords[0] + dot(deltaBC0, bias[i])) * step(0.0, vBaryCoords[1] + dot(deltaBC1, bias[i])) " " * step(0.0, vBaryCoords[2] + dot(deltaBC2, bias[i])) * step(0.0, vBaryCoords[3] + dot(deltaBC3, bias[i])); \n" "} \n" ; @@ -2724,9 +2723,14 @@ CombinerInputs CombinerProgramBuilder::compileCombiner(const CombinerKey & _key, else ssShader << " lowp vec4 clampedColor = clamp(cmbRes, 0.0, 1.0);" << std::endl; - if (g_cycleType <= G_CYC_2CYCLE) + if (g_cycleType <= G_CYC_2CYCLE) { m_callDither->write(ssShader); + ssShader << "if (uCvgXAlpha != 0) cvg *= clampedColor.a;" << std::endl; + ssShader << "if (uAlphaCvgSel != 0) clampedColor.a = cvg; " << std::endl; + } + + if (config.generalEmulation.enableLegacyBlending == 0) { if (g_cycleType <= G_CYC_2CYCLE) { m_blender1->write(ssShader); @@ -2742,6 +2746,10 @@ CombinerInputs CombinerProgramBuilder::compileCombiner(const CombinerKey & _key, m_legacyBlender->write(ssShader); } + + // SHOW COVERAGE HACK + // ssShader << "fragColor.rgb = vec3(cvg);" << std::endl; + _strShader = ssShader.str(); return inputs; } @@ -2819,7 +2827,7 @@ graphics::CombinerProgram * CombinerProgramBuilder::buildCombinerProgram(Combine if (g_cycleType <= G_CYC_2CYCLE) m_shaderCoverage->write(ssShader); else - ssShader << "mcvg = 1.0f; \n" << std::endl; + ssShader << "cvg = 1.0f; \n" << std::endl; diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp index d40601d9..66173c07 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp @@ -574,24 +574,23 @@ public: { if (gDP.otherMode.cycleType == G_CYC_FILL) { uEnableAlphaTest.set(0, _force); - } - else if (gDP.otherMode.cycleType == G_CYC_COPY) { + uAlphaCvgSel.set(0, _force); + + } else if (gDP.otherMode.cycleType == G_CYC_COPY) { + uAlphaCvgSel.set(0, _force); if (gDP.otherMode.alphaCompare & G_AC_THRESHOLD) { uEnableAlphaTest.set(1, _force); - uAlphaCvgSel.set(0, _force); uAlphaTestValue.set(0.5f, _force); - } - else { + } else { uEnableAlphaTest.set(0, _force); } - } - else if ((gDP.otherMode.alphaCompare & G_AC_THRESHOLD) != 0) { + } else if ((gDP.otherMode.alphaCompare & G_AC_THRESHOLD) != 0) { uEnableAlphaTest.set(1, _force); uAlphaTestValue.set(gDP.blendColor.a, _force); uAlphaCvgSel.set(gDP.otherMode.alphaCvgSel, _force); - } - else { + } else { uEnableAlphaTest.set(0, _force); + uAlphaCvgSel.set(gDP.otherMode.alphaCvgSel, _force); } uCvgXAlpha.set(gDP.otherMode.cvgXAlpha, _force);