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

Side by Side Diff: src/gpu/effects/GrBezierEffect.cpp

Issue 2351753002: Revert of Stop flattening GrCoordTransforms in parent GrFragmentProcessors. (Closed)
Patch Set: Created 4 years, 3 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/batches/GrPLSPathRenderer.cpp ('k') | src/gpu/effects/GrBitmapTextGeoProc.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 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 "GrBezierEffect.h" 8 #include "GrBezierEffect.h"
9 9
10 #include "glsl/GrGLSLFragmentShaderBuilder.h" 10 #include "glsl/GrGLSLFragmentShaderBuilder.h"
11 #include "glsl/GrGLSLGeometryProcessor.h" 11 #include "glsl/GrGLSLGeometryProcessor.h"
12 #include "glsl/GrGLSLProgramDataManager.h" 12 #include "glsl/GrGLSLProgramDataManager.h"
13 #include "glsl/GrGLSLUniformHandler.h" 13 #include "glsl/GrGLSLUniformHandler.h"
14 #include "glsl/GrGLSLUtil.h" 14 #include "glsl/GrGLSLUtil.h"
15 #include "glsl/GrGLSLVarying.h" 15 #include "glsl/GrGLSLVarying.h"
16 #include "glsl/GrGLSLVertexShaderBuilder.h" 16 #include "glsl/GrGLSLVertexShaderBuilder.h"
17 17
18 class GrGLConicEffect : public GrGLSLGeometryProcessor { 18 class GrGLConicEffect : public GrGLSLGeometryProcessor {
19 public: 19 public:
20 GrGLConicEffect(const GrGeometryProcessor&); 20 GrGLConicEffect(const GrGeometryProcessor&);
21 21
22 void onEmitCode(EmitArgs&, GrGPArgs*) override; 22 void onEmitCode(EmitArgs&, GrGPArgs*) override;
23 23
24 static inline void GenKey(const GrGeometryProcessor&, 24 static inline void GenKey(const GrGeometryProcessor&,
25 const GrGLSLCaps&, 25 const GrGLSLCaps&,
26 GrProcessorKeyBuilder*); 26 GrProcessorKeyBuilder*);
27 27
28 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcess or& primProc, 28 void setData(const GrGLSLProgramDataManager& pdman,
29 FPCoordTransformIter&& transformIter) override { 29 const GrPrimitiveProcessor& primProc) override {
30 const GrConicEffect& ce = primProc.cast<GrConicEffect>(); 30 const GrConicEffect& ce = primProc.cast<GrConicEffect>();
31 31
32 if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMa trix())) { 32 if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMa trix())) {
33 fViewMatrix = ce.viewMatrix(); 33 fViewMatrix = ce.viewMatrix();
34 float viewMatrix[3 * 3]; 34 float viewMatrix[3 * 3];
35 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); 35 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix);
36 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); 36 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix);
37 } 37 }
38 38
39 if (ce.color() != fColor) { 39 if (ce.color() != fColor) {
40 float c[4]; 40 float c[4];
41 GrColorToRGBAFloat(ce.color(), c); 41 GrColorToRGBAFloat(ce.color(), c);
42 pdman.set4fv(fColorUniform, 1, c); 42 pdman.set4fv(fColorUniform, 1, c);
43 fColor = ce.color(); 43 fColor = ce.color();
44 } 44 }
45 45
46 if (ce.coverageScale() != 0xff && ce.coverageScale() != fCoverageScale) { 46 if (ce.coverageScale() != 0xff && ce.coverageScale() != fCoverageScale) {
47 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(ce.coverag eScale())); 47 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(ce.coverag eScale()));
48 fCoverageScale = ce.coverageScale(); 48 fCoverageScale = ce.coverageScale();
49 } 49 }
50 this->setTransformDataHelper(ce.localMatrix(), pdman, &transformIter); 50 }
51
52 void setTransformData(const GrPrimitiveProcessor& primProc,
53 const GrGLSLProgramDataManager& pdman,
54 int index,
55 const SkTArray<const GrCoordTransform*, true>& transfo rms) override {
56 this->setTransformDataHelper(primProc.cast<GrConicEffect>().localMatrix( ), pdman, index,
57 transforms);
51 } 58 }
52 59
53 private: 60 private:
54 SkMatrix fViewMatrix; 61 SkMatrix fViewMatrix;
55 GrColor fColor; 62 GrColor fColor;
56 uint8_t fCoverageScale; 63 uint8_t fCoverageScale;
57 GrPrimitiveEdgeType fEdgeType; 64 GrPrimitiveEdgeType fEdgeType;
58 UniformHandle fColorUniform; 65 UniformHandle fColorUniform;
59 UniformHandle fCoverageScaleUniform; 66 UniformHandle fCoverageScaleUniform;
60 UniformHandle fViewMatrixUniform; 67 UniformHandle fViewMatrixUniform;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 gp.viewMatrix(), 102 gp.viewMatrix(),
96 &fViewMatrixUniform); 103 &fViewMatrixUniform);
97 104
98 // emit transforms with position 105 // emit transforms with position
99 this->emitTransforms(vertBuilder, 106 this->emitTransforms(vertBuilder,
100 varyingHandler, 107 varyingHandler,
101 uniformHandler, 108 uniformHandler,
102 gpArgs->fPositionVar, 109 gpArgs->fPositionVar,
103 gp.inPosition()->fName, 110 gp.inPosition()->fName,
104 gp.localMatrix(), 111 gp.localMatrix(),
105 args.fFPCoordTransformHandler); 112 args.fTransformsIn,
113 args.fTransformsOut);
106 114
107 // TODO: this precision check should actually be a check on the number of bi ts 115 // TODO: this precision check should actually be a check on the number of bi ts
108 // high and medium provide and the selection of the lowest level that suffic es. 116 // high and medium provide and the selection of the lowest level that suffic es.
109 // Additionally we should assert that the upstream code only lets us get her e if 117 // Additionally we should assert that the upstream code only lets us get her e if
110 // either high or medium provides the required number of bits. 118 // either high or medium provides the required number of bits.
111 GrSLPrecision precision = kHigh_GrSLPrecision; 119 GrSLPrecision precision = kHigh_GrSLPrecision;
112 const GrShaderCaps::PrecisionInfo& highP = args.fGLSLCaps->getFloatShaderPre cisionInfo( 120 const GrShaderCaps::PrecisionInfo& highP = args.fGLSLCaps->getFloatShaderPre cisionInfo(
113 kFragment_GrShaderT ype, 121 kFragment_GrShaderT ype,
114 kHigh_GrSLPrecision ); 122 kHigh_GrSLPrecision );
115 if (!highP.supported()) { 123 if (!highP.supported()) {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 class GrGLQuadEffect : public GrGLSLGeometryProcessor { 292 class GrGLQuadEffect : public GrGLSLGeometryProcessor {
285 public: 293 public:
286 GrGLQuadEffect(const GrGeometryProcessor&); 294 GrGLQuadEffect(const GrGeometryProcessor&);
287 295
288 void onEmitCode(EmitArgs&, GrGPArgs*) override; 296 void onEmitCode(EmitArgs&, GrGPArgs*) override;
289 297
290 static inline void GenKey(const GrGeometryProcessor&, 298 static inline void GenKey(const GrGeometryProcessor&,
291 const GrGLSLCaps&, 299 const GrGLSLCaps&,
292 GrProcessorKeyBuilder*); 300 GrProcessorKeyBuilder*);
293 301
294 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcess or& primProc, 302 void setData(const GrGLSLProgramDataManager& pdman,
295 FPCoordTransformIter&& transformIter) override { 303 const GrPrimitiveProcessor& primProc) override {
296 const GrQuadEffect& qe = primProc.cast<GrQuadEffect>(); 304 const GrQuadEffect& qe = primProc.cast<GrQuadEffect>();
297 305
298 if (!qe.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(qe.viewMa trix())) { 306 if (!qe.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(qe.viewMa trix())) {
299 fViewMatrix = qe.viewMatrix(); 307 fViewMatrix = qe.viewMatrix();
300 float viewMatrix[3 * 3]; 308 float viewMatrix[3 * 3];
301 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); 309 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix);
302 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); 310 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix);
303 } 311 }
304 312
305 if (qe.color() != fColor) { 313 if (qe.color() != fColor) {
306 float c[4]; 314 float c[4];
307 GrColorToRGBAFloat(qe.color(), c); 315 GrColorToRGBAFloat(qe.color(), c);
308 pdman.set4fv(fColorUniform, 1, c); 316 pdman.set4fv(fColorUniform, 1, c);
309 fColor = qe.color(); 317 fColor = qe.color();
310 } 318 }
311 319
312 if (qe.coverageScale() != 0xff && qe.coverageScale() != fCoverageScale) { 320 if (qe.coverageScale() != 0xff && qe.coverageScale() != fCoverageScale) {
313 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.coverag eScale())); 321 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.coverag eScale()));
314 fCoverageScale = qe.coverageScale(); 322 fCoverageScale = qe.coverageScale();
315 } 323 }
316 this->setTransformDataHelper(qe.localMatrix(), pdman, &transformIter); 324 }
325
326 void setTransformData(const GrPrimitiveProcessor& primProc,
327 const GrGLSLProgramDataManager& pdman,
328 int index,
329 const SkTArray<const GrCoordTransform*, true>& transfo rms) override {
330 this->setTransformDataHelper(primProc.cast<GrQuadEffect>().localMatrix() , pdman, index,
331 transforms);
317 } 332 }
318 333
319 private: 334 private:
320 SkMatrix fViewMatrix; 335 SkMatrix fViewMatrix;
321 GrColor fColor; 336 GrColor fColor;
322 uint8_t fCoverageScale; 337 uint8_t fCoverageScale;
323 GrPrimitiveEdgeType fEdgeType; 338 GrPrimitiveEdgeType fEdgeType;
324 UniformHandle fColorUniform; 339 UniformHandle fColorUniform;
325 UniformHandle fCoverageScaleUniform; 340 UniformHandle fCoverageScaleUniform;
326 UniformHandle fViewMatrixUniform; 341 UniformHandle fViewMatrixUniform;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 gp.viewMatrix(), 376 gp.viewMatrix(),
362 &fViewMatrixUniform); 377 &fViewMatrixUniform);
363 378
364 // emit transforms with position 379 // emit transforms with position
365 this->emitTransforms(vertBuilder, 380 this->emitTransforms(vertBuilder,
366 varyingHandler, 381 varyingHandler,
367 uniformHandler, 382 uniformHandler,
368 gpArgs->fPositionVar, 383 gpArgs->fPositionVar,
369 gp.inPosition()->fName, 384 gp.inPosition()->fName,
370 gp.localMatrix(), 385 gp.localMatrix(),
371 args.fFPCoordTransformHandler); 386 args.fTransformsIn,
387 args.fTransformsOut);
372 388
373 fragBuilder->codeAppendf("float edgeAlpha;"); 389 fragBuilder->codeAppendf("float edgeAlpha;");
374 390
375 switch (fEdgeType) { 391 switch (fEdgeType) {
376 case kHairlineAA_GrProcessorEdgeType: { 392 case kHairlineAA_GrProcessorEdgeType: {
377 SkAssertResult(fragBuilder->enableFeature( 393 SkAssertResult(fragBuilder->enableFeature(
378 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e)); 394 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
379 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn()); 395 fragBuilder->codeAppendf("vec2 duvdx = dFdx(%s.xy);", v.fsIn());
380 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn()); 396 fragBuilder->codeAppendf("vec2 duvdy = dFdy(%s.xy);", v.fsIn());
381 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y," 397 fragBuilder->codeAppendf("vec2 gF = vec2(2.0 * %s.x * duvdx.x - duvd x.y,"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 class GrGLCubicEffect : public GrGLSLGeometryProcessor { 509 class GrGLCubicEffect : public GrGLSLGeometryProcessor {
494 public: 510 public:
495 GrGLCubicEffect(const GrGeometryProcessor&); 511 GrGLCubicEffect(const GrGeometryProcessor&);
496 512
497 void onEmitCode(EmitArgs&, GrGPArgs*) override; 513 void onEmitCode(EmitArgs&, GrGPArgs*) override;
498 514
499 static inline void GenKey(const GrGeometryProcessor&, 515 static inline void GenKey(const GrGeometryProcessor&,
500 const GrGLSLCaps&, 516 const GrGLSLCaps&,
501 GrProcessorKeyBuilder*); 517 GrProcessorKeyBuilder*);
502 518
503 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcess or& primProc, 519 void setData(const GrGLSLProgramDataManager& pdman,
504 FPCoordTransformIter&& transformIter) override { 520 const GrPrimitiveProcessor& primProc) override {
505 const GrCubicEffect& ce = primProc.cast<GrCubicEffect>(); 521 const GrCubicEffect& ce = primProc.cast<GrCubicEffect>();
506 522
507 if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMa trix())) { 523 if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMa trix())) {
508 fViewMatrix = ce.viewMatrix(); 524 fViewMatrix = ce.viewMatrix();
509 float viewMatrix[3 * 3]; 525 float viewMatrix[3 * 3];
510 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); 526 GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix);
511 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); 527 pdman.setMatrix3f(fViewMatrixUniform, viewMatrix);
512 } 528 }
513 529
514 if (ce.color() != fColor) { 530 if (ce.color() != fColor) {
515 float c[4]; 531 float c[4];
516 GrColorToRGBAFloat(ce.color(), c); 532 GrColorToRGBAFloat(ce.color(), c);
517 pdman.set4fv(fColorUniform, 1, c); 533 pdman.set4fv(fColorUniform, 1, c);
518 fColor = ce.color(); 534 fColor = ce.color();
519 } 535 }
520 this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter);
521 } 536 }
522 537
523 private: 538 private:
524 SkMatrix fViewMatrix; 539 SkMatrix fViewMatrix;
525 GrColor fColor; 540 GrColor fColor;
526 GrPrimitiveEdgeType fEdgeType; 541 GrPrimitiveEdgeType fEdgeType;
527 UniformHandle fColorUniform; 542 UniformHandle fColorUniform;
528 UniformHandle fViewMatrixUniform; 543 UniformHandle fViewMatrixUniform;
529 544
530 typedef GrGLSLGeometryProcessor INHERITED; 545 typedef GrGLSLGeometryProcessor INHERITED;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 gp.inPosition()->fName, 577 gp.inPosition()->fName,
563 gp.viewMatrix(), 578 gp.viewMatrix(),
564 &fViewMatrixUniform); 579 &fViewMatrixUniform);
565 580
566 // emit transforms with position 581 // emit transforms with position
567 this->emitTransforms(vertBuilder, 582 this->emitTransforms(vertBuilder,
568 varyingHandler, 583 varyingHandler,
569 uniformHandler, 584 uniformHandler,
570 gpArgs->fPositionVar, 585 gpArgs->fPositionVar,
571 gp.inPosition()->fName, 586 gp.inPosition()->fName,
572 args.fFPCoordTransformHandler); 587 args.fTransformsIn,
588 args.fTransformsOut);
573 589
574 590
575 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on); 591 GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecisi on);
576 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 592 GrGLSLShaderVar dklmdx("dklmdx", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
577 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision); 593 GrGLSLShaderVar dklmdy("dklmdy", kVec3f_GrSLType, 0, kHigh_GrSLPrecision);
578 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 594 GrGLSLShaderVar dfdx("dfdx", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
579 GrGLSLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 595 GrGLSLShaderVar dfdy("dfdy", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
580 GrGLSLShaderVar gF("gF", kVec2f_GrSLType, 0, kHigh_GrSLPrecision); 596 GrGLSLShaderVar gF("gF", kVec2f_GrSLType, 0, kHigh_GrSLPrecision);
581 GrGLSLShaderVar gFM("gFM", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 597 GrGLSLShaderVar gFM("gFM", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
582 GrGLSLShaderVar func("func", kFloat_GrSLType, 0, kHigh_GrSLPrecision); 598 GrGLSLShaderVar func("func", kFloat_GrSLType, 0, kHigh_GrSLPrecision);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 sk_sp<GrGeometryProcessor> gp; 719 sk_sp<GrGeometryProcessor> gp;
704 do { 720 do {
705 GrPrimitiveEdgeType edgeType = 721 GrPrimitiveEdgeType edgeType =
706 static_cast<GrPrimitiveEdgeType>( 722 static_cast<GrPrimitiveEdgeType>(
707 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt)); 723 d->fRandom->nextULessThan(kGrProcessorEdgeTypeCnt));
708 gp = GrCubicEffect::Make(GrRandomColor(d->fRandom), 724 gp = GrCubicEffect::Make(GrRandomColor(d->fRandom),
709 GrTest::TestMatrix(d->fRandom), edgeType, *d->f Caps); 725 GrTest::TestMatrix(d->fRandom), edgeType, *d->f Caps);
710 } while (nullptr == gp); 726 } while (nullptr == gp);
711 return gp; 727 return gp;
712 } 728 }
OLDNEW
« no previous file with comments | « src/gpu/batches/GrPLSPathRenderer.cpp ('k') | src/gpu/effects/GrBitmapTextGeoProc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698