Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Unified Diff: src/opts/SkXfermode_opts.h

Issue 1308903003: Templatize SkPMFloat to support both 1 and 255 biases. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: pump the loops for Android Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/opts/SkXfermode_opts.h
diff --git a/src/opts/SkXfermode_opts.h b/src/opts/SkXfermode_opts.h
index 7005d593afe698c724336e1bbe58a0d317295f2c..bb92af9bb615f101ed66600c1137b84f229c3205 100644
--- a/src/opts/SkXfermode_opts.h
+++ b/src/opts/SkXfermode_opts.h
@@ -110,7 +110,7 @@ XFERMODE(Lighten) {
#undef XFERMODE
// Some xfermodes use math like divide or sqrt that's best done in floats 1 pixel at a time.
-#define XFERMODE(Name) static SkPMFloat SK_VECTORCALL Name(SkPMFloat d, SkPMFloat s)
+#define XFERMODE(Name) static SkPMFloat<1> SK_VECTORCALL Name(SkPMFloat<1> d, SkPMFloat<1> s)
XFERMODE(ColorDodge) {
auto sa = s.alphas(),
@@ -126,7 +126,7 @@ XFERMODE(ColorDodge) {
auto colors = (d == Sk4f(0)).thenElse(dstover,
(s == sa).thenElse(srcover,
otherwise));
- return srcover * SkPMFloat(1,0,0,0) + colors * SkPMFloat(0,1,1,1);
+ return srcover * SkPMFloat<1>(1,0,0,0) + colors * SkPMFloat<1>(0,1,1,1);
}
XFERMODE(ColorBurn) {
auto sa = s.alphas(),
@@ -142,7 +142,7 @@ XFERMODE(ColorBurn) {
auto colors = (d == da).thenElse(dstover,
(s == Sk4f(0)).thenElse(srcover,
otherwise));
- return srcover * SkPMFloat(1,0,0,0) + colors * SkPMFloat(0,1,1,1);
+ return srcover * SkPMFloat<1>(1,0,0,0) + colors * SkPMFloat<1>(0,1,1,1);
}
XFERMODE(SoftLight) {
auto sa = s.alphas(),
@@ -167,7 +167,7 @@ XFERMODE(SoftLight) {
auto alpha = s + d*isa;
auto colors = s*ida + d*isa + (s2 <= sa).thenElse(darkSrc, liteSrc); // Case 1 or 2/3?
- return alpha * SkPMFloat(1,0,0,0) + colors * SkPMFloat(0,1,1,1);
+ return alpha * SkPMFloat<1>(1,0,0,0) + colors * SkPMFloat<1>(0,1,1,1);
}
#undef XFERMODE
@@ -234,7 +234,7 @@ private:
class SkPMFloatXfermode : public SkProcCoeffXfermode {
public:
- typedef SkPMFloat (SK_VECTORCALL *ProcF)(SkPMFloat, SkPMFloat);
+ typedef SkPMFloat<1> (SK_VECTORCALL *ProcF)(SkPMFloat<1>, SkPMFloat<1>);
SkPMFloatXfermode(const ProcCoeff& rec, SkXfermode::Mode mode, ProcF procf)
: INHERITED(rec, mode)
, fProcF(procf) {}
@@ -257,15 +257,15 @@ public:
private:
inline SkPMColor xfer32(SkPMColor dst, SkPMColor src) const {
- return fProcF(SkPMFloat(dst), SkPMFloat(src)).round();
+ return fProcF(SkPMFloat<1>(dst), SkPMFloat<1>(src)).round();
}
inline SkPMColor xfer32(SkPMColor dst, SkPMColor src, SkAlpha aa) const {
- SkPMFloat s(src),
- d(dst),
- b(fProcF(d,s));
+ SkPMFloat<1> s(src),
+ d(dst),
+ b(fProcF(d,s));
// We do aa in full float precision before going back down to bytes, because we can!
- SkPMFloat a = Sk4f(aa) * Sk4f(1.0f/255);
+ SkPMFloat<1> a = Sk4f(aa) * Sk4f(1.0f/255);
b = b*a + d*(Sk4f(1)-a);
return b.round();
}

Powered by Google App Engine
This is Rietveld 408576698