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

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

Issue 671023002: Added varying struct (Closed) Base URL: https://skia.googlesource.com/skia.git@gp_emit_struct
Patch Set: cleanup Created 6 years, 2 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
« no previous file with comments | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.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 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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 , fFS(this, desc) 119 , fFS(this, desc)
120 , fOutOfStage(true) 120 , fOutOfStage(true)
121 , fStageIndex(-1) 121 , fStageIndex(-1)
122 , fGeometryProcessor(NULL) 122 , fGeometryProcessor(NULL)
123 , fOptState(optState) 123 , fOptState(optState)
124 , fDesc(desc) 124 , fDesc(desc)
125 , fGpu(gpu) 125 , fGpu(gpu)
126 , fUniforms(kVarsPerBlock) { 126 , fUniforms(kVarsPerBlock) {
127 } 127 }
128 128
129 void GrGLProgramBuilder::addVarying(GrSLType type, 129 void GrGLProgramBuilder::addVarying(const char* name,
130 const char* name, 130 GrGLVarying* varying,
131 const char** vsOutName,
132 const char** fsInName,
133 GrGLShaderVar::Precision fsPrecision) { 131 GrGLShaderVar::Precision fsPrecision) {
134 SkString* fsInputName = fVS.addVarying(type, name, vsOutName); 132 SkASSERT(varying);
135 fFS.addVarying(type, fsInputName->c_str(), fsInName, fsPrecision); 133 if (varying->vsVarying()) {
134 fVS.addVarying(name, varying);
135 }
136 if (fOptState.hasGeometryProcessor() && fOptState.getGeometryProcessor()->wi llUseGeoShader()) {
137 fGS.addVarying(name, varying);
138 }
139 if (varying->fsVarying()) {
140 fFS.addVarying(varying, fsPrecision);
141 }
136 } 142 }
137 143
138 void GrGLProgramBuilder::nameVariable(SkString* out, char prefix, const char* na me) { 144 void GrGLProgramBuilder::nameVariable(SkString* out, char prefix, const char* na me) {
139 if ('\0' == prefix) { 145 if ('\0' == prefix) {
140 *out = name; 146 *out = name;
141 } else { 147 } else {
142 out->printf("%c%s", prefix, name); 148 out->printf("%c%s", prefix, name);
143 } 149 }
144 if (!fOutOfStage) { 150 if (!fOutOfStage) {
145 if (out->endsWith('_')) { 151 if (out->endsWith('_')) {
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 uniName, 361 uniName,
356 &uniName).toShaderBuilder Index(); 362 &uniName).toShaderBuilder Index();
357 363
358 const char* varyingName = "MatrixCoord"; 364 const char* varyingName = "MatrixCoord";
359 SkString suffixedVaryingName; 365 SkString suffixedVaryingName;
360 if (0 != t) { 366 if (0 != t) {
361 suffixedVaryingName.append(varyingName); 367 suffixedVaryingName.append(varyingName);
362 suffixedVaryingName.appendf("_%i", t); 368 suffixedVaryingName.appendf("_%i", t);
363 varyingName = suffixedVaryingName.c_str(); 369 varyingName = suffixedVaryingName.c_str();
364 } 370 }
365 const char* vsVaryingName; 371 GrGLVertToFrag v(varyingType);
366 const char* fsVaryingName; 372 this->addVarying(varyingName, &v);
367 this->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryingNam e);
368 373
369 const GrGLShaderVar& coords = 374 const GrGLShaderVar& coords =
370 kPosition_GrCoordSet == effect->coordTransform(t).sourceCoords() ? 375 kPosition_GrCoordSet == effect->coordTransform(t).sourceCoords() ?
371 fVS.positionAttribute() : 376 fVS.positionAttribute() :
372 fVS.localCoordsAttribute(); 377 fVS.localCoordsAttribute();
373 378
374 // varying = matrix * coords (logically) 379 // varying = matrix * coords (logically)
375 SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingTyp e); 380 SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingTyp e);
376 if (kVec2f_GrSLType == varyingType) { 381 if (kVec2f_GrSLType == varyingType) {
377 fVS.codeAppendf("%s = (%s * vec3(%s, 1)).xy;", 382 fVS.codeAppendf("%s = (%s * vec3(%s, 1)).xy;",
378 vsVaryingName, uniName, coords.c_str()); 383 v.vsOut(), uniName, coords.c_str());
379 } else { 384 } else {
380 fVS.codeAppendf("%s = %s * vec3(%s, 1);", 385 fVS.codeAppendf("%s = %s * vec3(%s, 1);",
381 vsVaryingName, uniName, coords.c_str()); 386 v.vsOut(), uniName, coords.c_str());
382 } 387 }
383 SkNEW_APPEND_TO_TARRAY(outCoords, GrGLProcessor::TransformedCoords, 388 SkNEW_APPEND_TO_TARRAY(outCoords, GrGLProcessor::TransformedCoords,
384 (SkString(fsVaryingName), varyingType)); 389 (SkString(v.fsIn()), varyingType));
385 } 390 }
386 } 391 }
387 392
388 void GrGLProgramBuilder::emitSamplers(const GrProcessor& processor, 393 void GrGLProgramBuilder::emitSamplers(const GrProcessor& processor,
389 GrGLProcessor::TextureSamplerArray* outSam plers, 394 GrGLProcessor::TextureSamplerArray* outSam plers,
390 GrGLInstalledProc* ip) { 395 GrGLInstalledProc* ip) {
391 int numTextures = processor.numTextures(); 396 int numTextures = processor.numTextures();
392 ip->fSamplers.push_back_n(numTextures); 397 ip->fSamplers.push_back_n(numTextures);
393 SkString name; 398 SkString name;
394 for (int t = 0; t < numTextures; ++t) { 399 for (int t = 0; t < numTextures; ++t) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 508 }
504 509
505 //////////////////////////////////////////////////////////////////////////////// /////////////////// 510 //////////////////////////////////////////////////////////////////////////////// ///////////////////
506 511
507 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() { 512 GrGLInstalledFragProcs::~GrGLInstalledFragProcs() {
508 int numProcs = fProcs.count(); 513 int numProcs = fProcs.count();
509 for (int e = 0; e < numProcs; ++e) { 514 for (int e = 0; e < numProcs; ++e) {
510 SkDELETE(fProcs[e]); 515 SkDELETE(fProcs[e]);
511 } 516 }
512 } 517 }
OLDNEW
« no previous file with comments | « src/gpu/gl/builders/GrGLProgramBuilder.h ('k') | src/gpu/gl/builders/GrGLVertexShaderBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698