Revert of removing equality / compute invariant loops from GrGeometryProcessors (patchset #2 id:20001 of https://codereview.chromium.org/1111603004/)

Reason for revert:
breaks gl programs

Original issue's description:
> removing equality / compute invariant loops from GrGeometryProcessors
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/ef292a0901205b9785a30daae2c036aa34a970ca

TBR=bsalomon@google.com,joshualitt@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/1110993002
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index 15747cf..7cce1df 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -118,8 +118,8 @@
 
 GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture,
                                          const GrTextureParams& params, GrMaskFormat format,
-                                         const SkMatrix& localMatrix)
-    : INHERITED(color, SkMatrix::I(), localMatrix)
+                                         bool opaqueVertexColors, const SkMatrix& localMatrix)
+    : INHERITED(color, SkMatrix::I(), localMatrix, opaqueVertexColors)
     , fTextureAccess(texture, params)
     , fInColor(NULL)
     , fMaskFormat(format) {
@@ -129,12 +129,40 @@
     bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat;
     if (hasVertexColor) {
         fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexAttribType));
+        this->setHasVertexColor();
     }
     fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
                                                         kVec2s_GrVertexAttribType));
     this->addTextureAccess(&fTextureAccess);
 }
 
+bool GrBitmapTextGeoProc::onIsEqual(const GrGeometryProcessor& other) const {
+    const GrBitmapTextGeoProc& gp = other.cast<GrBitmapTextGeoProc>();
+    return SkToBool(this->inColor()) == SkToBool(gp.inColor());
+}
+
+void GrBitmapTextGeoProc::onGetInvariantOutputColor(GrInitInvariantOutput* out) const {
+    if (kARGB_GrMaskFormat == fMaskFormat) {
+        out->setUnknownFourComponents();
+    }
+}
+
+void GrBitmapTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const {
+    if (kARGB_GrMaskFormat != fMaskFormat) {
+        if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) {
+            out->setUnknownSingleComponent();
+        } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) {
+            out->setUnknownOpaqueFourComponents();
+            out->setUsingLCDCoverage();
+        } else {
+            out->setUnknownFourComponents();
+            out->setUsingLCDCoverage();
+        }
+    } else {
+        out->setKnownSingleComponent(0xff);
+    }
+}
+
 void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
                                             const GrGLSLCaps& caps,
                                             GrProcessorKeyBuilder* b) const {
@@ -154,6 +182,17 @@
     local->fUsesLocalCoords = init.fUsesLocalCoords;
 }
 
+bool GrBitmapTextGeoProc::onCanMakeEqual(const GrBatchTracker& m,
+                                         const GrGeometryProcessor& that,
+                                         const GrBatchTracker& t) const {
+    const BitmapTextBatchTracker& mine = m.cast<BitmapTextBatchTracker>();
+    const BitmapTextBatchTracker& theirs = t.cast<BitmapTextBatchTracker>();
+    return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
+                                   that, theirs.fUsesLocalCoords) &&
+           CanCombineOutput(mine.fInputColorType, mine.fColor,
+                            theirs.fInputColorType, theirs.fColor);
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc);
@@ -192,5 +231,6 @@
     }
 
     return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx], params,
-                                       format, GrProcessorUnitTest::TestMatrix(random));
+                                       format, random->nextBool(),
+                                       GrProcessorUnitTest::TestMatrix(random));
 }