added support for PLS path rendering

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

Committed: https://skia.googlesource.com/skia/+/7df3f5e127f8016d17b637cc48a6a4718f1a6822

Review URL: https://codereview.chromium.org/1541903002
diff --git a/src/gpu/GrPrimitiveProcessor.h b/src/gpu/GrPrimitiveProcessor.h
index 467200a..c1e946d 100644
--- a/src/gpu/GrPrimitiveProcessor.h
+++ b/src/gpu/GrPrimitiveProcessor.h
@@ -47,6 +47,16 @@
 
 struct GrInitInvariantOutput;
 
+// Describes the state of pixel local storage with respect to the current draw. 
+enum GrPixelLocalStorageState {
+    // The draw is actively updating PLS.
+    kDraw_GrPixelLocalStorageState,
+    // The draw is a "finish" operation which is reading from PLS and writing color.
+    kFinish_GrPixelLocalStorageState,
+    // The draw does not use PLS.
+    kDisabled_GrPixelLocalStorageState
+};
+
 /*
  * This class allows the GrPipeline to communicate information about the pipeline to a
  * GrBatch which should be forwarded to the GrPrimitiveProcessor(s) created by the batch.
@@ -199,7 +209,7 @@
         the object. */
     virtual GrGLSLPrimitiveProcessor* createGLSLInstance(const GrGLSLCaps& caps) const = 0;
 
-    bool isPathRendering() const { return fIsPathRendering; }
+    virtual bool isPathRendering() const { return false; }
 
     /**
      * No Local Coord Transformation is needed in the shader, instead transformed local coords will
@@ -207,11 +217,19 @@
      */
     virtual bool hasTransformedLocalCoords() const = 0;
 
+    virtual GrPixelLocalStorageState getPixelLocalStorageState() const { 
+        return kDisabled_GrPixelLocalStorageState;
+    }
+
+    /**
+     * If non-null, overrides the dest color returned by GrGLSLFragmentShaderBuilder::dstColor().
+     */
+    virtual const char* getDestColorOverride() const { return nullptr; }
+    
 protected:
-    GrPrimitiveProcessor(bool isPathRendering)
+    GrPrimitiveProcessor()
         : fNumAttribs(0)
-        , fVertexStride(0)
-        , fIsPathRendering(isPathRendering) {}
+        , fVertexStride(0) {}
 
     Attribute fAttribs[kMaxVertexAttribs];
     int fNumAttribs;
@@ -221,8 +239,6 @@
     void notifyRefCntIsZero() const final {};
     virtual bool hasExplicitLocalCoords() const = 0;
 
-    bool fIsPathRendering;
-
     typedef GrProcessor INHERITED;
 };