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

Side by Side Diff: src/gpu/gl/GrGLShaderBuilder.cpp

Issue 306063002: move all code generation under genProgram() in GrGLShaderBuilder. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fix typo Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "gl/GrGLShaderBuilder.h" 8 #include "gl/GrGLShaderBuilder.h"
9 #include "gl/GrGLProgram.h" 9 #include "gl/GrGLProgram.h"
10 #include "gl/GrGLUniformHandle.h" 10 #include "gl/GrGLUniformHandle.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 *output = builder->getOutput(); 105 *output = builder->getOutput();
106 return true; 106 return true;
107 } 107 }
108 return false; 108 return false;
109 } 109 }
110 110
111 bool GrGLShaderBuilder::genProgram(const GrEffectStage* colorStages[], 111 bool GrGLShaderBuilder::genProgram(const GrEffectStage* colorStages[],
112 const GrEffectStage* coverageStages[]) { 112 const GrEffectStage* coverageStages[]) {
113 const GrGLProgramDesc::KeyHeader& header = this->desc().getHeader(); 113 const GrGLProgramDesc::KeyHeader& header = this->desc().getHeader();
114 114
115 // incoming color to current stage being processed.
116 GrGLSLExpr4 inColor = this->getInputColor();
117
118 fOutput.fColorEffects =
119 this->createAndEmitEffects(colorStages,
120 this->desc().getEffectKeys(),
121 this->desc().numColorEffects(),
122 &inColor);
123
124 /////////////////////////////////////////////////////////////////////////// 115 ///////////////////////////////////////////////////////////////////////////
125 // compute the partial coverage 116 // emit code to read the dst copy texture, if necessary
126 GrGLSLExpr4 inCoverage = this->getInputCoverage();
127
128 fOutput.fCoverageEffects =
129 this->createAndEmitEffects(coverageStages,
130 this->desc().getEffectKeys() + this->desc(). numColorEffects(),
131 this->desc().numCoverageEffects(),
132 &inCoverage);
133
134 if (GrGLProgramDesc::CoverageOutputUsesSecondaryOutput(header.fCoverageOutpu t)) {
135 const char* secondaryOutputName = this->enableSecondaryOutput();
136
137 // default coeff to ones for kCoverage_DualSrcOutput
138 GrGLSLExpr4 coeff(1);
139 if (GrGLProgramDesc::kSecondaryCoverageISA_CoverageOutput == header.fCov erageOutput) {
140 // Get (1-A) into coeff
141 coeff = GrGLSLExpr4::VectorCast(GrGLSLExpr1(1) - inColor.a());
142 } else if (GrGLProgramDesc::kSecondaryCoverageISC_CoverageOutput ==
143 header.fCoverageOutput){
144 // Get (1-RGBA) into coeff
145 coeff = GrGLSLExpr4(1) - inColor;
146 }
147 // Get coeff * coverage into modulate and then write that to the dual so urce output.
148 this->fsCodeAppendf("\t%s = %s;\n", secondaryOutputName, (coeff * inCove rage).c_str());
149 }
150
151 ///////////////////////////////////////////////////////////////////////////
152 // combine color and coverage as frag color
153
154 // Get "color * coverage" into fragColor
155 GrGLSLExpr4 fragColor = inColor * inCoverage;
156 // Now tack on "+(1-coverage)dst onto the frag color if we were asked to do so.
157 if (GrGLProgramDesc::kCombineWithDst_CoverageOutput == header.fCoverageOutpu t) {
158 GrGLSLExpr4 dstCoeff = GrGLSLExpr4(1) - inCoverage;
159
160 GrGLSLExpr4 dstContribution = dstCoeff * GrGLSLExpr4(this->dstColor());
161
162 fragColor = fragColor + dstContribution;
163 }
164 this->fsCodeAppendf("\t%s = %s;\n", this->getColorOutputName(), fragColor.c_ str());
165
166 if (!this->finish()) {
167 return false;
168 }
169
170 return true;
171 }
172
173 //////////////////////////////////////////////////////////////////////////////
174
175 GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
176 GrGLUniformManager* uniformManager,
177 const GrGLProgramDesc& desc)
178 : fDesc(desc)
179 , fGpu(gpu)
180 , fUniformManager(SkRef(uniformManager))
181 , fFSFeaturesAddedMask(0)
182 , fFSInputs(kVarsPerBlock)
183 , fFSOutputs(kMaxFSOutputs)
184 , fUniforms(kVarsPerBlock)
185 , fSetupFragPosition(false)
186 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey)
187 , fHasCustomColorOutput(false)
188 , fHasSecondaryOutput(false) {
189
190 const GrGLProgramDesc::KeyHeader& header = desc.getHeader();
191
192 // Emit code to read the dst copy textue if necessary.
193 if (kNoDstRead_DstReadKey != header.fDstReadKey && 117 if (kNoDstRead_DstReadKey != header.fDstReadKey &&
194 GrGLCaps::kNone_FBFetchType == fGpu->glCaps().fbFetchType()) { 118 GrGLCaps::kNone_FBFetchType == fGpu->glCaps().fbFetchType()) {
195 bool topDown = SkToBool(kTopLeftOrigin_DstReadKeyBit & header.fDstReadKe y); 119 bool topDown = SkToBool(kTopLeftOrigin_DstReadKeyBit & header.fDstReadKe y);
196 const char* dstCopyTopLeftName; 120 const char* dstCopyTopLeftName;
197 const char* dstCopyCoordScaleName; 121 const char* dstCopyCoordScaleName;
198 const char* dstCopySamplerName; 122 const char* dstCopySamplerName;
199 uint32_t configMask; 123 uint32_t configMask;
200 if (SkToBool(kUseAlphaConfig_DstReadKeyBit & header.fDstReadKey)) { 124 if (SkToBool(kUseAlphaConfig_DstReadKeyBit & header.fDstReadKey)) {
201 configMask = kA_GrColorComponentFlag; 125 configMask = kA_GrColorComponentFlag;
202 } else { 126 } else {
(...skipping 18 matching lines...) Expand all
221 this->fsCodeAppendf("\tvec4 %s = ", kDstCopyColorName); 145 this->fsCodeAppendf("\tvec4 %s = ", kDstCopyColorName);
222 append_texture_lookup(&fFSCode, 146 append_texture_lookup(&fFSCode,
223 fGpu, 147 fGpu,
224 dstCopySamplerName, 148 dstCopySamplerName,
225 "_dstTexCoord", 149 "_dstTexCoord",
226 configMask, 150 configMask,
227 "rgba"); 151 "rgba");
228 this->fsCodeAppend(";\n\n"); 152 this->fsCodeAppend(";\n\n");
229 } 153 }
230 154
155 ///////////////////////////////////////////////////////////////////////////
156 // get the initial color and coverage to feed into the first effect in each effect chain
157
158 GrGLSLExpr4 inputColor;
159 GrGLSLExpr4 inputCoverage;
160
231 if (GrGLProgramDesc::kUniform_ColorInput == header.fColorInput) { 161 if (GrGLProgramDesc::kUniform_ColorInput == header.fColorInput) {
232 const char* name; 162 const char* name;
233 fOutput.fUniformHandles.fColorUni = 163 fOutput.fUniformHandles.fColorUni =
234 this->addUniform(GrGLShaderBuilder::kFragment_Visibility, kVec4f_GrS LType, "Color", 164 this->addUniform(GrGLShaderBuilder::kFragment_Visibility, kVec4f_GrS LType, "Color",
235 &name); 165 &name);
236 fInputColor = GrGLSLExpr4(name); 166 inputColor = GrGLSLExpr4(name);
237 } else if (GrGLProgramDesc::kSolidWhite_ColorInput == header.fColorInput) { 167 } else if (GrGLProgramDesc::kSolidWhite_ColorInput == header.fColorInput) {
238 fInputColor = GrGLSLExpr4(1); 168 inputColor = GrGLSLExpr4(1);
239 } else if (GrGLProgramDesc::kTransBlack_ColorInput == header.fColorInput) { 169 } else if (GrGLProgramDesc::kTransBlack_ColorInput == header.fColorInput) {
240 fInputColor = GrGLSLExpr4(0); 170 inputColor = GrGLSLExpr4(0);
241 } 171 }
242 172
243 if (GrGLProgramDesc::kUniform_ColorInput == header.fCoverageInput) { 173 if (GrGLProgramDesc::kUniform_ColorInput == header.fCoverageInput) {
244 const char* name; 174 const char* name;
245 fOutput.fUniformHandles.fCoverageUni = 175 fOutput.fUniformHandles.fCoverageUni =
246 this->addUniform(GrGLShaderBuilder::kFragment_Visibility, kVec4f_GrS LType, "Coverage", 176 this->addUniform(GrGLShaderBuilder::kFragment_Visibility, kVec4f_GrS LType, "Coverage",
247 &name); 177 &name);
248 fInputCoverage = GrGLSLExpr4(name); 178 inputCoverage = GrGLSLExpr4(name);
249 } else if (GrGLProgramDesc::kSolidWhite_ColorInput == header.fCoverageInput) { 179 } else if (GrGLProgramDesc::kSolidWhite_ColorInput == header.fCoverageInput) {
250 fInputCoverage = GrGLSLExpr4(1); 180 inputCoverage = GrGLSLExpr4(1);
251 } else if (GrGLProgramDesc::kTransBlack_ColorInput == header.fCoverageInput) { 181 } else if (GrGLProgramDesc::kTransBlack_ColorInput == header.fCoverageInput) {
252 fInputCoverage = GrGLSLExpr4(0); 182 inputCoverage = GrGLSLExpr4(0);
253 } 183 }
254 184
255 if (k110_GrGLSLGeneration != fGpu->glslGeneration()) { 185 if (k110_GrGLSLGeneration != fGpu->glslGeneration()) {
256 fFSOutputs.push_back().set(kVec4f_GrSLType, 186 fFSOutputs.push_back().set(kVec4f_GrSLType,
257 GrGLShaderVar::kOut_TypeModifier, 187 GrGLShaderVar::kOut_TypeModifier,
258 declared_color_output_name()); 188 declared_color_output_name());
259 fHasCustomColorOutput = true; 189 fHasCustomColorOutput = true;
260 } 190 }
191
192 this->emitCodeBeforeEffects(&inputColor, &inputCoverage);
193
194 ///////////////////////////////////////////////////////////////////////////
195 // emit the per-effect code for both color and coverage effects
196
197 fOutput.fColorEffects =
198 this->createAndEmitEffects(colorStages,
199 this->desc().getEffectKeys(),
200 this->desc().numColorEffects(),
201 &inputColor);
202
203 fOutput.fCoverageEffects =
204 this->createAndEmitEffects(coverageStages,
205 this->desc().getEffectKeys() + this->desc(). numColorEffects(),
206 this->desc().numCoverageEffects(),
207 &inputCoverage);
208
209 this->emitCodeAfterEffects();
210
211 ///////////////////////////////////////////////////////////////////////////
212 // write the secondary color output if necessary
213 if (GrGLProgramDesc::CoverageOutputUsesSecondaryOutput(header.fCoverageOutpu t)) {
214 const char* secondaryOutputName = this->enableSecondaryOutput();
215
216 // default coeff to ones for kCoverage_DualSrcOutput
217 GrGLSLExpr4 coeff(1);
218 if (GrGLProgramDesc::kSecondaryCoverageISA_CoverageOutput == header.fCov erageOutput) {
219 // Get (1-A) into coeff
220 coeff = GrGLSLExpr4::VectorCast(GrGLSLExpr1(1) - inputColor.a());
221 } else if (GrGLProgramDesc::kSecondaryCoverageISC_CoverageOutput ==
222 header.fCoverageOutput){
223 // Get (1-RGBA) into coeff
224 coeff = GrGLSLExpr4(1) - inputColor;
225 }
226 // Get coeff * coverage into modulate and then write that to the dual so urce output.
227 this->fsCodeAppendf("\t%s = %s;\n", secondaryOutputName, (coeff * inputC overage).c_str());
228 }
229
230 ///////////////////////////////////////////////////////////////////////////
231 // combine color and coverage as frag color
232
233 // Get "color * coverage" into fragColor
234 GrGLSLExpr4 fragColor = inputColor * inputCoverage;
235 // Now tack on "+(1-coverage)dst onto the frag color if we were asked to do so.
236 if (GrGLProgramDesc::kCombineWithDst_CoverageOutput == header.fCoverageOutpu t) {
237 GrGLSLExpr4 dstCoeff = GrGLSLExpr4(1) - inputCoverage;
238
239 GrGLSLExpr4 dstContribution = dstCoeff * GrGLSLExpr4(this->dstColor());
240
241 fragColor = fragColor + dstContribution;
242 }
243 this->fsCodeAppendf("\t%s = %s;\n", this->getColorOutputName(), fragColor.c_ str());
244
245 if (!this->finish()) {
246 return false;
247 }
248
249 return true;
250 }
251
252 //////////////////////////////////////////////////////////////////////////////
253
254 GrGLShaderBuilder::GrGLShaderBuilder(GrGpuGL* gpu,
255 GrGLUniformManager* uniformManager,
256 const GrGLProgramDesc& desc)
257 : fDesc(desc)
258 , fGpu(gpu)
259 , fUniformManager(SkRef(uniformManager))
260 , fFSFeaturesAddedMask(0)
261 , fFSInputs(kVarsPerBlock)
262 , fFSOutputs(kMaxFSOutputs)
263 , fUniforms(kVarsPerBlock)
264 , fSetupFragPosition(false)
265 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey)
266 , fHasCustomColorOutput(false)
267 , fHasSecondaryOutput(false) {
261 } 268 }
262 269
263 bool GrGLShaderBuilder::enableFeature(GLSLFeature feature) { 270 bool GrGLShaderBuilder::enableFeature(GLSLFeature feature) {
264 switch (feature) { 271 switch (feature) {
265 case kStandardDerivatives_GLSLFeature: 272 case kStandardDerivatives_GLSLFeature:
266 if (!fGpu->glCaps().shaderDerivativeSupport()) { 273 if (!fGpu->glCaps().shaderDerivativeSupport()) {
267 return false; 274 return false;
268 } 275 }
269 if (kGLES_GrGLStandard == fGpu->glStandard()) { 276 if (kGLES_GrGLStandard == fGpu->glStandard()) {
270 this->addFSFeature(1 << kStandardDerivatives_GLSLFeature, 277 this->addFSFeature(1 << kStandardDerivatives_GLSLFeature,
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 //////////////////////////////////////////////////////////////////////////////// 822 ////////////////////////////////////////////////////////////////////////////////
816 823
817 GrGLFullShaderBuilder::GrGLFullShaderBuilder(GrGpuGL* gpu, 824 GrGLFullShaderBuilder::GrGLFullShaderBuilder(GrGpuGL* gpu,
818 GrGLUniformManager* uniformManager, 825 GrGLUniformManager* uniformManager,
819 const GrGLProgramDesc& desc) 826 const GrGLProgramDesc& desc)
820 : INHERITED(gpu, uniformManager, desc) 827 : INHERITED(gpu, uniformManager, desc)
821 , fVSAttrs(kVarsPerBlock) 828 , fVSAttrs(kVarsPerBlock)
822 , fVSOutputs(kVarsPerBlock) 829 , fVSOutputs(kVarsPerBlock)
823 , fGSInputs(kVarsPerBlock) 830 , fGSInputs(kVarsPerBlock)
824 , fGSOutputs(kVarsPerBlock) { 831 , fGSOutputs(kVarsPerBlock) {
832 }
825 833
834 void GrGLFullShaderBuilder::emitCodeBeforeEffects(GrGLSLExpr4* color, GrGLSLExpr 4* coverage) {
826 const GrGLProgramDesc::KeyHeader& header = this->desc().getHeader(); 835 const GrGLProgramDesc::KeyHeader& header = this->desc().getHeader();
827 836
828 fOutput.fHasVertexShader = true; 837 fOutput.fHasVertexShader = true;
829 838
830 fPositionVar = &fVSAttrs.push_back(); 839 fPositionVar = &fVSAttrs.push_back();
831 fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, " aPosition"); 840 fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, " aPosition");
832 if (-1 != header.fLocalCoordAttributeIndex) { 841 if (-1 != header.fLocalCoordAttributeIndex) {
833 fLocalCoordsVar = &fVSAttrs.push_back(); 842 fLocalCoordsVar = &fVSAttrs.push_back();
834 fLocalCoordsVar->set(kVec2f_GrSLType, 843 fLocalCoordsVar->set(kVec2f_GrSLType,
835 GrGLShaderVar::kAttribute_TypeModifier, 844 GrGLShaderVar::kAttribute_TypeModifier,
836 "aLocalCoords"); 845 "aLocalCoords");
837 } else { 846 } else {
838 fLocalCoordsVar = fPositionVar; 847 fLocalCoordsVar = fPositionVar;
839 } 848 }
840 849
841 const char* viewMName; 850 const char* viewMName;
842 fOutput.fUniformHandles.fViewMatrixUni = 851 fOutput.fUniformHandles.fViewMatrixUni =
843 this->addUniform(GrGLShaderBuilder::kVertex_Visibility, kMat33f_GrSLType , "ViewM", 852 this->addUniform(GrGLShaderBuilder::kVertex_Visibility, kMat33f_GrSLType , "ViewM",
844 &viewMName); 853 &viewMName);
845 const char* rtAdjustName;
846 fOutput.fUniformHandles.fRTAdjustmentUni =
847 this->addUniform(GrGLShaderBuilder::kVertex_Visibility, kVec4f_GrSLType, "rtAdjustment",
848 &rtAdjustName);
849 854
850 // Transform the position into Skia's device coords. 855 // Transform the position into Skia's device coords.
851 this->vsCodeAppendf("\tvec3 pos3 = %s * vec3(%s, 1);\n", 856 this->vsCodeAppendf("\tvec3 pos3 = %s * vec3(%s, 1);\n",
852 viewMName, fPositionVar->c_str()); 857 viewMName, fPositionVar->c_str());
853 858
854 // Transform from Skia's device coords to GL's normalized device coords.
855 this->vsCodeAppendf(
856 "\tgl_Position = vec4(dot(pos3.xz, %s.xy), dot(pos3.yz, %s.zw), 0, pos3. z);\n",
857 rtAdjustName, rtAdjustName);
858
859 // we output point size in the GS if present 859 // we output point size in the GS if present
860 if (header.fEmitsPointSize 860 if (header.fEmitsPointSize
861 #if GR_GL_EXPERIMENTAL_GS 861 #if GR_GL_EXPERIMENTAL_GS
862 && !header.fExperimentalGS 862 && !header.fExperimentalGS
863 #endif 863 #endif
864 ) { 864 ) {
865 this->vsCodeAppend("\tgl_PointSize = 1.0;\n"); 865 this->vsCodeAppend("\tgl_PointSize = 1.0;\n");
866 } 866 }
867 867
868 if (GrGLProgramDesc::kAttribute_ColorInput == header.fColorInput) { 868 if (GrGLProgramDesc::kAttribute_ColorInput == header.fColorInput) {
869 this->addAttribute(kVec4f_GrSLType, color_attribute_name()); 869 this->addAttribute(kVec4f_GrSLType, color_attribute_name());
870 const char *vsName, *fsName; 870 const char *vsName, *fsName;
871 this->addVarying(kVec4f_GrSLType, "Color", &vsName, &fsName); 871 this->addVarying(kVec4f_GrSLType, "Color", &vsName, &fsName);
872 this->vsCodeAppendf("\t%s = %s;\n", vsName, color_attribute_name()); 872 this->vsCodeAppendf("\t%s = %s;\n", vsName, color_attribute_name());
873 this->setInputColor(fsName); 873 *color = fsName;
874 } 874 }
875 875
876 if (GrGLProgramDesc::kAttribute_ColorInput == header.fCoverageInput) { 876 if (GrGLProgramDesc::kAttribute_ColorInput == header.fCoverageInput) {
877 this->addAttribute(kVec4f_GrSLType, coverage_attribute_name()); 877 this->addAttribute(kVec4f_GrSLType, coverage_attribute_name());
878 const char *vsName, *fsName; 878 const char *vsName, *fsName;
879 this->addVarying(kVec4f_GrSLType, "Coverage", &vsName, &fsName); 879 this->addVarying(kVec4f_GrSLType, "Coverage", &vsName, &fsName);
880 this->vsCodeAppendf("\t%s = %s;\n", vsName, coverage_attribute_name()); 880 this->vsCodeAppendf("\t%s = %s;\n", vsName, coverage_attribute_name());
881 this->setInputCoverage(fsName); 881 *coverage = fsName;
882 } 882 }
883 } 883 }
884 884
885 void GrGLFullShaderBuilder::emitCodeAfterEffects() {
886 const char* rtAdjustName;
887 fOutput.fUniformHandles.fRTAdjustmentUni =
888 this->addUniform(GrGLShaderBuilder::kVertex_Visibility, kVec4f_GrSLType, "rtAdjustment",
889 &rtAdjustName);
890
891 // Transform from Skia's device coords to GL's normalized device coords.
892 this->vsCodeAppendf(
893 "\tgl_Position = vec4(dot(pos3.xz, %s.xy), dot(pos3.yz, %s.zw), 0, pos3. z);\n",
894 rtAdjustName, rtAdjustName);
895 }
896
885 bool GrGLFullShaderBuilder::addAttribute(GrSLType type, const char* name) { 897 bool GrGLFullShaderBuilder::addAttribute(GrSLType type, const char* name) {
886 for (int i = 0; i < fVSAttrs.count(); ++i) { 898 for (int i = 0; i < fVSAttrs.count(); ++i) {
887 const GrGLShaderVar& attr = fVSAttrs[i]; 899 const GrGLShaderVar& attr = fVSAttrs[i];
888 // if attribute already added, don't add it again 900 // if attribute already added, don't add it again
889 if (attr.getName().equals(name)) { 901 if (attr.getName().equals(name)) {
890 SkASSERT(attr.getType() == type); 902 SkASSERT(attr.getType() == type);
891 return false; 903 return false;
892 } 904 }
893 } 905 }
894 fVSAttrs.push_back().set(type, 906 fVSAttrs.push_back().set(type,
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1055 GL_CALL(BindAttribLocation(programId, attrib->fIndex, attrib->fName.c_s tr())); 1067 GL_CALL(BindAttribLocation(programId, attrib->fIndex, attrib->fName.c_s tr()));
1056 } 1068 }
1057 } 1069 }
1058 1070
1059 //////////////////////////////////////////////////////////////////////////////// 1071 ////////////////////////////////////////////////////////////////////////////////
1060 1072
1061 GrGLFragmentOnlyShaderBuilder::GrGLFragmentOnlyShaderBuilder(GrGpuGL* gpu, 1073 GrGLFragmentOnlyShaderBuilder::GrGLFragmentOnlyShaderBuilder(GrGpuGL* gpu,
1062 GrGLUniformManager* uniformManager, 1074 GrGLUniformManager* uniformManager,
1063 const GrGLProgramDe sc& desc) 1075 const GrGLProgramDe sc& desc)
1064 : INHERITED(gpu, uniformManager, desc) { 1076 : INHERITED(gpu, uniformManager, desc) {
1065
1066 SkASSERT(!desc.getHeader().fHasVertexCode); 1077 SkASSERT(!desc.getHeader().fHasVertexCode);
1067 SkASSERT(gpu->glCaps().pathRenderingSupport()); 1078 SkASSERT(gpu->glCaps().pathRenderingSupport());
1068 SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fColorIn put); 1079 SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fColorIn put);
1069 SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fCoverag eInput); 1080 SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.getHeader().fCoverag eInput);
1070 } 1081 }
1071 1082
1072 int GrGLFragmentOnlyShaderBuilder::addTexCoordSets(int count) { 1083 int GrGLFragmentOnlyShaderBuilder::addTexCoordSets(int count) {
1073 int firstFreeCoordSet = fOutput.fTexCoordSetCnt; 1084 int firstFreeCoordSet = fOutput.fTexCoordSetCnt;
1074 fOutput.fTexCoordSetCnt += count; 1085 fOutput.fTexCoordSetCnt += count;
1075 SkASSERT(gpu()->glCaps().maxFixedFunctionTextureCoords() >= fOutput.fTexCoor dSetCnt); 1086 SkASSERT(gpu()->glCaps().maxFixedFunctionTextureCoords() >= fOutput.fTexCoor dSetCnt);
1076 return firstFreeCoordSet; 1087 return firstFreeCoordSet;
1077 } 1088 }
1078 1089
1079 GrGLProgramEffects* GrGLFragmentOnlyShaderBuilder::createAndEmitEffects( 1090 GrGLProgramEffects* GrGLFragmentOnlyShaderBuilder::createAndEmitEffects(
1080 const GrEffectStage* effectStages[], 1091 const GrEffectStage* effectStages[],
1081 const EffectKey effectKeys[], 1092 const EffectKey effectKeys[],
1082 int effectCnt, 1093 int effectCnt,
1083 GrGLSLExpr4* inOutFSColor) { 1094 GrGLSLExpr4* inOutFSColor) {
1084 1095
1085 GrGLPathTexGenProgramEffectsBuilder pathTexGenEffectsBuilder(this, 1096 GrGLPathTexGenProgramEffectsBuilder pathTexGenEffectsBuilder(this,
1086 effectCnt); 1097 effectCnt);
1087 this->INHERITED::createAndEmitEffects(&pathTexGenEffectsBuilder, 1098 this->INHERITED::createAndEmitEffects(&pathTexGenEffectsBuilder,
1088 effectStages, 1099 effectStages,
1089 effectKeys, 1100 effectKeys,
1090 effectCnt, 1101 effectCnt,
1091 inOutFSColor); 1102 inOutFSColor);
1092 return pathTexGenEffectsBuilder.finish(); 1103 return pathTexGenEffectsBuilder.finish();
1093 } 1104 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698