From 6cad1da6ef6a41c25258a42cd36e9a591a1cc076 Mon Sep 17 00:00:00 2001 From: reed Date: Tue, 7 Apr 2015 06:13:45 -0700 Subject: simplify xfers BUG=skia: Review URL: https://codereview.chromium.org/1061193003 --- src/core/SkXfermode.cpp | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index 1d502d987c..9c131ca241 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -1201,13 +1201,6 @@ static Sk4f clamp_0_255(const Sk4f& value) { return Sk4f::Max(Sk4f(0), Sk4f::Min(Sk4f(255), value)); } -// return a swizzle of a | rgb -static Sk4f set_a_rgb(const Sk4f& a, const Sk4f& rgb) { - SkPMFloat pma = a; - SkPMFloat pmc = rgb; - return SkPMFloat(pma.a(), pmc.r(), pmc.g(), pmc.b()); -} - /** * Some modes can, due to very slight numerical error, generate "invalid" pmcolors... * @@ -1315,7 +1308,7 @@ struct Difference4f { Sk4f dc = dst; Sk4f min = Sk4f::Min(sc * da, dc * sa) * inv255; Sk4f ra = sc + dc - min; - return check_as_pmfloat(set_a_rgb(ra, ra - min)); + return check_as_pmfloat(ra - min * SkPMFloat(0, 1, 1, 1)); } static const bool kFoldCoverageIntoSrcAlpha = false; static const SkXfermode::Mode kMode = SkXfermode::kDifference_Mode; @@ -1328,7 +1321,7 @@ struct Exclusion4f { Sk4f dc = dst; Sk4f prod = sc * dc * inv255; Sk4f ra = sc + dc - prod; - return check_as_pmfloat(set_a_rgb(ra, ra - prod)); + return check_as_pmfloat(ra - prod * SkPMFloat(0, 1, 1, 1)); } static const bool kFoldCoverageIntoSrcAlpha = false; static const SkXfermode::Mode kMode = SkXfermode::kExclusion_Mode; @@ -1343,21 +1336,8 @@ public: void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override { if (NULL == aa) { - while (n & 3) { - *dst = ProcType::Xfer(SkPMFloat(*src++), SkPMFloat(*dst)).round(); - dst++; - n -= 1; - } - n >>= 2; for (int i = 0; i < n; ++i) { - SkPMFloat s0, s1, s2, s3; - SkPMFloat::From4PMColors(src, &s0, &s1, &s2, &s3); - SkPMFloat d0, d1, d2, d3; - SkPMFloat::From4PMColors(dst, &d0, &d1, &d2, &d3); - SkPMFloat::RoundTo4PMColors(ProcType::Xfer(s0, d0), ProcType::Xfer(s1, d1), - ProcType::Xfer(s2, d2), ProcType::Xfer(s3, d3), dst); - src += 4; - dst += 4; + dst[i] = ProcType::Xfer(SkPMFloat(src[i]), SkPMFloat(dst[i])).round(); } } else { for (int i = 0; i < n; ++i) { -- cgit v1.2.3