Keep paint color range/precision into ops and GPs (using GrColor4h)

We still degrade to bytes when creating vertices (tagged TODO4F).

Note: Guarded for Chrome (by making GrColor4h a wrapper around
GrColor).

Bug: skia:
Change-Id: Id8a1d9eec7978d52b059cd9952666bc1217ee073
Reviewed-on: https://skia-review.googlesource.com/c/165527
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp
index 5dfff7e..fc54933 100644
--- a/src/gpu/GrDefaultGeoProcFactory.cpp
+++ b/src/gpu/GrDefaultGeoProcFactory.cpp
@@ -39,7 +39,7 @@
 public:
     static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps* shaderCaps,
                                            uint32_t gpTypeFlags,
-                                           GrColor color,
+                                           GrColor4h color,
                                            sk_sp<GrColorSpaceXform> colorSpaceXform,
                                            const SkMatrix& viewMatrix,
                                            const SkMatrix& localMatrix,
@@ -54,7 +54,7 @@
 
     const char* name() const override { return "DefaultGeometryProcessor"; }
 
-    GrColor color() const { return fColor; }
+    GrColor4h color() const { return fColor; }
     bool hasVertexColor() const { return fInColor.isInitialized(); }
     const SkMatrix& viewMatrix() const { return fViewMatrix; }
     const SkMatrix& localMatrix() const { return fLocalMatrix; }
@@ -68,7 +68,7 @@
     class GLSLProcessor : public GrGLSLGeometryProcessor {
     public:
         GLSLProcessor()
-            : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor_ILLEGAL), fCoverage(0xff) {}
+            : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(GrColor4h_ILLEGAL), fCoverage(0xff) {}
 
         void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override {
             const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>();
@@ -229,9 +229,9 @@
                 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix);
             }
 
-            if (dgp.color() != fColor && !dgp.hasVertexColor()) {
+            if (!dgp.hasVertexColor() && dgp.color() != fColor) {
                 float c[4];
-                GrColorToRGBAFloat(dgp.color(), c);
+                dgp.color().toFloats(c);
                 pdman.set4fv(fColorUniform, 1, c);
                 fColor = dgp.color();
             }
@@ -281,7 +281,7 @@
 
     private:
         SkMatrix fViewMatrix;
-        GrColor fColor;
+        GrColor4h fColor;
         uint8_t fCoverage;
         UniformHandle fViewMatrixUniform;
         UniformHandle fColorUniform;
@@ -303,7 +303,7 @@
 private:
     DefaultGeoProc(const GrShaderCaps* shaderCaps,
                    uint32_t gpTypeFlags,
-                   GrColor color,
+                   GrColor4h color,
                    sk_sp<GrColorSpaceXform> colorSpaceXform,
                    const SkMatrix& viewMatrix,
                    const SkMatrix& localMatrix,
@@ -370,7 +370,7 @@
     Attribute fInCoverage;
     Attribute fInBoneIndices;
     Attribute fInBoneWeights;
-    GrColor fColor;
+    GrColor4h fColor;
     SkMatrix fViewMatrix;
     SkMatrix fLocalMatrix;
     uint8_t fCoverage;
@@ -417,7 +417,7 @@
 
     return DefaultGeoProc::Make(d->caps()->shaderCaps(),
                                 flags,
-                                GrRandomColor(d->fRandom),
+                                GrColor4h::FromGrColor(GrRandomColor(d->fRandom)),
                                 GrTest::TestColorXform(d->fRandom),
                                 GrTest::TestMatrix(d->fRandom),
                                 GrTest::TestMatrix(d->fRandom),
@@ -445,7 +445,7 @@
     uint8_t inCoverage = coverage.fCoverage;
     bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type;
 
-    GrColor inColor = color.fColor;
+    GrColor4h inColor = color.fColor;
     return DefaultGeoProc::Make(shaderCaps,
                                 flags,
                                 inColor,
@@ -499,7 +499,7 @@
     uint8_t inCoverage = coverage.fCoverage;
     bool localCoordsWillBeRead = localCoords.fType != LocalCoords::kUnused_Type;
 
-    GrColor inColor = color.fColor;
+    GrColor4h inColor = color.fColor;
     return DefaultGeoProc::Make(shaderCaps,
                                 flags,
                                 inColor,