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

Side by Side Diff: src/gpu/batches/GrPLSPathRenderer.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/GrMSAAPathRenderer.cpp ('k') | src/gpu/effects/GrBezierEffect.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 2015 Google Inc. 2 * Copyright 2015 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 "GrPLSPathRenderer.h" 8 #include "GrPLSPathRenderer.h"
9 9
10 #include "SkChunkAlloc.h" 10 #include "SkChunkAlloc.h"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;", 326 vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
327 delta3.vsOut(), v3.vsOut(), v1.vsOut(), v1.vs Out(), v3.vsOut()); 327 delta3.vsOut(), v3.vsOut(), v1.vsOut(), v1.vs Out(), v3.vsOut());
328 328
329 GrGLSLVertToFrag windings(kInt_GrSLType); 329 GrGLSLVertToFrag windings(kInt_GrSLType);
330 varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPreci sion); 330 varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPreci sion);
331 vsBuilder->codeAppendf("%s = %s;", 331 vsBuilder->codeAppendf("%s = %s;",
332 windings.vsOut(), te.inWindings()->fName); 332 windings.vsOut(), te.inWindings()->fName);
333 333
334 // emit transforms 334 // emit transforms
335 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar, 335 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar,
336 te.inPosition()->fName, te.localMatrix(), 336 te.inPosition()->fName, te.localMatrix(), args. fTransformsIn,
337 args.fFPCoordTransformHandler); 337 args.fTransformsOut);
338 338
339 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder; 339 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
340 SkAssertResult(fsBuilder->enableFeature( 340 SkAssertResult(fsBuilder->enableFeature(
341 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature)); 341 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature));
342 SkAssertResult(fsBuilder->enableFeature( 342 SkAssertResult(fsBuilder->enableFeature(
343 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e)); 343 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
344 fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL); 344 fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL);
345 // Compute four subsamples, each shifted a quarter pixel along x and y from 345 // Compute four subsamples, each shifted a quarter pixel along x and y from
346 // gl_FragCoord. The oriented box positioning of the subsamples is o f course not 346 // gl_FragCoord. The oriented box positioning of the subsamples is o f course not
347 // optimal, but it greatly simplifies the math and this simplificati on is necessary for 347 // optimal, but it greatly simplifies the math and this simplificati on is necessary for
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 384
385 static inline void GenKey(const GrGeometryProcessor& gp, 385 static inline void GenKey(const GrGeometryProcessor& gp,
386 const GrGLSLCaps&, 386 const GrGLSLCaps&,
387 GrProcessorKeyBuilder* b) { 387 GrProcessorKeyBuilder* b) {
388 const PLSAATriangleEffect& te = gp.cast<PLSAATriangleEffect>(); 388 const PLSAATriangleEffect& te = gp.cast<PLSAATriangleEffect>();
389 uint32_t key = 0; 389 uint32_t key = 0;
390 key |= te.localMatrix().hasPerspective() ? 0x1 : 0x0; 390 key |= te.localMatrix().hasPerspective() ? 0x1 : 0x0;
391 b->add32(key); 391 b->add32(key);
392 } 392 }
393 393
394 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitivePro cessor& gp, 394 virtual void setData(const GrGLSLProgramDataManager& pdman,
395 FPCoordTransformIter&& transformIter) override { 395 const GrPrimitiveProcessor& gp) override {
396 this->setTransformDataHelper(gp.cast<PLSAATriangleEffect>().fLocalMa trix, pdman, 396 }
397 &transformIter); 397
398 void setTransformData(const GrPrimitiveProcessor& primProc,
399 const GrGLSLProgramDataManager& pdman,
400 int index,
401 const SkTArray<const GrCoordTransform*, true>& tra nsforms) override {
402 this->setTransformDataHelper(primProc.cast<PLSAATriangleEffect>().fL ocalMatrix, pdman,
403 index, transforms);
398 } 404 }
399 405
400 private: 406 private:
401 typedef GrGLSLGeometryProcessor INHERITED; 407 typedef GrGLSLGeometryProcessor INHERITED;
402 }; 408 };
403 409
404 virtual void getGLSLProcessorKey(const GrGLSLCaps& caps, 410 virtual void getGLSLProcessorKey(const GrGLSLCaps& caps,
405 GrProcessorKeyBuilder* b) const override { 411 GrProcessorKeyBuilder* b) const override {
406 GLSLProcessor::GenKey(*this, caps, b); 412 GLSLProcessor::GenKey(*this, caps, b);
407 } 413 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 GrGLSLVertToFrag windings(kInt_GrSLType); 515 GrGLSLVertToFrag windings(kInt_GrSLType);
510 varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPreci sion); 516 varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPreci sion);
511 vsBuilder->codeAppendf("%s = %s;", 517 vsBuilder->codeAppendf("%s = %s;",
512 windings.vsOut(), qe.inWindings()->fName); 518 windings.vsOut(), qe.inWindings()->fName);
513 519
514 // Setup position 520 // Setup position
515 this->setupPosition(vsBuilder, gpArgs, qe.inPosition()->fName); 521 this->setupPosition(vsBuilder, gpArgs, qe.inPosition()->fName);
516 522
517 // emit transforms 523 // emit transforms
518 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar, 524 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar,
519 qe.inPosition()->fName, qe.localMatrix(), 525 qe.inPosition()->fName, qe.localMatrix(), args. fTransformsIn,
520 args.fFPCoordTransformHandler); 526 args.fTransformsOut);
521 527
522 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder; 528 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
523 SkAssertResult(fsBuilder->enableFeature( 529 SkAssertResult(fsBuilder->enableFeature(
524 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature)); 530 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature));
525 SkAssertResult(fsBuilder->enableFeature( 531 SkAssertResult(fsBuilder->enableFeature(
526 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e)); 532 GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeatur e));
527 static const int QUAD_ARGS = 2; 533 static const int QUAD_ARGS = 2;
528 GrGLSLShaderVar inQuadArgs[QUAD_ARGS] = { 534 GrGLSLShaderVar inQuadArgs[QUAD_ARGS] = {
529 GrGLSLShaderVar("dot", kFloat_GrSLType, 0, kHigh_GrSLPrecision), 535 GrGLSLShaderVar("dot", kFloat_GrSLType, 0, kHigh_GrSLPrecision),
530 GrGLSLShaderVar("uv", kVec2f_GrSLType, 0, kHigh_GrSLPrecision) 536 GrGLSLShaderVar("uv", kVec2f_GrSLType, 0, kHigh_GrSLPrecision)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 574
569 static inline void GenKey(const GrGeometryProcessor& gp, 575 static inline void GenKey(const GrGeometryProcessor& gp,
570 const GrGLSLCaps&, 576 const GrGLSLCaps&,
571 GrProcessorKeyBuilder* b) { 577 GrProcessorKeyBuilder* b) {
572 const PLSQuadEdgeEffect& qee = gp.cast<PLSQuadEdgeEffect>(); 578 const PLSQuadEdgeEffect& qee = gp.cast<PLSQuadEdgeEffect>();
573 uint32_t key = 0; 579 uint32_t key = 0;
574 key |= qee.usesLocalCoords() && qee.localMatrix().hasPerspective() ? 0x1 : 0x0; 580 key |= qee.usesLocalCoords() && qee.localMatrix().hasPerspective() ? 0x1 : 0x0;
575 b->add32(key); 581 b->add32(key);
576 } 582 }
577 583
578 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitivePro cessor& gp, 584 virtual void setData(const GrGLSLProgramDataManager& pdman,
579 FPCoordTransformIter&& transformIter) override { 585 const GrPrimitiveProcessor& gp) override {
580 this->setTransformDataHelper(gp.cast<PLSQuadEdgeEffect>().fLocalMatr ix, pdman, 586 }
581 &transformIter); 587
588 void setTransformData(const GrPrimitiveProcessor& primProc,
589 const GrGLSLProgramDataManager& pdman,
590 int index,
591 const SkTArray<const GrCoordTransform*, true>& tra nsforms) override {
592 this->setTransformDataHelper(primProc.cast<PLSQuadEdgeEffect>().fLoc alMatrix, pdman,
593 index, transforms);
582 } 594 }
583 595
584 private: 596 private:
585 typedef GrGLSLGeometryProcessor INHERITED; 597 typedef GrGLSLGeometryProcessor INHERITED;
586 }; 598 };
587 599
588 virtual void getGLSLProcessorKey(const GrGLSLCaps& caps, 600 virtual void getGLSLProcessorKey(const GrGLSLCaps& caps,
589 GrProcessorKeyBuilder* b) const override { 601 GrProcessorKeyBuilder* b) const override {
590 GLSLProcessor::GenKey(*this, caps, b); 602 GLSLProcessor::GenKey(*this, caps, b);
591 } 603 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; 673 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
662 674
663 fUseEvenOdd = uniformHandler->addUniform(kFragment_GrShaderFlag, 675 fUseEvenOdd = uniformHandler->addUniform(kFragment_GrShaderFlag,
664 kFloat_GrSLType, kLow_GrSLPr ecision, 676 kFloat_GrSLType, kLow_GrSLPr ecision,
665 "useEvenOdd"); 677 "useEvenOdd");
666 const char* useEvenOdd = uniformHandler->getUniformCStr(fUseEvenOdd) ; 678 const char* useEvenOdd = uniformHandler->getUniformCStr(fUseEvenOdd) ;
667 679
668 varyingHandler->emitAttributes(fe); 680 varyingHandler->emitAttributes(fe);
669 this->setupPosition(vsBuilder, gpArgs, fe.inPosition()->fName); 681 this->setupPosition(vsBuilder, gpArgs, fe.inPosition()->fName);
670 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar, 682 this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpAr gs->fPositionVar,
671 fe.inPosition()->fName, fe.localMatrix(), 683 fe.inPosition()->fName, fe.localMatrix(), args. fTransformsIn,
672 args.fFPCoordTransformHandler); 684 args.fTransformsOut);
673 685
674 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder; 686 GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
675 SkAssertResult(fsBuilder->enableFeature( 687 SkAssertResult(fsBuilder->enableFeature(
676 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature)); 688 GrGLSLFragmentShaderBuilder::kPixelLocalStorage_GLSLF eature));
677 fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL); 689 fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL);
678 fsBuilder->codeAppend("float coverage;"); 690 fsBuilder->codeAppend("float coverage;");
679 fsBuilder->codeAppendf("if (%s != 0.0) {", useEvenOdd); 691 fsBuilder->codeAppendf("if (%s != 0.0) {", useEvenOdd);
680 fsBuilder->codeAppend("coverage = float(abs(pls.windings[0]) % 2) * 0.25;"); 692 fsBuilder->codeAppend("coverage = float(abs(pls.windings[0]) % 2) * 0.25;");
681 fsBuilder->codeAppend("coverage += float(abs(pls.windings[1]) % 2) * 0.25;"); 693 fsBuilder->codeAppend("coverage += float(abs(pls.windings[1]) % 2) * 0.25;");
682 fsBuilder->codeAppend("coverage += float(abs(pls.windings[2]) % 2) * 0.25;"); 694 fsBuilder->codeAppend("coverage += float(abs(pls.windings[2]) % 2) * 0.25;");
(...skipping 14 matching lines...) Expand all
697 709
698 static inline void GenKey(const GrGeometryProcessor& gp, 710 static inline void GenKey(const GrGeometryProcessor& gp,
699 const GrGLSLCaps&, 711 const GrGLSLCaps&,
700 GrProcessorKeyBuilder* b) { 712 GrProcessorKeyBuilder* b) {
701 const PLSFinishEffect& fe = gp.cast<PLSFinishEffect>(); 713 const PLSFinishEffect& fe = gp.cast<PLSFinishEffect>();
702 uint32_t key = 0; 714 uint32_t key = 0;
703 key |= fe.usesLocalCoords() && fe.localMatrix().hasPerspective() ? 0 x1 : 0x0; 715 key |= fe.usesLocalCoords() && fe.localMatrix().hasPerspective() ? 0 x1 : 0x0;
704 b->add32(key); 716 b->add32(key);
705 } 717 }
706 718
707 void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitivePro cessor& gp, 719 virtual void setData(const GrGLSLProgramDataManager& pdman,
708 FPCoordTransformIter&& transformIter) override { 720 const GrPrimitiveProcessor& gp) override {
709 const PLSFinishEffect& fe = gp.cast<PLSFinishEffect>(); 721 const PLSFinishEffect& fe = gp.cast<PLSFinishEffect>();
710 pdman.set1f(fUseEvenOdd, fe.fUseEvenOdd); 722 pdman.set1f(fUseEvenOdd, fe.fUseEvenOdd);
711 if (fe.color() != fColor && !fe.colorIgnored()) { 723 if (fe.color() != fColor && !fe.colorIgnored()) {
712 GrGLfloat c[4]; 724 GrGLfloat c[4];
713 GrColorToRGBAFloat(fe.color(), c); 725 GrColorToRGBAFloat(fe.color(), c);
714 pdman.set4fv(fColorUniform, 1, c); 726 pdman.set4fv(fColorUniform, 1, c);
715 fColor = fe.color(); 727 fColor = fe.color();
716 } 728 }
717 this->setTransformDataHelper(fe.fLocalMatrix, pdman, &transformIter) ; 729 }
730
731 void setTransformData(const GrPrimitiveProcessor& primProc,
732 const GrGLSLProgramDataManager& pdman,
733 int index,
734 const SkTArray<const GrCoordTransform*, true>& tra nsforms) override {
735 this->setTransformDataHelper(primProc.cast<PLSFinishEffect>().fLocal Matrix, pdman,
736 index, transforms);
718 } 737 }
719 738
720 private: 739 private:
721 GrColor fColor; 740 GrColor fColor;
722 UniformHandle fColorUniform; 741 UniformHandle fColorUniform;
723 UniformHandle fUseEvenOdd; 742 UniformHandle fUseEvenOdd;
724 743
725 typedef GrGLSLGeometryProcessor INHERITED; 744 typedef GrGLSLGeometryProcessor INHERITED;
726 }; 745 };
727 746
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 969
951 DRAW_BATCH_TEST_DEFINE(PLSPathBatch) { 970 DRAW_BATCH_TEST_DEFINE(PLSPathBatch) {
952 GrColor color = GrRandomColor(random); 971 GrColor color = GrRandomColor(random);
953 SkMatrix vm = GrTest::TestMatrixInvertible(random); 972 SkMatrix vm = GrTest::TestMatrixInvertible(random);
954 SkPath path = GrTest::TestPathConvex(random); 973 SkPath path = GrTest::TestPathConvex(random);
955 974
956 return new PLSPathBatch(color, path, vm); 975 return new PLSPathBatch(color, path, vm);
957 } 976 }
958 977
959 #endif 978 #endif
OLDNEW
« no previous file with comments | « src/gpu/batches/GrMSAAPathRenderer.cpp ('k') | src/gpu/effects/GrBezierEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698