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

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

Issue 14998007: Make GrGLShaderBuilder check whether GrEffect advertised that it would require the dst color or frag (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Address comments Created 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | tests/GLProgramsTest.cpp » ('j') | 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 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 if (fCodeStage.inStageCode()) { 223 if (fCodeStage.inStageCode()) {
224 if (out->endsWith('_')) { 224 if (out->endsWith('_')) {
225 // Names containing "__" are reserved. 225 // Names containing "__" are reserved.
226 out->append("x"); 226 out->append("x");
227 } 227 }
228 out->appendf("_Stage%d", fCodeStage.stageIndex()); 228 out->appendf("_Stage%d", fCodeStage.stageIndex());
229 } 229 }
230 } 230 }
231 231
232 const char* GrGLShaderBuilder::dstColor() { 232 const char* GrGLShaderBuilder::dstColor() {
233 if (fCodeStage.inStageCode()) {
234 const GrEffectRef& effect = *fCodeStage.effectStage()->getEffect();
235 if (!effect->willReadDstColor()) {
236 GrDebugCrash("GrGLEffect asked for dst color but its generating GrEf fect "
237 "did not request access.");
238 return "";
239 }
240 }
233 static const char kFBFetchColorName[] = "gl_LastFragData[0]"; 241 static const char kFBFetchColorName[] = "gl_LastFragData[0]";
234 GrGLCaps::FBFetchType fetchType = fCtxInfo.caps()->fbFetchType(); 242 GrGLCaps::FBFetchType fetchType = fCtxInfo.caps()->fbFetchType();
235 if (GrGLCaps::kEXT_FBFetchType == fetchType) { 243 if (GrGLCaps::kEXT_FBFetchType == fetchType) {
236 SkAssertResult(this->enablePrivateFeature(kEXTShaderFramebufferFetch_GLS LPrivateFeature)); 244 SkAssertResult(this->enablePrivateFeature(kEXTShaderFramebufferFetch_GLS LPrivateFeature));
237 return kFBFetchColorName; 245 return kFBFetchColorName;
238 } else if (GrGLCaps::kNV_FBFetchType == fetchType) { 246 } else if (GrGLCaps::kNV_FBFetchType == fetchType) {
239 SkAssertResult(this->enablePrivateFeature(kNVShaderFramebufferFetch_GLSL PrivateFeature)); 247 SkAssertResult(this->enablePrivateFeature(kNVShaderFramebufferFetch_GLSL PrivateFeature));
240 return kFBFetchColorName; 248 return kFBFetchColorName;
241 } else if (fDstCopySampler.isInitialized()) { 249 } else if (fDstCopySampler.isInitialized()) {
242 return kDstCopyColorName; 250 return kDstCopyColorName;
243 } else { 251 } else {
244 return NULL; 252 return "";
245 } 253 }
246 } 254 }
247 255
248 void GrGLShaderBuilder::codeAppendf(ShaderType type, const char format[], va_lis t args) { 256 void GrGLShaderBuilder::codeAppendf(ShaderType type, const char format[], va_lis t args) {
249 SkString* string = NULL; 257 SkString* string = NULL;
250 switch (type) { 258 switch (type) {
251 case kVertex_ShaderType: 259 case kVertex_ShaderType:
252 string = &fVSCode; 260 string = &fVSCode;
253 break; 261 break;
254 case kGeometry_ShaderType: 262 case kGeometry_ShaderType:
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 fFSInputs.push_back(); 458 fFSInputs.push_back();
451 fFSInputs.back().setType(type); 459 fFSInputs.back().setType(type);
452 fFSInputs.back().setTypeModifier(GrGLShaderVar::kVaryingIn_TypeModifier); 460 fFSInputs.back().setTypeModifier(GrGLShaderVar::kVaryingIn_TypeModifier);
453 fFSInputs.back().setName(*fsName); 461 fFSInputs.back().setName(*fsName);
454 if (fsInName) { 462 if (fsInName) {
455 *fsInName = fsName->c_str(); 463 *fsInName = fsName->c_str();
456 } 464 }
457 } 465 }
458 466
459 const char* GrGLShaderBuilder::fragmentPosition() { 467 const char* GrGLShaderBuilder::fragmentPosition() {
468 if (fCodeStage.inStageCode()) {
469 const GrEffectRef& effect = *fCodeStage.effectStage()->getEffect();
470 if (!effect->willReadFragmentPosition()) {
471 GrDebugCrash("GrGLEffect asked for frag position but its generating GrEffect "
472 "did not request access.");
473 return "";
474 }
475 }
460 #if 1 476 #if 1
461 if (fCtxInfo.caps()->fragCoordConventionsSupport()) { 477 if (fCtxInfo.caps()->fragCoordConventionsSupport()) {
462 if (!fSetupFragPosition) { 478 if (!fSetupFragPosition) {
463 SkAssertResult(this->enablePrivateFeature(kFragCoordConventions_GLSL PrivateFeature)); 479 SkAssertResult(this->enablePrivateFeature(kFragCoordConventions_GLSL PrivateFeature));
464 fFSInputs.push_back().set(kVec4f_GrSLType, 480 fFSInputs.push_back().set(kVec4f_GrSLType,
465 GrGLShaderVar::kIn_TypeModifier, 481 GrGLShaderVar::kIn_TypeModifier,
466 "gl_FragCoord", 482 "gl_FragCoord",
467 GrGLShaderVar::kDefault_Precision, 483 GrGLShaderVar::kDefault_Precision,
468 GrGLShaderVar::kUpperLeft_Origin); 484 GrGLShaderVar::kUpperLeft_Origin);
469 fSetupFragPosition = true; 485 fSetupFragPosition = true;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 for (const AttributePair* attrib = this->getEffectAttributes().begin(); 722 for (const AttributePair* attrib = this->getEffectAttributes().begin();
707 attrib != attribEnd; 723 attrib != attribEnd;
708 ++attrib) { 724 ++attrib) {
709 if (attrib->fIndex == attributeIndex) { 725 if (attrib->fIndex == attributeIndex) {
710 return &attrib->fName; 726 return &attrib->fName;
711 } 727 }
712 } 728 }
713 729
714 return NULL; 730 return NULL;
715 } 731 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | tests/GLProgramsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698