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,