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

Side by Side Diff: src/gpu/gl/builders/GrGLProgramBuilder.cpp

Issue 777673003: move program descriptor generation to flush (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: more cleanup Created 6 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrGLProgramBuilder.h" 8 #include "GrGLProgramBuilder.h"
9 #include "gl/GrGLProgram.h" 9 #include "gl/GrGLProgram.h"
10 #include "gl/GrGLSLPrettyPrint.h" 10 #include "gl/GrGLSLPrettyPrint.h"
(...skipping 11 matching lines...) Expand all
22 #define GL_CALL_RET(R, X) GR_GL_CALL_RET(this->gpu()->glInterface(), R, X) 22 #define GL_CALL_RET(R, X) GR_GL_CALL_RET(this->gpu()->glInterface(), R, X)
23 23
24 // ES2 FS only guarantees mediump and lowp support 24 // ES2 FS only guarantees mediump and lowp support
25 static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar: :kMedium_Precision; 25 static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar: :kMedium_Precision;
26 26
27 ////////////////////////////////////////////////////////////////////////////// 27 //////////////////////////////////////////////////////////////////////////////
28 28
29 const int GrGLProgramBuilder::kVarsPerBlock = 8; 29 const int GrGLProgramBuilder::kVarsPerBlock = 8;
30 30
31 GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState, 31 GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState,
32 const GrProgramDesc& desc,
32 GrGpu::DrawType drawType, 33 GrGpu::DrawType drawType,
33 GrGpuGL* gpu) { 34 GrGpuGL* gpu) {
34 // create a builder. This will be handed off to effects so they can use it to add 35 // create a builder. This will be handed off to effects so they can use it to add
35 // uniforms, varyings, textures, etc 36 // uniforms, varyings, textures, etc
36 SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(optState, 37 SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(optState,
38 desc,
37 drawType, 39 drawType,
38 optState.hasG eometryProcessor(), 40 optState.hasG eometryProcessor(),
39 gpu)); 41 gpu));
40 42
41 GrGLProgramBuilder* pb = builder.get(); 43 GrGLProgramBuilder* pb = builder.get();
42 const GrGLProgramDescBuilder::GLKeyHeader& header = GrGLProgramDescBuilder:: GetHeader(pb->desc()); 44 const GrGLProgramDescBuilder::GLKeyHeader& header = GrGLProgramDescBuilder:: GetHeader(pb->desc());
43 45
44 // emit code to read the dst copy texture, if necessary 46 // emit code to read the dst copy texture, if necessary
45 if (GrGLFragmentShaderBuilder::kNoDstRead_DstReadKey != header.fDstReadKey 47 if (GrGLFragmentShaderBuilder::kNoDstRead_DstReadKey != header.fDstReadKey
46 && !gpu->glCaps().fbFetchSupport()) { 48 && !gpu->glCaps().fbFetchSupport()) {
(...skipping 19 matching lines...) Expand all
66 pb->fFS.enableSecondaryOutput(inputColor, inputCoverageVec4); 68 pb->fFS.enableSecondaryOutput(inputColor, inputCoverageVec4);
67 } 69 }
68 70
69 pb->fFS.combineColorAndCoverage(inputColor, inputCoverageVec4); 71 pb->fFS.combineColorAndCoverage(inputColor, inputCoverageVec4);
70 72
71 return pb->finalize(); 73 return pb->finalize();
72 } 74 }
73 75
74 GrGLProgramBuilder* 76 GrGLProgramBuilder*
75 GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState, 77 GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState,
78 const GrProgramDesc& desc,
76 GrGpu::DrawType drawType, 79 GrGpu::DrawType drawType,
77 bool hasGeometryProcessor, 80 bool hasGeometryProcessor,
78 GrGpuGL* gpu) { 81 GrGpuGL* gpu) {
79 const GrProgramDesc& desc = optState.programDesc();
80 if (GrGLProgramDescBuilder::GetHeader(desc).fUseNvpr) { 82 if (GrGLProgramDescBuilder::GetHeader(desc).fUseNvpr) {
81 SkASSERT(gpu->glCaps().pathRenderingSupport()); 83 SkASSERT(gpu->glCaps().pathRenderingSupport());
82 SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fColorInp ut); 84 SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fColorInp ut);
83 SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fCoverage Input); 85 SkASSERT(GrProgramDesc::kAttribute_ColorInput != desc.header().fCoverage Input);
84 SkASSERT(!hasGeometryProcessor); 86 SkASSERT(!hasGeometryProcessor);
85 if (gpu->glPathRendering()->texturingMode() == 87 if (gpu->glPathRendering()->texturingMode() ==
86 GrGLPathRendering::FixedFunction_TexturingMode) { 88 GrGLPathRendering::FixedFunction_TexturingMode) {
87 return SkNEW_ARGS(GrGLLegacyNvprProgramBuilder, (gpu, optState)); 89 return SkNEW_ARGS(GrGLLegacyNvprProgramBuilder, (gpu, optState, desc ));
88 } else { 90 } else {
89 return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, optState)); 91 return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, optState, desc));
90 } 92 }
91 } else { 93 } else {
92 return SkNEW_ARGS(GrGLProgramBuilder, (gpu, optState)); 94 return SkNEW_ARGS(GrGLProgramBuilder, (gpu, optState, desc));
93 } 95 }
94 } 96 }
95 97
96 ///////////////////////////////////////////////////////////////////////////// 98 /////////////////////////////////////////////////////////////////////////////
97 99
98 GrGLProgramBuilder::GrGLProgramBuilder(GrGpuGL* gpu, const GrOptDrawState& optSt ate) 100 GrGLProgramBuilder::GrGLProgramBuilder(GrGpuGL* gpu,
101 const GrOptDrawState& optState,
102 const GrProgramDesc& desc)
99 : fVS(this) 103 : fVS(this)
100 , fGS(this) 104 , fGS(this)
101 , fFS(this, optState.programDesc().header().fFragPosKey) 105 , fFS(this, desc.header().fFragPosKey)
102 , fOutOfStage(true) 106 , fOutOfStage(true)
103 , fStageIndex(-1) 107 , fStageIndex(-1)
104 , fGeometryProcessor(NULL) 108 , fGeometryProcessor(NULL)
105 , fOptState(optState) 109 , fOptState(optState)
106 , fDesc(optState.programDesc()) 110 , fDesc(desc)
107 , fGpu(gpu) 111 , fGpu(gpu)
108 , fUniforms(kVarsPerBlock) { 112 , fUniforms(kVarsPerBlock) {
109 } 113 }
110 114
111 void GrGLProgramBuilder::addVarying(const char* name, 115 void GrGLProgramBuilder::addVarying(const char* name,
112 GrGLVarying* varying, 116 GrGLVarying* varying,
113 GrGLShaderVar::Precision fsPrecision) { 117 GrGLShaderVar::Precision fsPrecision) {
114 SkASSERT(varying); 118 SkASSERT(varying);
115 if (varying->vsVarying()) { 119 if (varying->vsVarying()) {
116 fVS.addVarying(name, varying); 120 fVS.addVarying(name, varying);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fCoverageInput) { 231 } else if (GrProgramDesc::kAllOnes_ColorInput == header.fCoverageInput) {
228 *inputCoverage = GrGLSLExpr1(1); 232 *inputCoverage = GrGLSLExpr1(1);
229 } 233 }
230 } 234 }
231 235
232 void GrGLProgramBuilder::emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr 4* inputCoverage) { 236 void GrGLProgramBuilder::emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr 4* inputCoverage) {
233 if (fOptState.hasGeometryProcessor()) { 237 if (fOptState.hasGeometryProcessor()) {
234 fVS.setupUniformViewMatrix(); 238 fVS.setupUniformViewMatrix();
235 239
236 const GrProgramDesc::KeyHeader& header = this->header(); 240 const GrProgramDesc::KeyHeader& header = this->header();
237 if (header.fEmitsPointSize) { 241 fVS.codeAppend("gl_PointSize = 1.0;");
238 fVS.codeAppend("gl_PointSize = 1.0;");
239 }
240 242
241 // Setup position 243 // Setup position
242 // TODO it'd be possible to remove these from the vertexshader builder a nd have them 244 // TODO it'd be possible to remove these from the vertexshader builder a nd have them
243 // be outputs from the emit call. We don't do this because emitargs is constant. It would 245 // be outputs from the emit call. We don't do this because emitargs is constant. It would
244 // be easy to change this though 246 // be easy to change this though
245 fVS.codeAppendf("vec3 %s;", fVS.glPosition()); 247 fVS.codeAppendf("vec3 %s;", fVS.glPosition());
246 fVS.codeAppendf("vec2 %s;", fVS.positionCoords()); 248 fVS.codeAppendf("vec2 %s;", fVS.positionCoords());
247 fVS.codeAppendf("vec2 %s;", fVS.localCoords()); 249 fVS.codeAppendf("vec2 %s;", fVS.localCoords());
248 250
249 const GrGeometryProcessor& gp = *fOptState.getGeometryProcessor(); 251 const GrGeometryProcessor& gp = *fOptState.getGeometryProcessor();
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 } 556 }
555 557
556 //////////////////////////////////////////////////////////////////////////////// /////////////////// 558 //////////////////////////////////////////////////////////////////////////////// ///////////////////
557 559
558 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() { 560 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() {
559 int numProcs = fProcs.count(); 561 int numProcs = fProcs.count();
560 for (int e = 0; e < numProcs; ++e) { 562 for (int e = 0; e < numProcs; ++e) {
561 SkDELETE(fProcs[e]); 563 SkDELETE(fProcs[e]);
562 } 564 }
563 } 565 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698