Check XpFactory equality in DrawState

BUG=skia:

Review URL: https://codereview.chromium.org/767873006
diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
index db70bfa..8c2d75f 100644
--- a/src/gpu/GrDrawState.cpp
+++ b/src/gpu/GrDrawState.cpp
@@ -51,6 +51,10 @@
         return false;
     }
 
+    if (!this->getXPFactory()->isEqual(*that.getXPFactory())) {
+        return false;
+    }
+
     for (int i = 0; i < this->numColorStages(); i++) {
         if (!GrFragmentStage::AreCompatible(this->getColorStage(i), that.getColorStage(i),
                                              explicitLocalCoords)) {
diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp
index 810c751..96dd9ea 100644
--- a/src/gpu/GrProcessor.cpp
+++ b/src/gpu/GrProcessor.cpp
@@ -11,6 +11,7 @@
 #include "GrGeometryData.h"
 #include "GrInvariantOutput.h"
 #include "GrMemoryPool.h"
+#include "GrXferProcessor.h"
 #include "SkTLS.h"
 
 #if SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
@@ -179,3 +180,10 @@
 void GrGeometryData::operator delete(void* target) {
     GrProcessor_Globals::GetTLS()->release(target);
 }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Initial static variable from GrXPFactory
+int32_t GrXPFactory::gCurrXPFClassID =
+        GrXPFactory::kIllegalXPFClassID;
+
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 04a7b1f..55e0c93 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -65,6 +65,11 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
+GrPorterDuffXPFactory::GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst)
+    : fSrc(src), fDst(dst) {
+    this->initClassID<GrPorterDuffXPFactory>();
+}
+
 GrXPFactory* GrPorterDuffXPFactory::Create(SkXfermode::Mode mode) {
     switch (mode) {
         case SkXfermode::kClear_Mode: {