Make skpaint->grpaint flow work for composing draws (verts and atlas)

One side effect is that the SkShader's (or implicit shader's) fragment processor is responsible for the transition from an unpremul paint color to a premul color.

Review URL: https://codereview.chromium.org/1348583002
diff --git a/include/gpu/SkGr.h b/include/gpu/SkGr.h
index 145d409..74d880a 100644
--- a/include/gpu/SkGr.h
+++ b/include/gpu/SkGr.h
@@ -54,7 +54,7 @@
 
 bool GrPixelConfig2ColorAndProfileType(GrPixelConfig, SkColorType*, SkColorProfileType*);
 
-static inline GrColor SkColor2GrColor(SkColor c) {
+static inline GrColor SkColorToPremulGrColor(SkColor c) {
     SkPMColor pm = SkPreMultiplyColor(c);
     unsigned r = SkGetPackedR32(pm);
     unsigned g = SkGetPackedG32(pm);
@@ -63,7 +63,23 @@
     return GrColorPackRGBA(r, g, b, a);
 }
 
-static inline GrColor SkColor2GrColorJustAlpha(SkColor c) {
+static inline GrColor SkColorToUnpremulGrColor(SkColor c) {
+    unsigned r = SkColorGetR(c);
+    unsigned g = SkColorGetG(c);
+    unsigned b = SkColorGetB(c);
+    unsigned a = SkColorGetA(c);
+    return GrColorPackRGBA(r, g, b, a);
+}
+
+static inline GrColor SkColorToOpaqueGrColor(SkColor c) {
+    unsigned r = SkColorGetR(c);
+    unsigned g = SkColorGetG(c);
+    unsigned b = SkColorGetB(c);
+    return GrColorPackRGBA(r, g, b, 0xFF);
+}
+
+/** Replicates the SkColor's alpha to all four channels of the GrColor. */
+static inline GrColor SkColorAlphaToGrColor(SkColor c) {
     U8CPU a = SkColorGetA(c);
     return GrColorPackRGBA(a, a, a, a);
 }
@@ -108,23 +124,6 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-// Converts a SkPaint to a GrPaint, ignoring the SkPaint's shader.
-// Sets the color of GrPaint to the value of the parameter paintColor
-// Callers may subsequently modify the GrPaint. Setting constantColor indicates
-// that the final paint will draw the same color at every pixel. This allows
-// an optimization where the color filter can be applied to the SkPaint's
-// color once while converting to GrPaint and then ignored. TODO: Remove this
-// bool and use the invariant info to automatically apply the color filter.
-bool SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor paintColor,
-                             bool constantColor, GrPaint* grPaint);
-
-// This function is similar to skPaint2GrPaintNoShader but also converts
-// skPaint's shader to a GrFragmentProcessor if possible.
-// constantColor has the same meaning as in skPaint2GrPaintNoShader.
-bool SkPaint2GrPaint(GrContext* context, const SkPaint& skPaint, const SkMatrix& viewM,
-                     bool constantColor, GrPaint* grPaint);
-
-
 SkImageInfo GrMakeInfoFromTexture(GrTexture* tex, int w, int h, bool isOpaque);
 
 // Using the dreaded SkGrPixelRef ...