Index: src/core/SkXfermode.cpp |
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp |
index 1d502d987c7d7a1edd8bef0d2e0b40b48dc0bd9a..9c131ca241cd4e8627e47c0c20866165e9045fa3 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) { |