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

Side by Side Diff: src/gpu/GrOvalRenderer.cpp

Issue 827973002: ViewMatrix uniform upload moved to GeometryProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@vm-on-gp
Patch Set: more cleanup Created 5 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 "GrOvalRenderer.h" 8 #include "GrOvalRenderer.h"
9 9
10 #include "GrProcessor.h" 10 #include "GrProcessor.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me); 95 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), ce.inCircleEdge()->fNa me);
96 96
97 // Setup pass through color 97 // Setup pass through color
98 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 98 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
99 &fColorUniform); 99 &fColorUniform);
100 100
101 // setup coord outputs 101 // setup coord outputs
102 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ce.i nPosition()->fName); 102 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ce.i nPosition()->fName);
103 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ce.inPo sition()->fName); 103 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ce.inPo sition()->fName);
104 104
105 // setup uniform viewMatrix
106 this->setupUniformViewMatrix(pb);
107
105 // setup position varying 108 // setup position varying
106 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 109 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(),
107 vsBuilder->uViewM(), ce.inPosition()->fName); 110 this->uViewM(), ce.inPosition()->fName);
108 111
109 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 112 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
110 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); 113 fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn());
111 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0. 0, 1.0);", v.fsIn()); 114 fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0. 0, 1.0);", v.fsIn());
112 if (ce.isStroked()) { 115 if (ce.isStroked()) {
113 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);", 116 fsBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s. w), 0.0, 1.0);",
114 v.fsIn(), v.fsIn()); 117 v.fsIn(), v.fsIn());
115 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;"); 118 fsBuilder->codeAppend("edgeAlpha *= innerAlpha;");
116 } 119 }
117 120
118 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 121 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
119 } 122 }
120 123
121 static void GenKey(const GrGeometryProcessor& processor, 124 static void GenKey(const GrGeometryProcessor& processor,
122 const GrBatchTracker& bt, 125 const GrBatchTracker& bt,
123 const GrGLCaps&, 126 const GrGLCaps&,
124 GrProcessorKeyBuilder* b) { 127 GrProcessorKeyBuilder* b) {
125 const BatchTracker& local = bt.cast<BatchTracker>(); 128 const BatchTracker& local = bt.cast<BatchTracker>();
126 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe ct>(); 129 const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffe ct>();
127 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; 130 uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0;
128 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x2 : 0x0; 131 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x2 : 0x0;
129 b->add32(key << 16 | local.fInputColorType); 132 b->add32(key << 16 | local.fInputColorType);
130 } 133 }
131 134
132 virtual void setData(const GrGLProgramDataManager& pdman, 135 virtual void setData(const GrGLProgramDataManager& pdman,
133 const GrPrimitiveProcessor& gp, 136 const GrPrimitiveProcessor& gp,
134 const GrBatchTracker& bt) SK_OVERRIDE { 137 const GrBatchTracker& bt) SK_OVERRIDE {
138 this->setUniformViewMatrix(pdman, gp.viewMatrix());
139
135 const BatchTracker& local = bt.cast<BatchTracker>(); 140 const BatchTracker& local = bt.cast<BatchTracker>();
136 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 141 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
137 GrGLfloat c[4]; 142 GrGLfloat c[4];
138 GrColorToRGBAFloat(local.fColor, c); 143 GrColorToRGBAFloat(local.fColor, c);
139 pdman.set4fv(fColorUniform, 1, c); 144 pdman.set4fv(fColorUniform, 1, c);
140 fColor = local.fColor; 145 fColor = local.fColor;
141 } 146 }
142 } 147 }
143 148
144 private: 149 private:
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 ee.inEllipseRadii()->fName); 276 ee.inEllipseRadii()->fName);
272 277
273 // Setup pass through color 278 // Setup pass through color
274 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 279 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
275 &fColorUniform); 280 &fColorUniform);
276 281
277 // setup coord outputs 282 // setup coord outputs
278 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName); 283 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName);
279 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName); 284 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName);
280 285
286 // setup uniform viewMatrix
287 this->setupUniformViewMatrix(pb);
288
281 // setup position varying 289 // setup position varying
282 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 290 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(),
283 vsBuilder->uViewM(), ee.inPosition()->fName); 291 this->uViewM(), ee.inPosition()->fName);
284 292
285 // for outer curve 293 // for outer curve
286 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 294 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
287 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse ts.fsIn(), 295 fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffse ts.fsIn(),
288 ellipseRadii.fsIn()); 296 ellipseRadii.fsIn());
289 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 297 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;");
290 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips eRadii.fsIn()); 298 fsBuilder->codeAppendf("vec2 grad = 2.0*scaledOffset*%s.xy;", ellips eRadii.fsIn());
291 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);"); 299 fsBuilder->codeAppend("float grad_dot = dot(grad, grad);");
292 300
293 // avoid calling inversesqrt on zero. 301 // avoid calling inversesqrt on zero.
(...skipping 22 matching lines...) Expand all
316 const BatchTracker& local = bt.cast<BatchTracker>(); 324 const BatchTracker& local = bt.cast<BatchTracker>();
317 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE ffect>(); 325 const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeE ffect>();
318 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; 326 uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0;
319 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x2 : 0x0; 327 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x2 : 0x0;
320 b->add32(key << 16 | local.fInputColorType); 328 b->add32(key << 16 | local.fInputColorType);
321 } 329 }
322 330
323 virtual void setData(const GrGLProgramDataManager& pdman, 331 virtual void setData(const GrGLProgramDataManager& pdman,
324 const GrPrimitiveProcessor& gp, 332 const GrPrimitiveProcessor& gp,
325 const GrBatchTracker& bt) SK_OVERRIDE { 333 const GrBatchTracker& bt) SK_OVERRIDE {
334 this->setUniformViewMatrix(pdman, gp.viewMatrix());
335
326 const BatchTracker& local = bt.cast<BatchTracker>(); 336 const BatchTracker& local = bt.cast<BatchTracker>();
327 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 337 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
328 GrGLfloat c[4]; 338 GrGLfloat c[4];
329 GrColorToRGBAFloat(local.fColor, c); 339 GrColorToRGBAFloat(local.fColor, c);
330 pdman.set4fv(fColorUniform, 1, c); 340 pdman.set4fv(fColorUniform, 1, c);
331 fColor = local.fColor; 341 fColor = local.fColor;
332 } 342 }
333 } 343 }
334 344
335 private: 345 private:
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 ee.inEllipseOffsets1()->fName); 478 ee.inEllipseOffsets1()->fName);
469 479
470 // Setup pass through color 480 // Setup pass through color
471 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL, 481 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC olor, NULL,
472 &fColorUniform); 482 &fColorUniform);
473 483
474 // setup coord outputs 484 // setup coord outputs
475 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName); 485 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), ee.i nPosition()->fName);
476 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName); 486 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), ee.inPo sition()->fName);
477 487
488 // setup uniform viewMatrix
489 this->setupUniformViewMatrix(pb);
490
478 // setup position varying 491 // setup position varying
479 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 492 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(),
480 vsBuilder->uViewM(), ee.inPosition()->fName); 493 this->uViewM(), ee.inPosition()->fName);
481 494
482 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 495 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
483 SkAssertResult(fsBuilder->enableFeature( 496 SkAssertResult(fsBuilder->enableFeature(
484 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) ); 497 GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature) );
485 // for outer curve 498 // for outer curve
486 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn() ); 499 fsBuilder->codeAppendf("vec2 scaledOffset = %s.xy;", offsets0.fsIn() );
487 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;"); 500 fsBuilder->codeAppend("float test = dot(scaledOffset, scaledOffset) - 1.0;");
488 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn()); 501 fsBuilder->codeAppendf("vec2 duvdx = dFdx(%s);", offsets0.fsIn());
489 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn()); 502 fsBuilder->codeAppendf("vec2 duvdy = dFdy(%s);", offsets0.fsIn());
490 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y *duvdx.y," 503 fsBuilder->codeAppendf("vec2 grad = vec2(2.0*%s.x*duvdx.x + 2.0*%s.y *duvdx.y,"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE dgeEffect>(); 541 const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseE dgeEffect>();
529 uint16_t key = ellipseEffect.getMode(); 542 uint16_t key = ellipseEffect.getMode();
530 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x1 << 8 : 543 key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspect ive() ? 0x1 << 8 :
531 0x0; 544 0x0;
532 b->add32(key << 16 | local.fInputColorType); 545 b->add32(key << 16 | local.fInputColorType);
533 } 546 }
534 547
535 virtual void setData(const GrGLProgramDataManager& pdman, 548 virtual void setData(const GrGLProgramDataManager& pdman,
536 const GrPrimitiveProcessor& gp, 549 const GrPrimitiveProcessor& gp,
537 const GrBatchTracker& bt) SK_OVERRIDE { 550 const GrBatchTracker& bt) SK_OVERRIDE {
551 this->setUniformViewMatrix(pdman, gp.viewMatrix());
552
538 const BatchTracker& local = bt.cast<BatchTracker>(); 553 const BatchTracker& local = bt.cast<BatchTracker>();
539 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) { 554 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
540 GrGLfloat c[4]; 555 GrGLfloat c[4];
541 GrColorToRGBAFloat(local.fColor, c); 556 GrColorToRGBAFloat(local.fColor, c);
542 pdman.set4fv(fColorUniform, 1, c); 557 pdman.set4fv(fColorUniform, 1, c);
543 fColor = local.fColor; 558 fColor = local.fColor;
544 } 559 }
545 } 560 }
546 561
547 private: 562 private:
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : 1407 int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 :
1393 SK_ARRAY_COUNT(gRRectIndices); 1408 SK_ARRAY_COUNT(gRRectIndices);
1394 target->setIndexSourceToBuffer(indexBuffer); 1409 target->setIndexSourceToBuffer(indexBuffer);
1395 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt, 1410 target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveTy pe, 1, 16, indexCnt,
1396 &bounds); 1411 &bounds);
1397 } 1412 }
1398 1413
1399 target->resetIndexSource(); 1414 target->resetIndexSource();
1400 return true; 1415 return true;
1401 } 1416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698