Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Unified Diff: src/gpu/gl/GrGLProgram.cpp

Issue 306663003: Move all code generation from GrGLProgram to GrGLShaderBuilder (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: line wraps Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLProgram.h ('k') | src/gpu/gl/GrGLShaderBuilder.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLProgram.cpp
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index efd6e4606b4cf113e99c9221f61fc5e9f7048bbf..c63914893d2950a0be069a25f1526d24efc0cc84 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -47,19 +47,18 @@ GrGLProgram::GrGLProgram(GrGpuGL* gpu,
fColor = GrColor_ILLEGAL;
robertphillips 2014/05/28 20:08:46 Does it make sense to have a GenProgramOutput in t
bsalomon 2014/05/28 20:09:50 Maybe... I'm working on the next cleanup CL now.
- if (fDesc.getHeader().fHasVertexCode ||
- !fGpu->shouldUseFixedFunctionTexturing()) {
- GrGLFullShaderBuilder fullBuilder(fGpu, fUniformManager, fDesc);
- if (this->genProgram(&fullBuilder, colorStages, coverageStages)) {
- fUniformHandles.fViewMatrixUni = fullBuilder.getViewMatrixUniform();
- fUniformHandles.fRTAdjustmentUni = fullBuilder.getRTAdjustmentVecUniform();
- fHasVertexShader = true;
- }
- } else {
- GrGLFragmentOnlyShaderBuilder fragmentOnlyBuilder(fGpu, fUniformManager, fDesc);
- if (this->genProgram(&fragmentOnlyBuilder, colorStages, coverageStages)) {
- fNumTexCoordSets = fragmentOnlyBuilder.getNumTexCoordSets();
- }
+ GrGLShaderBuilder::GenProgramOutput output;
+
+ if (GrGLShaderBuilder::GenProgram(gpu, fUniformManager, desc, colorStages, coverageStages,
+ &output)) {
+ fProgramID = output.fProgramID;
+ fUniformHandles = output.fUniformHandles;
+ fColorEffects.reset(output.fColorEffects);
+ fCoverageEffects.reset(output.fCoverageEffects);
+ fHasVertexShader = output.fHasVS;
+ fNumTexCoordSets = output.fNumTexCoordSets;
+ fGpu = gpu;
+ this->initSamplerUniforms();
}
}
@@ -95,79 +94,6 @@ void GrGLProgram::overrideBlend(GrBlendCoeff* srcCoeff,
}
}
-bool GrGLProgram::genProgram(GrGLShaderBuilder* builder,
- const GrEffectStage* colorStages[],
- const GrEffectStage* coverageStages[]) {
- SkASSERT(0 == fProgramID);
-
- const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader();
-
- // incoming color to current stage being processed.
- GrGLSLExpr4 inColor = builder->getInputColor();
-
- fColorEffects.reset(
- builder->createAndEmitEffects(colorStages,
- fDesc.effectKeys(),
- fDesc.numColorEffects(),
- &inColor));
-
- ///////////////////////////////////////////////////////////////////////////
- // compute the partial coverage
- GrGLSLExpr4 inCoverage = builder->getInputCoverage();
-
- fCoverageEffects.reset(
- builder->createAndEmitEffects(coverageStages,
- fDesc.getEffectKeys() + fDesc.numColorEffects(),
- fDesc.numCoverageEffects(),
- &inCoverage));
-
- if (GrGLProgramDesc::CoverageOutputUsesSecondaryOutput(header.fCoverageOutput)) {
- const char* secondaryOutputName = builder->enableSecondaryOutput();
-
- // default coeff to ones for kCoverage_DualSrcOutput
- GrGLSLExpr4 coeff(1);
- if (GrGLProgramDesc::kSecondaryCoverageISA_CoverageOutput == header.fCoverageOutput) {
- // Get (1-A) into coeff
- coeff = GrGLSLExpr4::VectorCast(GrGLSLExpr1(1) - inColor.a());
- } else if (GrGLProgramDesc::kSecondaryCoverageISC_CoverageOutput == header.fCoverageOutput) {
- // Get (1-RGBA) into coeff
- coeff = GrGLSLExpr4(1) - inColor;
- }
- // Get coeff * coverage into modulate and then write that to the dual source output.
- builder->fsCodeAppendf("\t%s = %s;\n", secondaryOutputName, (coeff * inCoverage).c_str());
- }
-
- ///////////////////////////////////////////////////////////////////////////
- // combine color and coverage as frag color
-
- // Get "color * coverage" into fragColor
- GrGLSLExpr4 fragColor = inColor * inCoverage;
- // Now tack on "+(1-coverage)dst onto the frag color if we were asked to do so.
- if (GrGLProgramDesc::kCombineWithDst_CoverageOutput == header.fCoverageOutput) {
- GrGLSLExpr4 dstCoeff = GrGLSLExpr4(1) - inCoverage;
-
- GrGLSLExpr4 dstContribution = dstCoeff * GrGLSLExpr4(builder->dstColor());
-
- fragColor = fragColor + dstContribution;
- }
- builder->fsCodeAppendf("\t%s = %s;\n", builder->getColorOutputName(), fragColor.c_str());
-
- if (!builder->finish(&fProgramID)) {
- return false;
- }
-
- fUniformHandles.fRTHeightUni = builder->getRTHeightUniform();
- fUniformHandles.fDstCopyTopLeftUni = builder->getDstCopyTopLeftUniform();
- fUniformHandles.fDstCopyScaleUni = builder->getDstCopyScaleUniform();
- fUniformHandles.fColorUni = builder->getColorUniform();
- fUniformHandles.fCoverageUni = builder->getCoverageUniform();
- fUniformHandles.fDstCopySamplerUni = builder->getDstCopySamplerUniform();
- // This must be called after we set fDstCopySamplerUni above.
- this->initSamplerUniforms();
-
- return true;
-}
-
void GrGLProgram::initSamplerUniforms() {
GL_CALL(UseProgram(fProgramID));
GrGLint texUnitIdx = 0;
« no previous file with comments | « src/gpu/gl/GrGLProgram.h ('k') | src/gpu/gl/GrGLShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698