Made isEqual in GrFragmentProcessor recursive

Added comment about how computeInvariantOutput() is non-recursive in GrFragmentProcessor

Made isEqual() recursive in GrFragmentProcessor

BUG=skia:4182

Review URL: https://codereview.chromium.org/1287343005
diff --git a/include/gpu/GrFragmentProcessor.h b/include/gpu/GrFragmentProcessor.h
index 4b2f96d..1b8a818 100644
--- a/include/gpu/GrFragmentProcessor.h
+++ b/include/gpu/GrFragmentProcessor.h
@@ -74,20 +74,7 @@
 
         A return value of true from isEqual() should not be used to test whether the processor would
         generate the same shader code. To test for identical code generation use getGLProcessorKey*/
-    bool isEqual(const GrFragmentProcessor& that, bool ignoreCoordTransforms) const {
-        if (this->classID() != that.classID() ||
-            !this->hasSameTextureAccesses(that)) {
-            return false;
-        }
-        if (ignoreCoordTransforms) {
-            if (this->numTransforms() != that.numTransforms()) {
-                return false;
-            }
-        } else if (!this->hasSameTransforms(that)) {
-            return false;
-        }
-        return this->onIsEqual(that);
-    }
+    bool isEqual(const GrFragmentProcessor& that, bool ignoreCoordTransforms) const;
 
     /**
      * This function is used to perform optimizations. When called the invarientOuput param
@@ -131,6 +118,9 @@
 
     /**
      * Subclass implements this to support getConstantColorComponents(...).
+     *
+     * Note: it's up to the subclass implementation to do any recursive call to compute the child
+     * procs' output invariants; computeInvariantOutput will not be recursive.
      */
     virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const = 0;