Perform coverage blend with the dst in the shader when using a dst-reading xfermode.
Review URL: https://codereview.chromium.org/14233006

git-svn-id: http://skia.googlecode.com/svn/trunk@8762 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 0df29aa..d85d8a5 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -54,12 +54,6 @@
 
     fDiscardIfZeroCoverage = random->nextBool();
 
-    if (gpu->caps()->dualSourceBlendingSupport()) {
-        fDualSrcOutput = random->nextULessThan(kDualSrcOutputCnt);
-    } else {
-        fDualSrcOutput = kNone_DualSrcOutput;
-    }
-
     bool useLocalCoords = random->nextBool() && currAttribIndex < GrDrawState::kMaxVertexAttribCnt;
     fLocalCoordAttributeIndex = useLocalCoords ? currAttribIndex++ : -1;
 
@@ -78,6 +72,17 @@
     if (dstRead) {
         this->fDstRead = GrGLShaderBuilder::KeyForDstRead(dstTexture, gpu->glCaps());
     }
+
+    CoverageOutput coverageOutput;
+    bool illegalCoverageOutput;
+    do {
+        coverageOutput = static_cast<CoverageOutput>(random->nextULessThan(kCoverageOutputCnt));
+        illegalCoverageOutput = (!gpu->caps()->dualSourceBlendingSupport() &&
+                                 CoverageOutputUsesSecondaryOutput(coverageOutput)) ||
+                                !dstRead && kCombineWithDst_CoverageOutput == coverageOutput;
+    } while (illegalCoverageOutput);
+
+    fCoverageOutput = coverageOutput;
 }
 
 bool GrGpuGL::programUnitTest(int maxStages) {