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

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

Issue 1139723004: Preliminary attempt to remove batch tracker (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup5
Patch Set: tweaks Created 5 years, 7 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/GrAADistanceFieldPathRenderer.cpp ('k') | src/gpu/GrAARectRenderer.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 2011 Google Inc. 2 * Copyright 2011 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 "GrAAHairLinePathRenderer.h" 8 #include "GrAAHairLinePathRenderer.h"
9 9
10 #include "GrBatch.h" 10 #include "GrBatch.h"
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 767
768 fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()) ; 768 fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()) ;
769 this->joinBounds(that->bounds()); 769 this->joinBounds(that->bounds());
770 return true; 770 return true;
771 } 771 }
772 772
773 GrColor color() const { return fBatch.fColor; } 773 GrColor color() const { return fBatch.fColor; }
774 uint8_t coverage() const { return fBatch.fCoverage; } 774 uint8_t coverage() const { return fBatch.fCoverage; }
775 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } 775 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; }
776 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } 776 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; }
777 bool coverageIgnored() const { return fBatch.fCoverageIgnored; }
777 778
778 struct BatchTracker { 779 struct BatchTracker {
779 GrColor fColor; 780 GrColor fColor;
780 uint8_t fCoverage; 781 uint8_t fCoverage;
781 SkRect fDevBounds; 782 SkRect fDevBounds;
782 bool fUsesLocalCoords; 783 bool fUsesLocalCoords;
783 bool fColorIgnored; 784 bool fColorIgnored;
784 bool fCoverageIgnored; 785 bool fCoverageIgnored;
785 }; 786 };
786 787
(...skipping 21 matching lines...) Expand all
808 toSrc = &invert; 809 toSrc = &invert;
809 } 810 }
810 811
811 // Setup geometry processors for worst case 812 // Setup geometry processors for worst case
812 uint32_t gpFlags = GrDefaultGeoProcFactory::kPosition_GPType | 813 uint32_t gpFlags = GrDefaultGeoProcFactory::kPosition_GPType |
813 GrDefaultGeoProcFactory::kCoverage_GPType; 814 GrDefaultGeoProcFactory::kCoverage_GPType;
814 815
815 SkAutoTUnref<const GrGeometryProcessor> lineGP( 816 SkAutoTUnref<const GrGeometryProcessor> lineGP(
816 GrDefaultGeoProcFactory::Create(gpFlags, 817 GrDefaultGeoProcFactory::Create(gpFlags,
817 this->color(), 818 this->color(),
819 this->usesLocalCoords(),
820 this->coverageIgnored(),
818 *geometryProcessorViewM, 821 *geometryProcessorViewM,
819 *geometryProcessorLocalM, 822 *geometryProcessorLocalM,
820 this->coverage())); 823 this->coverage()));
821 824
822 SkAutoTUnref<const GrGeometryProcessor> quadGP( 825 SkAutoTUnref<const GrGeometryProcessor> quadGP(
823 GrQuadEffect::Create(this->color(), 826 GrQuadEffect::Create(this->color(),
824 *geometryProcessorViewM, 827 *geometryProcessorViewM,
825 kHairlineAA_GrProcessorEdgeType, 828 kHairlineAA_GrProcessorEdgeType,
826 batchTarget->caps(), 829 batchTarget->caps(),
827 *geometryProcessorLocalM, 830 *geometryProcessorLocalM,
831 this->usesLocalCoords(),
828 this->coverage())); 832 this->coverage()));
829 833
830 SkAutoTUnref<const GrGeometryProcessor> conicGP( 834 SkAutoTUnref<const GrGeometryProcessor> conicGP(
831 GrConicEffect::Create(this->color(), 835 GrConicEffect::Create(this->color(),
832 *geometryProcessorViewM, 836 *geometryProcessorViewM,
833 kHairlineAA_GrProcessorEdgeType, 837 kHairlineAA_GrProcessorEdgeType,
834 batchTarget->caps(), 838 batchTarget->caps(),
835 *geometryProcessorLocalM, 839 *geometryProcessorLocalM,
840 this->usesLocalCoords(),
836 this->coverage())); 841 this->coverage()));
837 842
838 // This is hand inlined for maximum performance. 843 // This is hand inlined for maximum performance.
839 PREALLOC_PTARRAY(128) lines; 844 PREALLOC_PTARRAY(128) lines;
840 PREALLOC_PTARRAY(128) quads; 845 PREALLOC_PTARRAY(128) quads;
841 PREALLOC_PTARRAY(128) conics; 846 PREALLOC_PTARRAY(128) conics;
842 IntArray qSubdivs; 847 IntArray qSubdivs;
843 FloatArray cWeights; 848 FloatArray cWeights;
844 int quadCount = 0; 849 int quadCount = 0;
845 850
846 int instanceCount = fGeoData.count(); 851 int instanceCount = fGeoData.count();
847 for (int i = 0; i < instanceCount; i++) { 852 for (int i = 0; i < instanceCount; i++) {
848 const Geometry& args = fGeoData[i]; 853 const Geometry& args = fGeoData[i];
849 quadCount += gather_lines_and_quads(args.fPath, args.fViewMatrix, args.f DevClipBounds, 854 quadCount += gather_lines_and_quads(args.fPath, args.fViewMatrix, args.f DevClipBounds,
850 &lines, &quads, &conics, &qSubdivs, &cWeights); 855 &lines, &quads, &conics, &qSubdivs, &cWeights);
851 } 856 }
852 857
853 int lineCount = lines.count() / 2; 858 int lineCount = lines.count() / 2;
854 int conicCount = conics.count() / 3; 859 int conicCount = conics.count() / 3;
855 860
856 // do lines first 861 // do lines first
857 if (lineCount) { 862 if (lineCount) {
858 SkAutoTUnref<const GrIndexBuffer> linesIndexBuffer( 863 SkAutoTUnref<const GrIndexBuffer> linesIndexBuffer(
859 ref_lines_index_buffer(batchTarget->resourceProvider())); 864 ref_lines_index_buffer(batchTarget->resourceProvider()));
860 batchTarget->initDraw(lineGP, pipeline); 865 batchTarget->initDraw(lineGP, pipeline);
861 866
862 // TODO remove this when batch is everywhere
863 GrPipelineInfo init;
864 init.fColorIgnored = fBatch.fColorIgnored;
865 init.fOverrideColor = GrColor_ILLEGAL;
866 init.fCoverageIgnored = fBatch.fCoverageIgnored;
867 init.fUsesLocalCoords = this->usesLocalCoords();
868 lineGP->initBatchTracker(batchTarget->currentBatchTracker(), init);
869
870 const GrVertexBuffer* vertexBuffer; 867 const GrVertexBuffer* vertexBuffer;
871 int firstVertex; 868 int firstVertex;
872 869
873 size_t vertexStride = lineGP->getVertexStride(); 870 size_t vertexStride = lineGP->getVertexStride();
874 int vertexCount = kLineSegNumVertices * lineCount; 871 int vertexCount = kLineSegNumVertices * lineCount;
875 LineVertex* verts = reinterpret_cast<LineVertex*>( 872 LineVertex* verts = reinterpret_cast<LineVertex*>(
876 batchTarget->makeVertSpace(vertexStride, vertexCount, &vertexBuffer, &firstVertex)); 873 batchTarget->makeVertSpace(vertexStride, vertexCount, &vertexBuffer, &firstVertex));
877 874
878 if (!verts|| !linesIndexBuffer) { 875 if (!verts|| !linesIndexBuffer) {
879 SkDebugf("Could not allocate vertices\n"); 876 SkDebugf("Could not allocate vertices\n");
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 } 919 }
923 920
924 // Start Conics 921 // Start Conics
925 for (int i = 0; i < conicCount; ++i) { 922 for (int i = 0; i < conicCount; ++i) {
926 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts); 923 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts);
927 } 924 }
928 925
929 if (quadCount > 0) { 926 if (quadCount > 0) {
930 batchTarget->initDraw(quadGP, pipeline); 927 batchTarget->initDraw(quadGP, pipeline);
931 928
932 // TODO remove this when batch is everywhere
933 GrPipelineInfo init;
934 init.fColorIgnored = fBatch.fColorIgnored;
935 init.fOverrideColor = GrColor_ILLEGAL;
936 init.fCoverageIgnored = fBatch.fCoverageIgnored;
937 init.fUsesLocalCoords = this->usesLocalCoords();
938 quadGP->initBatchTracker(batchTarget->currentBatchTracker(), init);
939
940 { 929 {
941 GrVertices verts; 930 GrVertices verts;
942 verts.initInstanced(kTriangles_GrPrimitiveType, vertexBuffer, qu adsIndexBuffer, 931 verts.initInstanced(kTriangles_GrPrimitiveType, vertexBuffer, qu adsIndexBuffer,
943 firstVertex, kQuadNumVertices, kIdxsPerQuad, quadCount, 932 firstVertex, kQuadNumVertices, kIdxsPerQuad, quadCount,
944 kQuadsNumInIdxBuffer); 933 kQuadsNumInIdxBuffer);
945 batchTarget->draw(verts); 934 batchTarget->draw(verts);
946 firstVertex += quadCount * kQuadNumVertices; 935 firstVertex += quadCount * kQuadNumVertices;
947 } 936 }
948 } 937 }
949 938
950 if (conicCount > 0) { 939 if (conicCount > 0) {
951 batchTarget->initDraw(conicGP, pipeline); 940 batchTarget->initDraw(conicGP, pipeline);
952 941
953 // TODO remove this when batch is everywhere
954 GrPipelineInfo init;
955 init.fColorIgnored = fBatch.fColorIgnored;
956 init.fOverrideColor = GrColor_ILLEGAL;
957 init.fCoverageIgnored = fBatch.fCoverageIgnored;
958 init.fUsesLocalCoords = this->usesLocalCoords();
959 conicGP->initBatchTracker(batchTarget->currentBatchTracker(), init);
960
961 { 942 {
962 GrVertices verts; 943 GrVertices verts;
963 verts.initInstanced(kTriangles_GrPrimitiveType, vertexBuffer, qu adsIndexBuffer, 944 verts.initInstanced(kTriangles_GrPrimitiveType, vertexBuffer, qu adsIndexBuffer,
964 firstVertex, kQuadNumVertices, kIdxsPerQuad, conicCount, 945 firstVertex, kQuadNumVertices, kIdxsPerQuad, conicCount,
965 kQuadsNumInIdxBuffer); 946 kQuadsNumInIdxBuffer);
966 batchTarget->draw(verts); 947 batchTarget->draw(verts);
967 } 948 }
968 } 949 }
969 } 950 }
970 } 951 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 GrColor color = GrRandomColor(random); 997 GrColor color = GrRandomColor(random);
1017 SkMatrix viewMatrix = GrTest::TestMatrix(random); 998 SkMatrix viewMatrix = GrTest::TestMatrix(random);
1018 GrStrokeInfo stroke(SkStrokeRec::kHairline_InitStyle); 999 GrStrokeInfo stroke(SkStrokeRec::kHairline_InitStyle);
1019 SkPath path = GrTest::TestPath(random); 1000 SkPath path = GrTest::TestPath(random);
1020 SkIRect devClipBounds; 1001 SkIRect devClipBounds;
1021 devClipBounds.setEmpty(); 1002 devClipBounds.setEmpty();
1022 return create_hairline_batch(color, viewMatrix, path, stroke, devClipBounds) ; 1003 return create_hairline_batch(color, viewMatrix, path, stroke, devClipBounds) ;
1023 } 1004 }
1024 1005
1025 #endif 1006 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrAADistanceFieldPathRenderer.cpp ('k') | src/gpu/GrAARectRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698