From 95f5194abce19e8ed875f3495fd16c79a9b931b4 Mon Sep 17 00:00:00 2001 From: joshualitt Date: Tue, 28 Oct 2014 07:54:54 -0700 Subject: Working patch to remove constant attributes. This may cause some gm mismatches, I will rebaseline tonight. BUG=skia: Committed: https://skia.googlesource.com/skia/+/84c94c0dfd1e12e97d8a835882dda575f36e41d2 Review URL: https://codereview.chromium.org/678073005 --- src/gpu/gl/GrGLProgram.cpp | 114 ++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 73 deletions(-) (limited to 'src/gpu/gl/GrGLProgram.cpp') diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 2d9b569333..bfa5f3cbc1 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -129,13 +129,12 @@ void GrGLProgram::bindTextures(const GrGLInstalledProc* ip, const GrProcessor& p void GrGLProgram::setData(const GrOptDrawState& optState, GrGpu::DrawType drawType, - const GrDeviceCoordTexture* dstCopy, - SharedGLState* sharedState) { + const GrDeviceCoordTexture* dstCopy) { GrColor color = optState.getColor(); GrColor coverage = optState.getCoverageColor(); - this->setColor(optState, color, sharedState); - this->setCoverage(optState, coverage, sharedState); + this->setColor(optState, color); + this->setCoverage(optState, coverage); this->setMatrixAndRenderTargetHeight(drawType, optState); if (dstCopy) { @@ -201,80 +200,49 @@ void GrGLProgram::didSetData(GrGpu::DrawType drawType) { SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); } -void GrGLProgram::setColor(const GrOptDrawState& optState, - GrColor color, - SharedGLState* sharedState) { +void GrGLProgram::setColor(const GrOptDrawState& optState, GrColor color) { const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader(); - if (!optState.hasColorVertexAttribute()) { - switch (header.fColorInput) { - case GrGLProgramDesc::kAttribute_ColorInput: - SkASSERT(-1 != header.fColorAttributeIndex); - if (sharedState->fConstAttribColor != color || - sharedState->fConstAttribColorIndex != header.fColorAttributeIndex) { - // OpenGL ES only supports the float varieties of glVertexAttrib - GrGLfloat c[4]; - GrColorToRGBAFloat(color, c); - GL_CALL(VertexAttrib4fv(header.fColorAttributeIndex, c)); - sharedState->fConstAttribColor = color; - sharedState->fConstAttribColorIndex = header.fColorAttributeIndex; - } - break; - case GrGLProgramDesc::kUniform_ColorInput: - if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid()) { - // OpenGL ES doesn't support unsigned byte varieties of glUniform - GrGLfloat c[4]; - GrColorToRGBAFloat(color, c); - fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1, c); - fColor = color; - } - sharedState->fConstAttribColorIndex = -1; - break; - case GrGLProgramDesc::kAllOnes_ColorInput: - sharedState->fConstAttribColorIndex = -1; - break; - default: - SkFAIL("Unexpected color type."); - } - } else { - sharedState->fConstAttribColorIndex = -1; + switch (header.fColorInput) { + case GrGLProgramDesc::kAttribute_ColorInput: + // Attribute case is handled in GrGpuGL::setupGeometry + break; + case GrGLProgramDesc::kUniform_ColorInput: + if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid()) { + // OpenGL ES doesn't support unsigned byte varieties of glUniform + GrGLfloat c[4]; + GrColorToRGBAFloat(color, c); + fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1, c); + fColor = color; + } + break; + case GrGLProgramDesc::kAllOnes_ColorInput: + // Handled by shader creation + break; + default: + SkFAIL("Unexpected color type."); } } -void GrGLProgram::setCoverage(const GrOptDrawState& optState, - GrColor coverage, - SharedGLState* sharedState) { +void GrGLProgram::setCoverage(const GrOptDrawState& optState, GrColor coverage) { const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader(); - if (!optState.hasCoverageVertexAttribute()) { - switch (header.fCoverageInput) { - case GrGLProgramDesc::kAttribute_ColorInput: - if (sharedState->fConstAttribCoverage != coverage || - sharedState->fConstAttribCoverageIndex != header.fCoverageAttributeIndex) { - // OpenGL ES only supports the float varieties of glVertexAttrib - GrGLfloat c[4]; - GrColorToRGBAFloat(coverage, c); - GL_CALL(VertexAttrib4fv(header.fCoverageAttributeIndex, c)); - sharedState->fConstAttribCoverage = coverage; - sharedState->fConstAttribCoverageIndex = header.fCoverageAttributeIndex; - } - break; - case GrGLProgramDesc::kUniform_ColorInput: - if (fCoverage != coverage) { - // OpenGL ES doesn't support unsigned byte varieties of glUniform - GrGLfloat c[4]; - GrColorToRGBAFloat(coverage, c); - fProgramDataManager.set4fv(fBuiltinUniformHandles.fCoverageUni, 1, c); - fCoverage = coverage; - } - sharedState->fConstAttribCoverageIndex = -1; - break; - case GrGLProgramDesc::kAllOnes_ColorInput: - sharedState->fConstAttribCoverageIndex = -1; - break; - default: - SkFAIL("Unexpected coverage type."); - } - } else { - sharedState->fConstAttribCoverageIndex = -1; + switch (header.fCoverageInput) { + case GrGLProgramDesc::kAttribute_ColorInput: + // Attribute case is handled in GrGpuGL::setupGeometry + break; + case GrGLProgramDesc::kUniform_ColorInput: + if (fCoverage != coverage) { + // OpenGL ES doesn't support unsigned byte varieties of glUniform + GrGLfloat c[4]; + GrColorToRGBAFloat(coverage, c); + fProgramDataManager.set4fv(fBuiltinUniformHandles.fCoverageUni, 1, c); + fCoverage = coverage; + } + break; + case GrGLProgramDesc::kAllOnes_ColorInput: + // Handled by shader creation + break; + default: + SkFAIL("Unexpected coverage type."); } } -- cgit v1.2.3