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: {