Create fragment processor for performing input color blend with child processor
The new FP is used to implement SkXM::Mode color filters and SkXM::Mode image filters. Also, these now support all advanced SkXM::Mode xfermodes.
Review URL: https://codereview.chromium.org/1334293003
diff --git a/include/gpu/SkGr.h b/include/gpu/SkGr.h
index 68b93a1..99a361b 100644
--- a/include/gpu/SkGr.h
+++ b/include/gpu/SkGr.h
@@ -38,8 +38,9 @@
GR_STATIC_ASSERT((int)kISA_GrBlendCoeff == (int)SkXfermode::kISA_Coeff);
GR_STATIC_ASSERT((int)kDA_GrBlendCoeff == (int)SkXfermode::kDA_Coeff);
GR_STATIC_ASSERT((int)kIDA_GrBlendCoeff == (int)SkXfermode::kIDA_Coeff);
+GR_STATIC_ASSERT(SkXfermode::kCoeffCount == 10);
-#define sk_blend_to_grblend(X) ((GrBlendCoeff)(X))
+#define SkXfermodeCoeffToGrBlendCoeff(X) ((GrBlendCoeff)(X))
///////////////////////////////////////////////////////////////////////////////
@@ -67,6 +68,16 @@
return GrColorPackRGBA(a, a, a, a);
}
+static inline SkPMColor GrColorToSkPMColor(GrColor c) {
+ GrColorIsPMAssert(c);
+ return SkPackARGB32(GrColorUnpackA(c), GrColorUnpackR(c), GrColorUnpackG(c), GrColorUnpackB(c));
+}
+
+static inline GrColor SkPMColorToGrColor(SkPMColor c) {
+ return GrColorPackRGBA(SkGetPackedR32(c), SkGetPackedG32(c), SkGetPackedB32(c),
+ SkGetPackedA32(c));
+}
+
////////////////////////////////////////////////////////////////////////////////
/**