From efff7246814972448f1685454d8cdcfc2b2bbe7f Mon Sep 17 00:00:00 2001 From: Matt Woodrow Date: Wed, 5 Aug 2020 00:55:01 +0000 Subject: [PATCH] Bug 1656813 - Implement non-premultiplied blending in SWGL. r=lsalzman Differential Revision: https://phabricator.services.mozilla.com/D85732 --- gfx/wr/swgl/src/gl.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gfx/wr/swgl/src/gl.cc b/gfx/wr/swgl/src/gl.cc index 9cec4b491418..0cd9e038689a 100644 --- a/gfx/wr/swgl/src/gl.cc +++ b/gfx/wr/swgl/src/gl.cc @@ -406,7 +406,7 @@ struct Program { #define CONCAT_KEY(prefix, x, y, z, w, ...) prefix##x##y##z##w #define BLEND_KEY(...) CONCAT_KEY(BLEND_, __VA_ARGS__, 0, 0) #define FOR_EACH_BLEND_KEY(macro) \ - macro(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE) \ + macro(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA) \ macro(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, 0, 0) \ macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, 0, 0) \ macro(GL_ZERO, GL_ONE_MINUS_SRC_COLOR, GL_ZERO, GL_ONE) \ @@ -2475,11 +2475,11 @@ static inline WideRGBA8 blend_pixels_RGBA8(PackedRGBA8 pdst, WideRGBA8 src) { switch (blend_key) { case BLEND_KEY_NONE: return src; - case BLEND_KEY(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE): - // dst + src.a*(src.rgb1 - dst.rgb0) + case BLEND_KEY(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, + GL_ONE_MINUS_SRC_ALPHA): + // dst + src.a*(src.rgb1 - dst) // use addlow for signed overflow - return addlow( - dst, muldiv255(alphas(src), (src | ALPHA_OPAQUE) - (dst & RGB_MASK))); + return addlow(dst, muldiv255(alphas(src), (src | ALPHA_OPAQUE) - dst)); case BLEND_KEY(GL_ONE, GL_ONE_MINUS_SRC_ALPHA): return src + dst - muldiv255(dst, alphas(src)); case BLEND_KEY(GL_ZERO, GL_ONE_MINUS_SRC_COLOR):