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

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

Issue 1467553002: New API for computing optimization invariants. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 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
« no previous file with comments | « src/gpu/GrDrawTarget.cpp ('k') | src/gpu/GrPathProcessor.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 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 "GrBatchFlushState.h" 10 #include "GrBatchFlushState.h"
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 fGeoData[i].fColor, 660 fGeoData[i].fColor,
661 fGeoData[i].fDevBounds.fLeft, fGeoData[i].fDevBounds. fTop, 661 fGeoData[i].fDevBounds.fLeft, fGeoData[i].fDevBounds. fTop,
662 fGeoData[i].fDevBounds.fRight, fGeoData[i].fDevBounds .fBottom, 662 fGeoData[i].fDevBounds.fRight, fGeoData[i].fDevBounds .fBottom,
663 fGeoData[i].fInnerRadius, 663 fGeoData[i].fInnerRadius,
664 fGeoData[i].fOuterRadius); 664 fGeoData[i].fOuterRadius);
665 } 665 }
666 string.append(INHERITED::dumpInfo()); 666 string.append(INHERITED::dumpInfo());
667 return string; 667 return string;
668 } 668 }
669 669
670 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 670 void computePipelineOptimizations(GrInitInvariantOutput* color,
671 GrInitInvariantOutput* coverage,
672 GrBatchToXPOverrides* overrides) const ove rride {
671 // When this is called on a batch, there is only one geometry bundle 673 // When this is called on a batch, there is only one geometry bundle
672 out->setKnownFourComponents(fGeoData[0].fColor); 674 color->setKnownFourComponents(fGeoData[0].fColor);
673 } 675 coverage->setUnknownSingleComponent();
674 676 overrides->fUsePLSDstRead = false;
675 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override {
676 out->setUnknownSingleComponent();
677 } 677 }
678 678
679 private: 679 private:
680 void initBatchTracker(const GrPipelineOptimizations& opt) override { 680 void initBatchTracker(const GrXPOverridesForBatch& overrides) override {
681 // Handle any color overrides 681 // Handle any color overrides
682 if (!opt.readsColor()) { 682 if (!overrides.readsColor()) {
683 fGeoData[0].fColor = GrColor_ILLEGAL; 683 fGeoData[0].fColor = GrColor_ILLEGAL;
684 } 684 }
685 opt.getOverrideColorIfSet(&fGeoData[0].fColor); 685 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
686 686
687 // setup batch properties 687 // setup batch properties
688 fBatch.fColorIgnored = !opt.readsColor(); 688 fBatch.fColorIgnored = !overrides.readsColor();
689 fBatch.fColor = fGeoData[0].fColor; 689 fBatch.fColor = fGeoData[0].fColor;
690 fBatch.fStroke = fGeoData[0].fStroke; 690 fBatch.fStroke = fGeoData[0].fStroke;
691 fBatch.fUsesLocalCoords = opt.readsLocalCoords(); 691 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
692 fBatch.fCoverageIgnored = !opt.readsCoverage(); 692 fBatch.fCoverageIgnored = !overrides.readsCoverage();
693 } 693 }
694 694
695 void onPrepareDraws(Target* target) override { 695 void onPrepareDraws(Target* target) override {
696 SkMatrix invert; 696 SkMatrix invert;
697 if (!this->viewMatrix().invert(&invert)) { 697 if (!this->viewMatrix().invert(&invert)) {
698 return; 698 return;
699 } 699 }
700 700
701 // Setup geometry processor 701 // Setup geometry processor
702 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(), 702 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo r(),
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 SkScalar fInnerXRadius; 880 SkScalar fInnerXRadius;
881 SkScalar fInnerYRadius; 881 SkScalar fInnerYRadius;
882 GrColor fColor; 882 GrColor fColor;
883 bool fStroke; 883 bool fStroke;
884 }; 884 };
885 885
886 static GrDrawBatch* Create(const Geometry& geometry) { return new EllipseBat ch(geometry); } 886 static GrDrawBatch* Create(const Geometry& geometry) { return new EllipseBat ch(geometry); }
887 887
888 const char* name() const override { return "EllipseBatch"; } 888 const char* name() const override { return "EllipseBatch"; }
889 889
890 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 890 void computePipelineOptimizations(GrInitInvariantOutput* color,
891 GrInitInvariantOutput* coverage,
892 GrBatchToXPOverrides* overrides) const ove rride {
891 // When this is called on a batch, there is only one geometry bundle 893 // When this is called on a batch, there is only one geometry bundle
892 out->setKnownFourComponents(fGeoData[0].fColor); 894 color->setKnownFourComponents(fGeoData[0].fColor);
893 } 895 coverage->setUnknownSingleComponent();
894 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { 896 overrides->fUsePLSDstRead = false;
895 out->setUnknownSingleComponent();
896 } 897 }
897 898
898 private: 899 private:
899 void initBatchTracker(const GrPipelineOptimizations& opt) override { 900 void initBatchTracker(const GrXPOverridesForBatch& overrides) override {
900 // Handle any color overrides 901 // Handle any color overrides
901 if (!opt.readsCoverage()) { 902 if (!overrides.readsCoverage()) {
902 fGeoData[0].fColor = GrColor_ILLEGAL; 903 fGeoData[0].fColor = GrColor_ILLEGAL;
903 } 904 }
904 opt.getOverrideColorIfSet(&fGeoData[0].fColor); 905 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
905 906
906 // setup batch properties 907 // setup batch properties
907 fBatch.fColorIgnored = !opt.readsColor(); 908 fBatch.fColorIgnored = !overrides.readsColor();
908 fBatch.fColor = fGeoData[0].fColor; 909 fBatch.fColor = fGeoData[0].fColor;
909 fBatch.fStroke = fGeoData[0].fStroke; 910 fBatch.fStroke = fGeoData[0].fStroke;
910 fBatch.fUsesLocalCoords = opt.readsLocalCoords(); 911 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
911 fBatch.fCoverageIgnored = !opt.readsCoverage(); 912 fBatch.fCoverageIgnored = !overrides.readsCoverage();
912 } 913 }
913 914
914 void onPrepareDraws(Target* target) override { 915 void onPrepareDraws(Target* target) override {
915 SkMatrix invert; 916 SkMatrix invert;
916 if (!this->viewMatrix().invert(&invert)) { 917 if (!this->viewMatrix().invert(&invert)) {
917 return; 918 return;
918 } 919 }
919 920
920 // Setup geometry processor 921 // Setup geometry processor
921 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(), 922 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col or(),
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 GrColor fColor; 1152 GrColor fColor;
1152 DIEllipseEdgeEffect::Mode fMode; 1153 DIEllipseEdgeEffect::Mode fMode;
1153 }; 1154 };
1154 1155
1155 static GrDrawBatch* Create(const Geometry& geometry, const SkRect& bounds) { 1156 static GrDrawBatch* Create(const Geometry& geometry, const SkRect& bounds) {
1156 return new DIEllipseBatch(geometry, bounds); 1157 return new DIEllipseBatch(geometry, bounds);
1157 } 1158 }
1158 1159
1159 const char* name() const override { return "DIEllipseBatch"; } 1160 const char* name() const override { return "DIEllipseBatch"; }
1160 1161
1161 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 1162 void computePipelineOptimizations(GrInitInvariantOutput* color,
1163 GrInitInvariantOutput* coverage,
1164 GrBatchToXPOverrides* overrides) const ove rride {
1162 // When this is called on a batch, there is only one geometry bundle 1165 // When this is called on a batch, there is only one geometry bundle
1163 out->setKnownFourComponents(fGeoData[0].fColor); 1166 color->setKnownFourComponents(fGeoData[0].fColor);
1164 } 1167 coverage->setUnknownSingleComponent();
1165 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { 1168 overrides->fUsePLSDstRead = false;
1166 out->setUnknownSingleComponent();
1167 } 1169 }
1168 1170
1169 private: 1171 private:
1170 1172
1171 void initBatchTracker(const GrPipelineOptimizations& opt) override { 1173 void initBatchTracker(const GrXPOverridesForBatch& overrides) override {
1172 // Handle any color overrides 1174 // Handle any color overrides
1173 if (!opt.readsColor()) { 1175 if (!overrides.readsColor()) {
1174 fGeoData[0].fColor = GrColor_ILLEGAL; 1176 fGeoData[0].fColor = GrColor_ILLEGAL;
1175 } 1177 }
1176 opt.getOverrideColorIfSet(&fGeoData[0].fColor); 1178 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
1177 1179
1178 // setup batch properties 1180 // setup batch properties
1179 fBatch.fColorIgnored = !opt.readsColor(); 1181 fBatch.fColorIgnored = !overrides.readsColor();
1180 fBatch.fColor = fGeoData[0].fColor; 1182 fBatch.fColor = fGeoData[0].fColor;
1181 fBatch.fMode = fGeoData[0].fMode; 1183 fBatch.fMode = fGeoData[0].fMode;
1182 fBatch.fUsesLocalCoords = opt.readsLocalCoords(); 1184 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
1183 fBatch.fCoverageIgnored = !opt.readsCoverage(); 1185 fBatch.fCoverageIgnored = !overrides.readsCoverage();
1184 } 1186 }
1185 1187
1186 void onPrepareDraws(Target* target) override { 1188 void onPrepareDraws(Target* target) override {
1187 // Setup geometry processor 1189 // Setup geometry processor
1188 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c olor(), 1190 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c olor(),
1189 this->v iewMatrix(), 1191 this->v iewMatrix(),
1190 this->m ode(), 1192 this->m ode(),
1191 this->u sesLocalCoords())); 1193 this->u sesLocalCoords()));
1192 1194
1193 target->initDraw(gp, this->pipeline()); 1195 target->initDraw(gp, this->pipeline());
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
1506 GrColor fColor; 1508 GrColor fColor;
1507 bool fStroke; 1509 bool fStroke;
1508 }; 1510 };
1509 1511
1510 static GrDrawBatch* Create(const Geometry& geometry) { 1512 static GrDrawBatch* Create(const Geometry& geometry) {
1511 return new RRectCircleRendererBatch(geometry); 1513 return new RRectCircleRendererBatch(geometry);
1512 } 1514 }
1513 1515
1514 const char* name() const override { return "RRectCircleBatch"; } 1516 const char* name() const override { return "RRectCircleBatch"; }
1515 1517
1516 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 1518 void computePipelineOptimizations(GrInitInvariantOutput* color,
1519 GrInitInvariantOutput* coverage,
1520 GrBatchToXPOverrides* overrides) const ove rride {
1517 // When this is called on a batch, there is only one geometry bundle 1521 // When this is called on a batch, there is only one geometry bundle
1518 out->setKnownFourComponents(fGeoData[0].fColor); 1522 color->setKnownFourComponents(fGeoData[0].fColor);
1519 } 1523 coverage->setUnknownSingleComponent();
1520 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { 1524 overrides->fUsePLSDstRead = false;
1521 out->setUnknownSingleComponent();
1522 } 1525 }
1523 1526
1524 private: 1527 private:
1525 void initBatchTracker(const GrPipelineOptimizations& opt) override { 1528 void initBatchTracker(const GrXPOverridesForBatch& overrides) override {
1526 // Handle any color overrides 1529 // Handle any color overrides
1527 if (!opt.readsColor()) { 1530 if (!overrides.readsColor()) {
1528 fGeoData[0].fColor = GrColor_ILLEGAL; 1531 fGeoData[0].fColor = GrColor_ILLEGAL;
1529 } 1532 }
1530 opt.getOverrideColorIfSet(&fGeoData[0].fColor); 1533 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
1531 1534
1532 // setup batch properties 1535 // setup batch properties
1533 fBatch.fColorIgnored = !opt.readsColor(); 1536 fBatch.fColorIgnored = !overrides.readsColor();
1534 fBatch.fColor = fGeoData[0].fColor; 1537 fBatch.fColor = fGeoData[0].fColor;
1535 fBatch.fStroke = fGeoData[0].fStroke; 1538 fBatch.fStroke = fGeoData[0].fStroke;
1536 fBatch.fUsesLocalCoords = opt.readsLocalCoords(); 1539 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
1537 fBatch.fCoverageIgnored = !opt.readsCoverage(); 1540 fBatch.fCoverageIgnored = !overrides.readsCoverage();
1538 } 1541 }
1539 1542
1540 void onPrepareDraws(Target* target) override { 1543 void onPrepareDraws(Target* target) override {
1541 // reset to device coordinates 1544 // reset to device coordinates
1542 SkMatrix invert; 1545 SkMatrix invert;
1543 if (!this->viewMatrix().invert(&invert)) { 1546 if (!this->viewMatrix().invert(&invert)) {
1544 SkDebugf("Failed to invert\n"); 1547 SkDebugf("Failed to invert\n");
1545 return; 1548 return;
1546 } 1549 }
1547 1550
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 GrColor fColor; 1688 GrColor fColor;
1686 bool fStroke; 1689 bool fStroke;
1687 }; 1690 };
1688 1691
1689 static GrDrawBatch* Create(const Geometry& geometry) { 1692 static GrDrawBatch* Create(const Geometry& geometry) {
1690 return new RRectEllipseRendererBatch(geometry); 1693 return new RRectEllipseRendererBatch(geometry);
1691 } 1694 }
1692 1695
1693 const char* name() const override { return "RRectEllipseRendererBatch"; } 1696 const char* name() const override { return "RRectEllipseRendererBatch"; }
1694 1697
1695 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 1698 void computePipelineOptimizations(GrInitInvariantOutput* color,
1699 GrInitInvariantOutput* coverage,
1700 GrBatchToXPOverrides* overrides) const ove rride {
1696 // When this is called on a batch, there is only one geometry bundle 1701 // When this is called on a batch, there is only one geometry bundle
1697 out->setKnownFourComponents(fGeoData[0].fColor); 1702 color->setKnownFourComponents(fGeoData[0].fColor);
1698 } 1703 coverage->setUnknownSingleComponent();
1699 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { 1704 overrides->fUsePLSDstRead = false;
1700 out->setUnknownSingleComponent();
1701 } 1705 }
1702 1706
1703 private: 1707 private:
1704 void initBatchTracker(const GrPipelineOptimizations& opt) override { 1708 void initBatchTracker(const GrXPOverridesForBatch& overrides) override {
1705 // Handle any color overrides 1709 // Handle any color overrides
1706 if (!opt.readsColor()) { 1710 if (!overrides.readsColor()) {
1707 fGeoData[0].fColor = GrColor_ILLEGAL; 1711 fGeoData[0].fColor = GrColor_ILLEGAL;
1708 } 1712 }
1709 opt.getOverrideColorIfSet(&fGeoData[0].fColor); 1713 overrides.getOverrideColorIfSet(&fGeoData[0].fColor);
1710 1714
1711 // setup batch properties 1715 // setup batch properties
1712 fBatch.fColorIgnored = !opt.readsColor(); 1716 fBatch.fColorIgnored = !overrides.readsColor();
1713 fBatch.fColor = fGeoData[0].fColor; 1717 fBatch.fColor = fGeoData[0].fColor;
1714 fBatch.fStroke = fGeoData[0].fStroke; 1718 fBatch.fStroke = fGeoData[0].fStroke;
1715 fBatch.fUsesLocalCoords = opt.readsLocalCoords(); 1719 fBatch.fUsesLocalCoords = overrides.readsLocalCoords();
1716 fBatch.fCoverageIgnored = !opt.readsCoverage(); 1720 fBatch.fCoverageIgnored = !overrides.readsCoverage();
1717 } 1721 }
1718 1722
1719 void onPrepareDraws(Target* target) override { 1723 void onPrepareDraws(Target* target) override {
1720 // reset to device coordinates 1724 // reset to device coordinates
1721 SkMatrix invert; 1725 SkMatrix invert;
1722 if (!this->viewMatrix().invert(&invert)) { 1726 if (!this->viewMatrix().invert(&invert)) {
1723 SkDebugf("Failed to invert\n"); 1727 SkDebugf("Failed to invert\n");
1724 return; 1728 return;
1725 } 1729 }
1726 1730
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
2073 } 2077 }
2074 2078
2075 DRAW_BATCH_TEST_DEFINE(RRectBatch) { 2079 DRAW_BATCH_TEST_DEFINE(RRectBatch) {
2076 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); 2080 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random);
2077 GrColor color = GrRandomColor(random); 2081 GrColor color = GrRandomColor(random);
2078 const SkRRect& rrect = GrTest::TestRRectSimple(random); 2082 const SkRRect& rrect = GrTest::TestRRectSimple(random);
2079 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra ndom)); 2083 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra ndom));
2080 } 2084 }
2081 2085
2082 #endif 2086 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.cpp ('k') | src/gpu/GrPathProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698