GrFP can express distance vector field req.,  program builder declares variable for it

This update allows fragment processors to require a field of vectors to the nearest edge. This requirement propagates:

- from child FPs to their parent
- from parent FPs to the GrPaint
- from GrPaint through the PipelineBuilder into GrPipeline
- acessed from GrPipeline by GrGLSLProgramBuilder

GrGLSL generates a variable for the distance vector and passes it down to the GeometryProcessor->emitCode() method.

This CL's base is the CL for adding the BevelNormalSource API: https://codereview.chromium.org/2080993002

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2114993002

Committed: https://skia.googlesource.com/skia/+/4ef6dfa7089c092c67b0d5ec34e89c1e319af196
Review-Url: https://codereview.chromium.org/2114993002
diff --git a/include/gpu/GrFragmentProcessor.h b/include/gpu/GrFragmentProcessor.h
index 4b56fbf..ffbf576 100644
--- a/include/gpu/GrFragmentProcessor.h
+++ b/include/gpu/GrFragmentProcessor.h
@@ -65,6 +65,7 @@
 
     GrFragmentProcessor()
         : INHERITED()
+        , fUsesDistanceVectorField(false)
         , fUsesLocalCoords(false)
         , fNumTexturesExclChildren(0)
         , fNumBuffersExclChildren(0)
@@ -110,6 +111,9 @@
     /** Do any of the coordtransforms for this processor require local coords? */
     bool usesLocalCoords() const { return fUsesLocalCoords; }
 
+    /** Does this FP need a vector to the nearest edge? */
+    bool usesDistanceVectorField() const { return fUsesDistanceVectorField; }
+
     /** Returns true if this and other processor conservatively draw identically. It can only return
         true when the two processor are of the same subclass (i.e. they return the same object from
         from getFactory()).
@@ -173,6 +177,11 @@
      */
     virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0;
 
+    /* Sub-classes should set this to true in their constructors if they need access to a distance
+     * vector field to the nearest edge
+     */
+    bool fUsesDistanceVectorField;
+
 private:
     void notifyRefCntIsZero() const final;