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

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

Issue 23018003: Rename GrGLUniformManager to GrGLUniform and ref GrGLUniforms directly Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 4 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') | src/gpu/gl/GrGLUniform.h » ('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"
11 #include "GrDrawEffect.h" 10 #include "GrDrawEffect.h"
12 #include "GrTexture.h" 11 #include "GrTexture.h"
13 12
14 // number of each input/output type in a single allocation block 13 // number of each input/output type in a single allocation block
15 static const int kVarsPerBlock = 8; 14 static const int kVarsPerBlock = 8;
16 15
17 // except FS outputs where we expect 2 at most. 16 // except FS outputs where we expect 2 at most.
18 static const int kMaxFSOutputs = 2; 17 static const int kMaxFSOutputs = 2;
19 18
20 // ES2 FS only guarantees mediump and lowp support 19 // ES2 FS only guarantees mediump and lowp support
21 static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar: :kMedium_Precision; 20 static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar: :kMedium_Precision;
22 21
23 typedef GrGLUniformManager::UniformHandle UniformHandle;
24 /////////////////////////////////////////////////////////////////////////////// 22 ///////////////////////////////////////////////////////////////////////////////
25 23
26 namespace { 24 namespace {
27 25
28 inline const char* sample_function_name(GrSLType type, GrGLSLGeneration glslGen) { 26 inline const char* sample_function_name(GrSLType type, GrGLSLGeneration glslGen) {
29 if (kVec2f_GrSLType == type) { 27 if (kVec2f_GrSLType == type) {
30 return glslGen >= k130_GrGLSLGeneration ? "texture" : "texture2D"; 28 return glslGen >= k130_GrGLSLGeneration ? "texture" : "texture2D";
31 } else { 29 } else {
32 GrAssert(kVec3f_GrSLType == type); 30 GrAssert(kVec3f_GrSLType == type);
33 return glslGen >= k130_GrGLSLGeneration ? "textureProj" : "texture2DProj "; 31 return glslGen >= k130_GrGLSLGeneration ? "textureProj" : "texture2DProj ";
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 } 83 }
86 } 84 }
87 85
88 } 86 }
89 87
90 static const char kDstCopyColorName[] = "_dstColor"; 88 static const char kDstCopyColorName[] = "_dstColor";
91 89
92 /////////////////////////////////////////////////////////////////////////////// 90 ///////////////////////////////////////////////////////////////////////////////
93 91
94 GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo, 92 GrGLShaderBuilder::GrGLShaderBuilder(const GrGLContextInfo& ctxInfo,
95 GrGLUniformManager& uniformManager, 93 GrGLProgram& program,
96 const GrGLProgramDesc& desc) 94 const GrGLProgramDesc& desc)
97 : fUniforms(kVarsPerBlock) 95 : fUniforms(kVarsPerBlock)
98 , fVSAttrs(kVarsPerBlock) 96 , fVSAttrs(kVarsPerBlock)
99 , fVSOutputs(kVarsPerBlock) 97 , fVSOutputs(kVarsPerBlock)
100 , fGSInputs(kVarsPerBlock) 98 , fGSInputs(kVarsPerBlock)
101 , fGSOutputs(kVarsPerBlock) 99 , fGSOutputs(kVarsPerBlock)
102 , fFSInputs(kVarsPerBlock) 100 , fFSInputs(kVarsPerBlock)
103 , fFSOutputs(kMaxFSOutputs) 101 , fFSOutputs(kMaxFSOutputs)
104 , fCtxInfo(ctxInfo) 102 , fCtxInfo(ctxInfo)
105 , fUniformManager(uniformManager) 103 , fProgram(program)
106 , fFSFeaturesAddedMask(0) 104 , fFSFeaturesAddedMask(0)
107 #if GR_GL_EXPERIMENTAL_GS 105 #if GR_GL_EXPERIMENTAL_GS
108 , fUsesGS(SkToBool(desc.getHeader().fExperimentalGS)) 106 , fUsesGS(SkToBool(desc.getHeader().fExperimentalGS))
109 #else 107 #else
110 , fUsesGS(false) 108 , fUsesGS(false)
111 #endif 109 #endif
112 , fSetupFragPosition(false) 110 , fSetupFragPosition(false)
113 , fRTHeightUniform(GrGLUniformManager::kInvalidUniformHandle) 111 , fRTHeightUniform(NULL)
114 , fDstCopyTopLeftUniform (GrGLUniformManager::kInvalidUniformHandle) 112 , fDstCopyTopLeftUniform(NULL)
115 , fDstCopyScaleUniform (GrGLUniformManager::kInvalidUniformHandle) 113 , fDstCopyScaleUniform(NULL)
116 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey) { 114 , fTopLeftFragPosRead(kTopLeftFragPosRead_FragPosKey == desc.getHeader().fFr agPosKey) {
117 115
118 const GrGLProgramDesc::KeyHeader& header = desc.getHeader(); 116 const GrGLProgramDesc::KeyHeader& header = desc.getHeader();
119 117
120 fPositionVar = &fVSAttrs.push_back(); 118 fPositionVar = &fVSAttrs.push_back();
121 fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, " aPosition"); 119 fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, " aPosition");
122 if (-1 != header.fLocalCoordAttributeIndex) { 120 if (-1 != header.fLocalCoordAttributeIndex) {
123 fLocalCoordsVar = &fVSAttrs.push_back(); 121 fLocalCoordsVar = &fVSAttrs.push_back();
124 fLocalCoordsVar->set(kVec2f_GrSLType, 122 fLocalCoordsVar->set(kVec2f_GrSLType,
125 GrGLShaderVar::kAttribute_TypeModifier, 123 GrGLShaderVar::kAttribute_TypeModifier,
(...skipping 11 matching lines...) Expand all
137 if (SkToBool(kUseAlphaConfig_DstReadKeyBit & header.fDstReadKey)) { 135 if (SkToBool(kUseAlphaConfig_DstReadKeyBit & header.fDstReadKey)) {
138 configMask = kA_GrColorComponentFlag; 136 configMask = kA_GrColorComponentFlag;
139 } else { 137 } else {
140 configMask = kRGBA_GrColorComponentFlags; 138 configMask = kRGBA_GrColorComponentFlags;
141 } 139 }
142 fDstCopySampler.init(this, configMask, "rgba", 0); 140 fDstCopySampler.init(this, configMask, "rgba", 0);
143 141
144 fDstCopyTopLeftUniform = this->addUniform(kFragment_ShaderType, 142 fDstCopyTopLeftUniform = this->addUniform(kFragment_ShaderType,
145 kVec2f_GrSLType, 143 kVec2f_GrSLType,
146 "DstCopyUpperLeft", 144 "DstCopyUpperLeft",
147 &dstCopyTopLeftName); 145 &dstCopyTopLeftName)->glUnifor m();
148 fDstCopyScaleUniform = this->addUniform(kFragment_ShaderType, 146 fDstCopyScaleUniform = this->addUniform(kFragment_ShaderType,
149 kVec2f_GrSLType, 147 kVec2f_GrSLType,
150 "DstCopyCoordScale", 148 "DstCopyCoordScale",
151 &dstCopyCoordScaleName); 149 &dstCopyCoordScaleName)->glU niform();
152 const char* fragPos = this->fragmentPosition(); 150 const char* fragPos = this->fragmentPosition();
153 this->fsCodeAppend("\t// Read color from copy of the destination.\n"); 151 this->fsCodeAppend("\t// Read color from copy of the destination.\n");
154 this->fsCodeAppendf("\tvec2 _dstTexCoord = (%s.xy - %s) * %s;\n", 152 this->fsCodeAppendf("\tvec2 _dstTexCoord = (%s.xy - %s) * %s;\n",
155 fragPos, dstCopyTopLeftName, dstCopyCoordScaleName); 153 fragPos, dstCopyTopLeftName, dstCopyCoordScaleName);
156 if (!topDown) { 154 if (!topDown) {
157 this->fsCodeAppend("\t_dstTexCoord.y = 1.0 - _dstTexCoord.y;\n"); 155 this->fsCodeAppend("\t_dstTexCoord.y = 1.0 - _dstTexCoord.y;\n");
158 } 156 }
159 this->fsCodeAppendf("\tvec4 %s = ", kDstCopyColorName); 157 this->fsCodeAppendf("\tvec4 %s = ", kDstCopyColorName);
160 this->appendTextureLookup(kFragment_ShaderType, fDstCopySampler, "_dstTe xCoord"); 158 this->appendTextureLookup(kFragment_ShaderType, fDstCopySampler, "_dstTe xCoord");
161 this->fsCodeAppend(";\n\n"); 159 this->fsCodeAppend(";\n\n");
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 } 291 }
294 292
295 void GrGLShaderBuilder::appendTextureLookup(SkString* out, 293 void GrGLShaderBuilder::appendTextureLookup(SkString* out,
296 const GrGLShaderBuilder::TextureSamp ler& sampler, 294 const GrGLShaderBuilder::TextureSamp ler& sampler,
297 const char* coordName, 295 const char* coordName,
298 GrSLType varyingType) const { 296 GrSLType varyingType) const {
299 GrAssert(NULL != coordName); 297 GrAssert(NULL != coordName);
300 298
301 out->appendf("%s(%s, %s)", 299 out->appendf("%s(%s, %s)",
302 sample_function_name(varyingType, fCtxInfo.glslGeneration()), 300 sample_function_name(varyingType, fCtxInfo.glslGeneration()),
303 this->getUniformCStr(sampler.fSamplerUniform), 301 sampler.fSamplerUniform->c_str(),
304 coordName); 302 coordName);
305 append_swizzle(out, sampler, *fCtxInfo.caps()); 303 append_swizzle(out, sampler, *fCtxInfo.caps());
306 } 304 }
307 305
308 void GrGLShaderBuilder::appendTextureLookup(ShaderType type, 306 void GrGLShaderBuilder::appendTextureLookup(ShaderType type,
309 const GrGLShaderBuilder::TextureSamp ler& sampler, 307 const GrGLShaderBuilder::TextureSamp ler& sampler,
310 const char* coordName, 308 const char* coordName,
311 GrSLType varyingType) { 309 GrSLType varyingType) {
312 GrAssert(kFragment_ShaderType == type); 310 GrAssert(kFragment_ShaderType == type);
313 this->appendTextureLookup(&fFSCode, sampler, coordName, varyingType); 311 this->appendTextureLookup(&fFSCode, sampler, coordName, varyingType);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA, 371 static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA,
374 GR_GL_ALPHA, GR_GL_ALPHA }; 372 GR_GL_ALPHA, GR_GL_ALPHA };
375 return gAlphaSmear; 373 return gAlphaSmear;
376 } 374 }
377 } else { 375 } else {
378 static const GrGLenum gStraight[] = { GR_GL_RED, GR_GL_GREEN, GR_GL_BLUE , GR_GL_ALPHA }; 376 static const GrGLenum gStraight[] = { GR_GL_RED, GR_GL_GREEN, GR_GL_BLUE , GR_GL_ALPHA };
379 return gStraight; 377 return gStraight;
380 } 378 }
381 } 379 }
382 380
383 GrGLUniformManager::UniformHandle GrGLShaderBuilder::addUniformArray(uint32_t vi sibility, 381 GrGLShaderBuilder::Uniform* GrGLShaderBuilder::addUniformArray(uint32_t visibili ty,
384 GrSLType ty pe, 382 GrSLType type,
385 const char* name, 383 const char* name,
386 int count, 384 int count,
387 const char* * outName) { 385 const char** outN ame) {
388 GrAssert(name && strlen(name)); 386 GrAssert(name && strlen(name));
389 SkDEBUGCODE(static const uint32_t kVisibilityMask = kVertex_ShaderType | kFr agment_ShaderType); 387 SkDEBUGCODE(static const uint32_t kVisibilityMask = kVertex_ShaderType | kFr agment_ShaderType);
390 GrAssert(0 == (~kVisibilityMask & visibility)); 388 GrAssert(0 == (~kVisibilityMask & visibility));
391 GrAssert(0 != visibility); 389 GrAssert(0 != visibility);
392 390
393 BuilderUniform& uni = fUniforms.push_back(); 391 Uniform& uni = fUniforms.push_back();
394 UniformHandle h = index_to_handle(fUniforms.count() - 1); 392 uni.fGLUniform = fProgram.appendUniform();
395 GR_DEBUGCODE(UniformHandle h2 =) 393 GR_DEBUGCODE(uni.fGLUniform->initType(count, type));
396 fUniformManager.appendUniform(type, count); 394
397 // We expect the uniform manager to initially have no uniforms and that all uniforms are added
398 // by this function. Therefore, the handles should match.
399 GrAssert(h2 == h);
400 uni.fVariable.setType(type); 395 uni.fVariable.setType(type);
401 uni.fVariable.setTypeModifier(GrGLShaderVar::kUniform_TypeModifier); 396 uni.fVariable.setTypeModifier(GrGLShaderVar::kUniform_TypeModifier);
402 this->nameVariable(uni.fVariable.accessName(), 'u', name); 397 this->nameVariable(uni.fVariable.accessName(), 'u', name);
403 uni.fVariable.setArrayCount(count); 398 uni.fVariable.setArrayCount(count);
404 uni.fVisibility = visibility; 399 uni.fVisibility = visibility;
405 400
406 // If it is visible in both the VS and FS, the precision must match. 401 // If it is visible in both the VS and FS, the precision must match.
407 // We declare a default FS precision, but not a default VS. So set the var 402 // We declare a default FS precision, but not a default VS. So set the var
408 // to use the default FS precision. 403 // to use the default FS precision.
409 if ((kVertex_ShaderType | kFragment_ShaderType) == visibility) { 404 if ((kVertex_ShaderType | kFragment_ShaderType) == visibility) {
410 // the fragment and vertex precisions must match 405 // the fragment and vertex precisions must match
411 uni.fVariable.setPrecision(kDefaultFragmentPrecision); 406 uni.fVariable.setPrecision(kDefaultFragmentPrecision);
412 } 407 }
413 408
414 if (NULL != outName) { 409 if (NULL != outName) {
415 *outName = uni.fVariable.c_str(); 410 *outName = uni.fVariable.c_str();
416 } 411 }
417 412
418 return h; 413 return &uni;
419 }
420
421 const GrGLShaderVar& GrGLShaderBuilder::getUniformVariable(UniformHandle u) cons t {
422 return fUniforms[handle_to_index(u)].fVariable;
423 } 414 }
424 415
425 bool GrGLShaderBuilder::addAttribute(GrSLType type, 416 bool GrGLShaderBuilder::addAttribute(GrSLType type,
426 const char* name) { 417 const char* name) {
427 for (int i = 0; i < fVSAttrs.count(); ++i) { 418 for (int i = 0; i < fVSAttrs.count(); ++i) {
428 const GrGLShaderVar& attr = fVSAttrs[i]; 419 const GrGLShaderVar& attr = fVSAttrs[i];
429 // if attribute already added, don't add it again 420 // if attribute already added, don't add it again
430 if (attr.getName().equals(name)) { 421 if (attr.getName().equals(name)) {
431 GrAssert(attr.getType() == type); 422 GrAssert(attr.getType() == type);
432 return false; 423 return false;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 GrGLShaderVar::kUpperLeft_Origin); 496 GrGLShaderVar::kUpperLeft_Origin);
506 fSetupFragPosition = true; 497 fSetupFragPosition = true;
507 } 498 }
508 return "gl_FragCoord"; 499 return "gl_FragCoord";
509 } else { 500 } else {
510 static const char* kCoordName = "fragCoordYDown"; 501 static const char* kCoordName = "fragCoordYDown";
511 if (!fSetupFragPosition) { 502 if (!fSetupFragPosition) {
512 // temporarily change the stage index because we're inserting non-st age code. 503 // temporarily change the stage index because we're inserting non-st age code.
513 CodeStage::AutoStageRestore csar(&fCodeStage, NULL); 504 CodeStage::AutoStageRestore csar(&fCodeStage, NULL);
514 505
515 GrAssert(GrGLUniformManager::kInvalidUniformHandle == fRTHeightUnifo rm); 506 GrAssert(NULL == fRTHeightUniform);
516 const char* rtHeightName; 507 const char* rtHeightName;
517 508
518 fRTHeightUniform = this->addUniform(kFragment_ShaderType, 509 fRTHeightUniform = this->addUniform(kFragment_ShaderType,
519 kFloat_GrSLType, 510 kFloat_GrSLType,
520 "RTHeight", 511 "RTHeight",
521 &rtHeightName); 512 &rtHeightName)->glUniform();
522 513
523 this->fFSCode.prependf("\tvec4 %s = vec4(gl_FragCoord.x, %s - gl_Fra gCoord.y, gl_FragCoord.zw);\n", 514 this->fFSCode.prependf("\tvec4 %s = vec4(gl_FragCoord.x, %s - gl_Fra gCoord.y, gl_FragCoord.zw);\n",
524 kCoordName, rtHeightName); 515 kCoordName, rtHeightName);
525 fSetupFragPosition = true; 516 fSetupFragPosition = true;
526 } 517 }
527 GrAssert(GrGLUniformManager::kInvalidUniformHandle != fRTHeightUniform); 518 GrAssert(NULL != fRTHeightUniform);
528 return kCoordName; 519 return kCoordName;
529 } 520 }
530 } 521 }
531 522
532 523
533 void GrGLShaderBuilder::emitFunction(ShaderType shader, 524 void GrGLShaderBuilder::emitFunction(ShaderType shader,
534 GrSLType returnType, 525 GrSLType returnType,
535 const char* name, 526 const char* name,
536 int argCnt, 527 int argCnt,
537 const GrGLShaderVar* args, 528 const GrGLShaderVar* args,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 GrAssert(k110_GrGLSLGeneration != fCtxInfo.glslGeneration() || fFSOu tputs.empty()); 624 GrAssert(k110_GrGLSLGeneration != fCtxInfo.glslGeneration() || fFSOu tputs.empty());
634 this->appendDecls(fFSOutputs, shaderStr); 625 this->appendDecls(fFSOutputs, shaderStr);
635 shaderStr->append(fFSFunctions); 626 shaderStr->append(fFSFunctions);
636 shaderStr->append("void main() {\n"); 627 shaderStr->append("void main() {\n");
637 shaderStr->append(fFSCode); 628 shaderStr->append(fFSCode);
638 shaderStr->append("}\n"); 629 shaderStr->append("}\n");
639 break; 630 break;
640 } 631 }
641 } 632 }
642 633
643 void GrGLShaderBuilder::finished(GrGLuint programID) { 634 void GrGLShaderBuilder::finished(const GrGLContext& context, GrGLuint programID) {
644 fUniformManager.getUniformLocations(programID, fUniforms); 635 int count = fUniforms.count();
636 for (int i = 0; i < count; ++i) {
637 fUniforms[i].glUniform()->initLocations(context, programID, fUniforms[i] .c_str(), fUniforms[i].fVisibility);
638 }
645 } 639 }
646 640
647 void GrGLShaderBuilder::emitEffects( 641 void GrGLShaderBuilder::emitEffects(
648 const GrEffectStage* effectStages[], 642 const GrEffectStage* effectStages[],
649 const GrBackendEffectFactory::EffectKey effectKeys[], 643 const GrBackendEffectFactory::EffectKey effectKeys[],
650 int effectCnt, 644 int effectCnt,
651 SkString* fsInOutColor, 645 SkString* fsInOutColor,
652 GrSLConstantVec* fsInOutColorKnownValue, 646 GrSLConstantVec* fsInOutColorKnownValue,
653 SkTArray<GrGLUniformManager::UniformHandle, true>* effec tSamplerHandles[], 647 SkTArray<GrGLUniform*, true>* effectSamplerHandles[],
654 GrGLEffect* glEffects[]) { 648 GrGLEffect* glEffects[]) {
655 bool effectEmitted = false; 649 bool effectEmitted = false;
656 650
657 SkString inColor = *fsInOutColor; 651 SkString inColor = *fsInOutColor;
658 SkString outColor; 652 SkString outColor;
659 653
660 for (int e = 0; e < effectCnt; ++e) { 654 for (int e = 0; e < effectCnt; ++e) {
661 GrAssert(NULL != effectStages[e] && NULL != effectStages[e]->getEffect() ); 655 GrAssert(NULL != effectStages[e] && NULL != effectStages[e]->getEffect() );
662 const GrEffectStage& stage = *effectStages[e]; 656 const GrEffectStage& stage = *effectStages[e];
663 const GrEffectRef& effect = *stage.getEffect(); 657 const GrEffectRef& effect = *stage.getEffect();
664 658
665 CodeStage::AutoStageRestore csar(&fCodeStage, &stage); 659 CodeStage::AutoStageRestore csar(&fCodeStage, &stage);
666 660
667 int numTextures = effect->numTextures(); 661 int numTextures = effect->numTextures();
668 SkSTArray<8, GrGLShaderBuilder::TextureSampler> textureSamplers; 662 SkSTArray<8, GrGLShaderBuilder::TextureSampler> textureSamplers;
669 textureSamplers.push_back_n(numTextures); 663 textureSamplers.push_back_n(numTextures);
670 for (int t = 0; t < numTextures; ++t) { 664 for (int t = 0; t < numTextures; ++t) {
671 textureSamplers[t].init(this, &effect->textureAccess(t), t); 665 textureSamplers[t].init(this, &effect->textureAccess(t), t);
672 effectSamplerHandles[e]->push_back(textureSamplers[t].fSamplerUnifor m); 666 effectSamplerHandles[e]->push_back(textureSamplers[t].fSamplerUnifor m->glUniform());
673 } 667 }
674 GrDrawEffect drawEffect(stage, this->hasExplicitLocalCoords()); 668 GrDrawEffect drawEffect(stage, this->hasExplicitLocalCoords());
675 669
676 int numAttributes = stage.getVertexAttribIndexCount(); 670 int numAttributes = stage.getVertexAttribIndexCount();
677 const int* attributeIndices = stage.getVertexAttribIndices(); 671 const int* attributeIndices = stage.getVertexAttribIndices();
678 SkSTArray<GrEffect::kMaxVertexAttribs, SkString> attributeNames; 672 SkSTArray<GrEffect::kMaxVertexAttribs, SkString> attributeNames;
679 for (int a = 0; a < numAttributes; ++a) { 673 for (int a = 0; a < numAttributes; ++a) {
680 // TODO: Make addAttribute mangle the name. 674 // TODO: Make addAttribute mangle the name.
681 SkString attributeName("aAttr"); 675 SkString attributeName("aAttr");
682 attributeName.appendS32(attributeIndices[a]); 676 attributeName.appendS32(attributeIndices[a]);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 for (const AttributePair* attrib = this->getEffectAttributes().begin(); 721 for (const AttributePair* attrib = this->getEffectAttributes().begin();
728 attrib != attribEnd; 722 attrib != attribEnd;
729 ++attrib) { 723 ++attrib) {
730 if (attrib->fIndex == attributeIndex) { 724 if (attrib->fIndex == attributeIndex) {
731 return &attrib->fName; 725 return &attrib->fName;
732 } 726 }
733 } 727 }
734 728
735 return NULL; 729 return NULL;
736 } 730 }
731
732
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLShaderBuilder.h ('k') | src/gpu/gl/GrGLUniform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698