Remove the skip-draw xp optimization

This seems like extra complexity for a impractical case. Also, if this is important a lot more work could be saved by catching this upstack (e.g. SkCanvas or SkPaintToGrPaint).

Change-Id: Ib47be9f3cdc8ce9e5b12d9e9eac5266f04c337a9
Reviewed-on: https://skia-review.googlesource.com/8949
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index 6de106c..51b6666 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -78,14 +78,6 @@
             *args.fAnalysis, args.fUserStencil->doesWrite(args.fAppliedClip->hasStencilClip()),
             &overrideColor, *args.fCaps);
 
-    // When path rendering the stencil settings are not always set on the GrPipelineBuilder
-    // so we must check the draw type. In cases where we will skip drawing we simply return a
-    // null GrPipeline.
-    if (GrXferProcessor::kSkipDraw_OptFlag & optFlags) {
-        pipeline->~GrPipeline();
-        return nullptr;
-    }
-
     // No need to have an override color if it isn't even going to be used.
     if (SkToBool(GrXferProcessor::kIgnoreColor_OptFlag & optFlags)) {
         overrideColor = GrColor_ILLEGAL;
diff --git a/src/gpu/GrXferProcessor.h b/src/gpu/GrXferProcessor.h
index 5ce06571a..e837ed0 100644
--- a/src/gpu/GrXferProcessor.h
+++ b/src/gpu/GrXferProcessor.h
@@ -107,21 +107,17 @@
      */
     enum OptFlags {
         /**
-         * The draw can be skipped completely.
-         */
-        kSkipDraw_OptFlag = 0x1,
-        /**
          * GrXferProcessor will ignore color, thus no need to provide
          */
-        kIgnoreColor_OptFlag = 0x2,
+        kIgnoreColor_OptFlag = 0x1,
         /**
          * Clear color stages and override input color to that returned by getOptimizations
          */
-        kOverrideColor_OptFlag = 0x4,
+        kOverrideColor_OptFlag = 0x2,
         /**
          * Can tweak alpha for coverage. Currently this flag should only be used by a GrDrawOp.
          */
-        kCanTweakAlphaForCoverage_OptFlag = 0x8,
+        kCanTweakAlphaForCoverage_OptFlag = 0x4,
     };
 
     static const OptFlags kNone_OptFlags = (OptFlags)0;
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 4803c2d..4813c9d 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -456,9 +456,6 @@
         const GrCaps& caps) const {
     GrXferProcessor::OptFlags optFlags = GrXferProcessor::kNone_OptFlags;
     if (!fBlendFormula.modifiesDst()) {
-        if (!doesStencilWrite) {
-            optFlags |= GrXferProcessor::kSkipDraw_OptFlag;
-        }
         optFlags |= (GrXferProcessor::kIgnoreColor_OptFlag |
                      GrXferProcessor::kCanTweakAlphaForCoverage_OptFlag);
     } else {
diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp
index d87e252..bfbd97e 100644
--- a/tests/GrPorterDuffTest.cpp
+++ b/tests/GrPorterDuffTest.cpp
@@ -58,7 +58,6 @@
 
 enum {
     kNone_OptFlags                    = GrXferProcessor::kNone_OptFlags,
-    kSkipDraw_OptFlag                 = GrXferProcessor::kSkipDraw_OptFlag,
     kIgnoreColor_OptFlag              = GrXferProcessor::kIgnoreColor_OptFlag,
     kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCoverage_OptFlag
 };
@@ -127,8 +126,7 @@
                 break;
             case SkBlendMode::kDst:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -297,8 +295,7 @@
                 break;
             case SkBlendMode::kDst:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -468,8 +465,7 @@
                 break;
             case SkBlendMode::kDst:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -640,8 +636,7 @@
                 break;
             case SkBlendMode::kDst:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -682,8 +677,7 @@
                 break;
             case SkBlendMode::kDstIn:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -814,8 +808,7 @@
                 break;
             case SkBlendMode::kDst:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
@@ -856,8 +849,7 @@
                 break;
             case SkBlendMode::kDstIn:
                 TEST_ASSERT(xpi.fReadsDst);
-                TEST_ASSERT((kSkipDraw_OptFlag |
-                             kIgnoreColor_OptFlag |
+                TEST_ASSERT((kIgnoreColor_OptFlag |
                              kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags);
                 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
                 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);