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;
                 }
             }