Attempt to reland 3054



git-svn-id: http://skia.googlecode.com/svn/trunk@3056 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index be6bd0a..fa266d1 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -885,8 +885,10 @@
 
     // When coeffs are (0,1) there is no reason to draw at all, unless
     // stenciling is enabled. Having color writes disabled is effectively
-    // (0,1).
-    if ((kZero_BlendCoeff == *srcCoeff && dstCoeffIsOne)) {
+    // (0,1). The same applies when coverage is known to be 0.
+    if ((kZero_BlendCoeff == *srcCoeff && dstCoeffIsOne) ||
+        (!(layout & kCoverage_VertexLayoutBit) && 
+         0 == drawState.getCoverage())) {
         if (drawState.getStencil().doesWrite()) {
             return kDisableBlend_BlendOptFlag |
                    kEmitTransBlack_BlendOptFlag;
@@ -895,8 +897,10 @@
         }
     }
 
-    // check for coverage due to edge aa or coverage texture stage
+    // check for coverage due to constant coverage, per-vertex coverage,
+    // edge aa or coverage texture stage
     bool hasCoverage = forceCoverage ||
+                       0xffffffff != drawState.getCoverage() || 
                        drawState.getNumAAEdges() > 0 ||
                        (layout & kCoverage_VertexLayoutBit) ||
                        (layout & kEdge_VertexLayoutBit);