Update Porter Duff analysis to match LCD logic.
Bug: skia:
Change-Id: Ib222c37f7ebb307752806829742a3b6278dbae3d
Reviewed-on: https://skia-review.googlesource.com/17410
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index d3ef717..269262b 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -807,10 +807,11 @@
if (GrProcessorAnalysisCoverage::kLCD == coverage) {
// Check for special case of srcover with a known color which can be done using the
// blend constant.
- if (SkBlendMode::kSrcOver == mode && color.isConstant() && color.isOpaque()) {
+ if (SkBlendMode::kSrcOver == mode && color.isConstant() && color.isOpaque() &&
+ !caps.shaderCaps()->dstReadInShaderSupport()) {
props |= AnalysisProperties::kIgnoresInputColor;
} else {
- if (get_lcd_blend_formula(mode).hasSecondaryOutput()) {
+ if (get_lcd_blend_formula(mode).hasSecondaryOutput() || !color.isOpaque()) {
props |= AnalysisProperties::kReadsDstInShader;
}
}