Use float colors for blend constant

Bug: skia:
Change-Id: Ie2a4b341a5e7762c3e8031fbd0f0d8b1ebae27f1
Reviewed-on: https://skia-review.googlesource.com/c/168268
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/src/gpu/effects/GrCoverageSetOpXP.cpp b/src/gpu/effects/GrCoverageSetOpXP.cpp
index e7ac874..8e1dbbb 100644
--- a/src/gpu/effects/GrCoverageSetOpXP.cpp
+++ b/src/gpu/effects/GrCoverageSetOpXP.cpp
@@ -117,7 +117,7 @@
             blendInfo->fDstBlend = kZero_GrBlendCoeff;
             break;
     }
-    blendInfo->fBlendConstant = 0;
+    blendInfo->fBlendConstant = SK_PMColor4fTRANSPARENT;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 89f61ec..aca1e05 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -588,10 +588,10 @@
 
     GrGLSLXferProcessor* createGLSLInstance() const override;
 
-    uint8_t alpha() const { return fAlpha; }
+    float alpha() const { return fAlpha; }
 
 private:
-    PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha);
+    PDLCDXferProcessor(const SkPMColor4f& blendConstant, float alpha);
 
     void onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
 
@@ -609,8 +609,8 @@
         return true;
     }
 
-    GrColor fBlendConstant;
-    uint8_t fAlpha;
+    SkPMColor4f fBlendConstant;
+    float fAlpha;
 
     typedef GrXferProcessor INHERITED;
 };
@@ -619,7 +619,7 @@
 
 class GLPDLCDXferProcessor : public GrGLSLXferProcessor {
 public:
-    GLPDLCDXferProcessor(const GrProcessor&) : fLastAlpha(UINT32_MAX) {}
+    GLPDLCDXferProcessor(const GrProcessor&) : fLastAlpha(SK_FloatNaN) {}
 
     ~GLPDLCDXferProcessor() override {}
 
@@ -641,21 +641,21 @@
     }
 
     void onSetData(const GrGLSLProgramDataManager& pdm, const GrXferProcessor& xp) override {
-        uint32_t alpha = SkToU32(xp.cast<PDLCDXferProcessor>().alpha());
+        float alpha = xp.cast<PDLCDXferProcessor>().alpha();
         if (fLastAlpha != alpha) {
-            pdm.set1f(fAlphaUniform, alpha / 255.f);
+            pdm.set1f(fAlphaUniform, alpha);
             fLastAlpha = alpha;
         }
     }
 
     GrGLSLUniformHandler::UniformHandle fAlphaUniform;
-    uint32_t fLastAlpha;
+    float fLastAlpha;
     typedef GrGLSLXferProcessor INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
 
-PDLCDXferProcessor::PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha)
+PDLCDXferProcessor::PDLCDXferProcessor(const SkPMColor4f& blendConstant, float alpha)
     : INHERITED(kPDLCDXferProcessor_ClassID, false, false, GrProcessorAnalysisCoverage::kLCD)
     , fBlendConstant(blendConstant)
     , fAlpha(alpha) {
@@ -666,14 +666,14 @@
     if (SkBlendMode::kSrcOver != mode) {
         return nullptr;
     }
-    GrColor blendConstant;
-    if (!color.isConstant(&blendConstant)) {
+    SkPMColor4f blendConstantPM;
+    if (!color.isConstant(&blendConstantPM)) {
         return nullptr;
     }
-    blendConstant = GrUnpremulColor(blendConstant);
-    uint8_t alpha = GrColorUnpackA(blendConstant);
-    blendConstant |= (0xff << GrColor_SHIFT_A);
-    return sk_sp<GrXferProcessor>(new PDLCDXferProcessor(blendConstant, alpha));
+    SkColor4f blendConstantUPM = blendConstantPM.unpremul();
+    float alpha = blendConstantUPM.fA;
+    blendConstantPM = { blendConstantUPM.fR, blendConstantUPM.fG, blendConstantUPM.fG, 1 };
+    return sk_sp<GrXferProcessor>(new PDLCDXferProcessor(blendConstantPM, alpha));
 }
 
 PDLCDXferProcessor::~PDLCDXferProcessor() {