diff --git a/GPU/GLES/FragmentShaderGenerator.cpp b/GPU/GLES/FragmentShaderGenerator.cpp index 92ff4c4fa7..16af7be7f9 100644 --- a/GPU/GLES/FragmentShaderGenerator.cpp +++ b/GPU/GLES/FragmentShaderGenerator.cpp @@ -311,8 +311,17 @@ bool ShouldUseShaderBlending() { GEBlendDstFactor funcB = gstate.getBlendFuncB(); GEBlendMode eq = gstate.getBlendEq(); - if (eq == GE_BLENDMODE_ABSDIFF) { + switch (eq) { + case GE_BLENDMODE_ABSDIFF: return true; + + case GE_BLENDMODE_MIN: + case GE_BLENDMODE_MAX: + // These don't use the factors. + return !gl_extensions.EXT_blend_minmax && !gl_extensions.GLES3; + + default: + break; } // This normally involves a blit, so try to skip it. diff --git a/GPU/GLES/StateMapping.cpp b/GPU/GLES/StateMapping.cpp index b9b4620286..ddd40b6d53 100644 --- a/GPU/GLES/StateMapping.cpp +++ b/GPU/GLES/StateMapping.cpp @@ -387,11 +387,7 @@ void TransformDrawEngine::ApplyBlendState() { glstate.blendFuncSeparate.set(glBlendFuncA, glBlendFuncB, GL_ZERO, GL_ONE); } - if (blendFuncEq == GE_BLENDMODE_ABSDIFF) { - WARN_LOG_REPORT_ONCE(blendAbsdiff, G3D, "Unsupported absdiff blend mode"); - } - - if (((blendFuncEq >= GE_BLENDMODE_MIN) && gl_extensions.EXT_blend_minmax) || gl_extensions.GLES3) { + if (gl_extensions.EXT_blend_minmax || gl_extensions.GLES3) { glstate.blendEquation.set(eqLookup[blendFuncEq]); } else { glstate.blendEquation.set(eqLookupNoMinMax[blendFuncEq]);