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 5ce0657..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);