Revert r3054 for failing tests



git-svn-id: http://skia.googlecode.com/svn/trunk@3055 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrGLProgram.cpp b/src/gpu/GrGLProgram.cpp
index 7acdd29..d159f5a 100644
--- a/src/gpu/GrGLProgram.cpp
+++ b/src/gpu/GrGLProgram.cpp
@@ -92,7 +92,6 @@
 #define COV_ATTR_NAME "aCoverage"
 #define EDGE_ATTR_NAME "aEdge"
 #define COL_UNI_NAME "uColor"
-#define COV_UNI_NAME "uCoverage"
 #define EDGES_UNI_NAME "uEdges"
 #define COL_FILTER_UNI_NAME "uColorFilter"
 #define COL_MATRIX_UNI_NAME "uColorMatrix"
@@ -612,37 +611,21 @@
     }
 }
 
-void genAttributeCoverage(ShaderCodeSegments* segments,
-                          GrStringBuilder* inOutCoverage) {
-    segments->fVSAttrs.push_back().set(GrGLShaderVar::kVec4f_Type,
+void genPerVertexCoverage(ShaderCodeSegments* segments,
+                          GrStringBuilder* inCoverage) {
+    segments->fVSAttrs.push_back().set(GrGLShaderVar::kFloat_Type,
                                        GrGLShaderVar::kAttribute_TypeModifier,
                                        COV_ATTR_NAME);
     const char *vsName, *fsName;
-    append_varying(GrGLShaderVar::kVec4f_Type, "Coverage", 
+    append_varying(GrGLShaderVar::kFloat_Type, "Coverage", 
                    segments, &vsName, &fsName);
     segments->fVSCode.appendf("\t%s = " COV_ATTR_NAME ";\n", vsName);
-    if (inOutCoverage->size()) {
-        segments->fFSCode.appendf("\tvec4 attrCoverage = %s * %s;\n",
-                                  fsName, inOutCoverage->c_str());
-        *inOutCoverage = "attrCoverage";
+    if (inCoverage->size()) {
+        segments->fFSCode.appendf("\tfloat edgeAndAttrCov = %s * %s;\n",
+                                  fsName, inCoverage->c_str());
+        *inCoverage = "edgeAndAttrCov";
     } else {
-        *inOutCoverage = fsName;
-    }
-}
-    
-void genUniformCoverage(ShaderCodeSegments* segments,
-                        GrGLProgram::CachedData* programData,
-                        GrStringBuilder* inOutCoverage) {
-    segments->fFSUnis.push_back().set(GrGLShaderVar::kVec4f_Type,
-                                      GrGLShaderVar::kUniform_TypeModifier,
-                                      COV_UNI_NAME);
-    programData->fUniLocations.fCoverageUni = kUseUniform;
-    if (inOutCoverage->size()) {
-        segments->fFSCode.appendf("\tvec4 uniCoverage = %s * %s;\n",
-                                  COV_UNI_NAME, inOutCoverage->c_str());
-        *inOutCoverage = "uniCoverage";
-    } else {
-        *inOutCoverage = COV_UNI_NAME;
+        *inCoverage = fsName;
     }
 }
 
@@ -704,7 +687,6 @@
 #endif
 
     SkXfermode::Coeff colorCoeff, uniformCoeff;
-    bool applyColorMatrix = SkToBool(fProgramDesc.fColorMatrixEnabled);
     // The rest of transfer mode color filters have not been implemented
     if (fProgramDesc.fColorFilterXfermode < SkXfermode::kCoeffModesCnt) {
         GR_DEBUGCODE(bool success =)
@@ -717,13 +699,6 @@
         uniformCoeff = SkXfermode::kZero_Coeff;
     }
 
-    // no need to do the color filter / matrix at all if coverage is 0
-    if (ProgramDesc::kTransBlack_ColorInput == fProgramDesc.fCoverageInput) {
-        colorCoeff = SkXfermode::kZero_Coeff;
-        uniformCoeff = SkXfermode::kZero_Coeff;
-        applyColorMatrix = false;
-    }
-
     // If we know the final color is going to be all zeros then we can
     // simplify the color filter coeffecients. needComputedColor will then
     // come out false below.
@@ -857,7 +832,7 @@
     bool wroteFragColorZero = false;
     if (SkXfermode::kZero_Coeff == uniformCoeff &&
         SkXfermode::kZero_Coeff == colorCoeff &&
-        !applyColorMatrix) {
+        !fProgramDesc.fColorMatrixEnabled) {
         segments.fFSCode.appendf("\t%s = %s;\n",
                                  fsColorOutput,
                                  all_zeros_vec(4));
@@ -869,7 +844,7 @@
                        colorCoeff, color);
         inColor = "filteredColor";
     }
-    if (applyColorMatrix) {
+    if (fProgramDesc.fColorMatrixEnabled) {
         segments.fFSUnis.push_back().set(GrGLShaderVar::kMat44f_Type,
                                          GrGLShaderVar::kUniform_TypeModifier,
                                          COL_MATRIX_UNI_NAME);
@@ -897,20 +872,9 @@
         // get edge AA coverage and use it as inCoverage to first coverage stage
         this->genEdgeCoverage(gl, layout, programData, &inCoverage, &segments);
 
-        switch (fProgramDesc.fCoverageInput) {
-            case ProgramDesc::kSolidWhite_ColorInput:
-                // empty string implies solid white
-                break;
-            case ProgramDesc::kTransBlack_ColorInput:
-                GrCrash("We should have already written 0 as the frag output.");
-            case ProgramDesc::kAttribute_ColorInput:
-                genAttributeCoverage(&segments, &inCoverage);
-                break;
-            case ProgramDesc::kUniform_ColorInput:
-                genUniformCoverage(&segments, programData, &inCoverage);
-                break;
-            default:
-                GrCrash("Unexpected input coverage.");
+        // include explicit per-vertex coverage if we have it
+        if (GrDrawTarget::kCoverage_VertexLayoutBit & layout) {
+            genPerVertexCoverage(&segments, &inCoverage);
         }
 
         GrStringBuilder outCoverage;
@@ -1324,11 +1288,6 @@
         GR_GL_CALL_RET(gl, programData->fUniLocations.fColorMatrixVecUni,
                        GetUniformLocation(progID, COL_MATRIX_VEC_UNI_NAME));
     }
-    if (kUseUniform == programData->fUniLocations.fCoverageUni) {
-        GR_GL_CALL_RET(gl, programData->fUniLocations.fCoverageUni,
-                       GetUniformLocation(progID, COV_UNI_NAME));
-        GrAssert(kUnusedUniform != programData->fUniLocations.fCoverageUni);
-    }
 
     if (kUseUniform == programData->fUniLocations.fEdgesUni) {
         GR_GL_CALL_RET(gl, programData->fUniLocations.fEdgesUni,