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

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

Issue 746423007: Draft change to start pulling uniform color into GP (Closed) Base URL: https://skia.googlesource.com/skia.git@no_factories
Patch Set: missed some places to update uniform cache Created 6 years 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 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrAAConvexPathRenderer.h" 9 #include "GrAAConvexPathRenderer.h"
10 10
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 virtual ~QuadEdgeEffect() {} 512 virtual ~QuadEdgeEffect() {}
513 513
514 virtual const char* name() const SK_OVERRIDE { return "QuadEdge"; } 514 virtual const char* name() const SK_OVERRIDE { return "QuadEdge"; }
515 515
516 const GrAttribute* inPosition() const { return fInPosition; } 516 const GrAttribute* inPosition() const { return fInPosition; }
517 const GrAttribute* inQuadEdge() const { return fInQuadEdge; } 517 const GrAttribute* inQuadEdge() const { return fInQuadEdge; }
518 518
519 class GLProcessor : public GrGLGeometryProcessor { 519 class GLProcessor : public GrGLGeometryProcessor {
520 public: 520 public:
521 GLProcessor(const GrGeometryProcessor&, 521 GLProcessor(const GrGeometryProcessor&,
522 const GrBatchTracker&) {} 522 const GrBatchTracker&)
523 : fColor(GrColor_ILLEGAL) {}
523 524
524 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { 525 virtual void emitCode(const EmitArgs& args) SK_OVERRIDE {
525 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>(); 526 const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>();
526 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); 527 GrGLGPBuilder* pb = args.fPB;
528 GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder();
527 529
528 GrGLVertToFrag v(kVec4f_GrSLType); 530 GrGLVertToFrag v(kVec4f_GrSLType);
529 args.fPB->addVarying("QuadEdge", &v); 531 args.fPB->addVarying("QuadEdge", &v);
530 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName ); 532 vsBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.inQuadEdge()->fName );
531 533
534 const BatchTracker& local = args.fBT.cast<BatchTracker>();
535
536 // Setup pass through color
537 this->setupColor(pb, local.fInputColorType, args.fOutputColor, NULL, &fColorUniform);
538
532 // setup coord outputs 539 // setup coord outputs
533 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i nPosition()->fName); 540 vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), qe.i nPosition()->fName);
534 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo sition()->fName); 541 vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), qe.inPo sition()->fName);
535 542
536 // setup position varying 543 // setup position varying
537 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(), 544 vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPositi on(),
538 vsBuilder->uViewM(), qe.inPosition()->fName); 545 vsBuilder->uViewM(), qe.inPosition()->fName);
539 546
540 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r(); 547 GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilde r();
541 548
(...skipping 13 matching lines...) Expand all
555 " 2.0*%s.x*duvdy.x - duvdy.y);" , 562 " 2.0*%s.x*duvdy.x - duvdy.y);" ,
556 v.fsIn(), v.fsIn()); 563 v.fsIn(), v.fsIn());
557 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(), v.fsIn(), 564 fsBuilder->codeAppendf("edgeAlpha = (%s.x*%s.x - %s.y);", v.fsIn(), v.fsIn(),
558 v.fsIn()); 565 v.fsIn());
559 fsBuilder->codeAppendf("edgeAlpha = " 566 fsBuilder->codeAppendf("edgeAlpha = "
560 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0 );}"); 567 "clamp(0.5 - edgeAlpha / length(gF), 0.0, 1.0 );}");
561 568
562 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage ); 569 fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage );
563 } 570 }
564 571
565 static inline void GenKey(const GrGeometryProcessor&, 572 static inline void GenKey(const GrGeometryProcessor& gp,
566 const GrBatchTracker&, 573 const GrBatchTracker& bt,
567 const GrGLCaps&, 574 const GrGLCaps&,
568 GrProcessorKeyBuilder*) {} 575 GrProcessorKeyBuilder* b) {
576 const BatchTracker& local = bt.cast<BatchTracker>();
577 b->add32(local.fInputColorType);
578 }
569 579
570 virtual void setData(const GrGLProgramDataManager&, 580 virtual void setData(const GrGLProgramDataManager& pdman,
571 const GrGeometryProcessor&, 581 const GrGeometryProcessor& gp,
572 const GrBatchTracker&) SK_OVERRIDE {} 582 const GrBatchTracker& bt) SK_OVERRIDE {
583 const BatchTracker& local = bt.cast<BatchTracker>();
584 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != f Color) {
585 GrGLfloat c[4];
586 GrColorToRGBAFloat(local.fColor, c);
587 pdman.set4fv(fColorUniform, 1, c);
588 fColor = local.fColor;
589 }
590 }
573 591
574 private: 592 private:
593 GrColor fColor;
594 UniformHandle fColorUniform;
595
575 typedef GrGLGeometryProcessor INHERITED; 596 typedef GrGLGeometryProcessor INHERITED;
576 }; 597 };
577 598
578 virtual void getGLProcessorKey(const GrBatchTracker& bt, 599 virtual void getGLProcessorKey(const GrBatchTracker& bt,
579 const GrGLCaps& caps, 600 const GrGLCaps& caps,
580 GrProcessorKeyBuilder* b) const SK_OVERRIDE { 601 GrProcessorKeyBuilder* b) const SK_OVERRIDE {
581 GLProcessor::GenKey(*this, bt, caps, b); 602 GLProcessor::GenKey(*this, bt, caps, b);
582 } 603 }
583 604
584 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE { 605 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE {
585 return SkNEW_ARGS(GLProcessor, (*this, bt)); 606 return SkNEW_ARGS(GLProcessor, (*this, bt));
586 } 607 }
587 608
609 void initBatchTracker(GrBatchTracker* bt, const InitBT& init) const SK_OVERR IDE {
610 BatchTracker* local = bt->cast<BatchTracker>();
611 local->fInputColorType = GetColorInputType(&local->fColor, this->color() , init, false);
612 }
613
614 bool onCanMakeEqual(const GrBatchTracker& m, const GrBatchTracker& t) const SK_OVERRIDE {
615 const BatchTracker& mine = m.cast<BatchTracker>();
616 const BatchTracker& theirs = t.cast<BatchTracker>();
617 return CanCombineOutput(mine.fInputColorType, mine.fColor,
618 theirs.fInputColorType, theirs.fColor);
619 }
620
588 private: 621 private:
589 QuadEdgeEffect(GrColor color) : INHERITED(color) { 622 QuadEdgeEffect(GrColor color) : INHERITED(color) {
590 this->initClassID<QuadEdgeEffect>(); 623 this->initClassID<QuadEdgeEffect>();
591 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType)); 624 fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_Gr VertexAttribType));
592 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr VertexAttribType)); 625 fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_Gr VertexAttribType));
593 } 626 }
594 627
595 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE { 628 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE {
596 return true; 629 return true;
597 } 630 }
598 631
599 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 632 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
600 out->setUnknownSingleComponent(); 633 out->setUnknownSingleComponent();
601 } 634 }
602 635
636 struct BatchTracker {
637 GrGPInput fInputColorType;
638 GrColor fColor;
639 };
640
603 const GrAttribute* fInPosition; 641 const GrAttribute* fInPosition;
604 const GrAttribute* fInQuadEdge; 642 const GrAttribute* fInQuadEdge;
605 643
606 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 644 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
607 645
608 typedef GrGeometryProcessor INHERITED; 646 typedef GrGeometryProcessor INHERITED;
609 }; 647 };
610 648
611 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect); 649 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(QuadEdgeEffect);
612 650
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 vOffset, // start vertex 751 vOffset, // start vertex
714 0, // start index 752 0, // start index
715 draw.fVertexCnt, 753 draw.fVertexCnt,
716 draw.fIndexCnt, 754 draw.fIndexCnt,
717 &devBounds); 755 &devBounds);
718 vOffset += draw.fVertexCnt; 756 vOffset += draw.fVertexCnt;
719 } 757 }
720 758
721 return true; 759 return true;
722 } 760 }
OLDNEW
« no previous file with comments | « gyp/gpu.gypi ('k') | src/gpu/GrDefaultGeoProcFactory.cpp » ('j') | src/gpu/GrGeometryProcessor.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698