float components in xfermodes

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1623483002

TBR=mtklein

Review URL: https://codereview.chromium.org/1634273002
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index b327039..d2559f5 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -170,7 +170,7 @@
     void blitRect(int x, int y, int width, int height) override;
     void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
     void blitMask(const SkMask&, const SkIRect&) override;
-
+    
 private:
     SkXfermode*         fXfermode;
     SkPMColor*          fBuffer;
@@ -178,13 +178,37 @@
     SkBlitRow::Proc32   fProc32Blend;
     bool                fShadeDirectlyIntoDevice;
     bool                fConstInY;
-
+    
     // illegal
     SkARGB32_Shader_Blitter& operator=(const SkARGB32_Shader_Blitter&);
-
+    
     typedef SkShaderBlitter INHERITED;
 };
 
+class SkARGB32_Shader4f_Blitter : public SkARGB32_Shader_Blitter {
+public:
+    SkARGB32_Shader4f_Blitter(const SkPixmap& device, const SkPaint& paint,
+                              SkShader::Context* shaderContext);
+    virtual ~SkARGB32_Shader4f_Blitter();
+    void blitH(int x, int y, int width) override;
+    void blitV(int x, int y, int height, SkAlpha alpha) override;
+    void blitRect(int x, int y, int width, int height) override;
+    void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
+    void blitMask(const SkMask&, const SkIRect&) override;
+    
+private:
+    SkXfermode::PM4fState   fState;
+    SkXfermode::PM4fProc1   fProc1;
+    SkXfermode::PM4fProcN   fProcN;
+    SkPM4f*                 fBuffer;
+    bool                    fConstInY;
+    
+    // illegal
+    SkARGB32_Shader4f_Blitter& operator=(const SkARGB32_Shader4f_Blitter&);
+    
+    typedef SkARGB32_Shader_Blitter INHERITED;
+};
+
 ///////////////////////////////////////////////////////////////////////////////
 
 /*  These return the correct subclass of blitter for their device config.