Only discard for XP dstCopies if we have a coverage value.
TBR=bsalomon@google.com
BUG=skia:
Review URL: https://codereview.chromium.org/1125283005
diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp
index 243b9fe..bc79b2d 100644
--- a/src/gpu/GrXferProcessor.cpp
+++ b/src/gpu/GrXferProcessor.cpp
@@ -8,11 +8,13 @@
#include "GrXferProcessor.h"
#include "gl/GrGLCaps.h"
-GrXferProcessor::GrXferProcessor() : fWillReadDstColor(false), fDstCopyTextureOffset() {
+GrXferProcessor::GrXferProcessor()
+ : fWillReadDstColor(false), fReadsCoverage(true), fDstCopyTextureOffset() {
}
GrXferProcessor::GrXferProcessor(const GrDeviceCoordTexture* dstCopy, bool willReadDstColor)
: fWillReadDstColor(willReadDstColor)
+ , fReadsCoverage(true)
, fDstCopyTextureOffset() {
if (dstCopy && dstCopy->texture()) {
fDstCopy.reset(dstCopy->texture());
@@ -22,6 +24,23 @@
}
}
+GrXferProcessor::OptFlags GrXferProcessor::getOptimizations(const GrProcOptInfo& colorPOI,
+ const GrProcOptInfo& coveragePOI,
+ bool doesStencilWrite,
+ GrColor* overrideColor,
+ const GrDrawTargetCaps& caps) {
+ GrXferProcessor::OptFlags flags = this->onGetOptimizations(colorPOI,
+ coveragePOI,
+ doesStencilWrite,
+ overrideColor,
+ caps);
+
+ if (flags & GrXferProcessor::kIgnoreCoverage_OptFlag) {
+ fReadsCoverage = false;
+ }
+ return flags;
+}
+
void GrXferProcessor::getGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) const {
uint32_t key = this->willReadDstColor() ? 0x1 : 0x0;
if (this->getDstCopyTexture() &&