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

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

Issue 2241273003: Attempt to throw away rrect clips of rrects. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: fix int to scalar warnings Created 4 years, 4 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/GrClipStackClip.cpp ('k') | no next file » | 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 "GrBatchTest.h" 8 #include "GrBatchTest.h"
9 #include "GrColor.h" 9 #include "GrColor.h"
10 #include "GrDrawContext.h" 10 #include "GrDrawContext.h"
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 774
775 SkAutoTUnref<GrDrawBatch> batch(new GrDrawAtlasBatch(paint.getColor(), viewM atrix, spriteCount, 775 SkAutoTUnref<GrDrawBatch> batch(new GrDrawAtlasBatch(paint.getColor(), viewM atrix, spriteCount,
776 xform, texRect, colors) ); 776 xform, texRect, colors) );
777 777
778 GrPipelineBuilder pipelineBuilder(paint, this->mustUseHWAA(paint)); 778 GrPipelineBuilder pipelineBuilder(paint, this->mustUseHWAA(paint));
779 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); 779 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
780 } 780 }
781 781
782 /////////////////////////////////////////////////////////////////////////////// 782 ///////////////////////////////////////////////////////////////////////////////
783 783
784 void GrDrawContext::drawRRect(const GrClip& clip, 784 void GrDrawContext::drawRRect(const GrClip& origClip,
785 const GrPaint& paint, 785 const GrPaint& paint,
786 const SkMatrix& viewMatrix, 786 const SkMatrix& viewMatrix,
787 const SkRRect& rrect, 787 const SkRRect& rrect,
788 const GrStyle& style) { 788 const GrStyle& style) {
789 ASSERT_SINGLE_OWNER 789 ASSERT_SINGLE_OWNER
790 RETURN_IF_ABANDONED 790 RETURN_IF_ABANDONED
791 SkDEBUGCODE(this->validate();) 791 SkDEBUGCODE(this->validate();)
792 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawRRect"); 792 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawRRect");
793
794 if (rrect.isEmpty()) { 793 if (rrect.isEmpty()) {
795 return; 794 return;
796 } 795 }
797 796
797 GrNoClip noclip;
798 const GrClip* clip = &origClip;
799 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
800 // The Android framework frequently clips rrects to themselves where the cli p is non-aa and the
801 // draw is aa. Since our lower level clip code works from batch bounds, whic h are SkRects, it
802 // doesn't detect that the clip can be ignored (modulo antialiasing). The fo llowing test
803 // attempts to mitigate the stencil clip cost but will only help when the en tire clip stack
804 // can be ignored. We'd prefer to fix this in the framework by removing the clips calls.
805 SkRRect devRRect;
806 if (rrect.transform(viewMatrix, &devRRect) && clip->quickContains(devRRect)) {
807 clip = &noclip;
808 }
809 #endif
798 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice 810 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice
799 811
800 AutoCheckFlush acf(fDrawingManager); 812 AutoCheckFlush acf(fDrawingManager);
801 const SkStrokeRec stroke = style.strokeRec(); 813 const SkStrokeRec stroke = style.strokeRec();
802 bool useHWAA; 814 bool useHWAA;
803 815
804 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport() && 816 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport() &&
805 stroke.isFillStyle()) { 817 stroke.isFillStyle()) {
806 InstancedRendering* ir = this->getDrawTarget()->instancedRendering(); 818 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
807 SkAutoTUnref<GrDrawBatch> batch(ir->recordRRect(rrect, viewMatrix, paint .getColor(), 819 SkAutoTUnref<GrDrawBatch> batch(ir->recordRRect(rrect, viewMatrix, paint .getColor(),
808 paint.isAntiAlias(), fIn stancedPipelineInfo, 820 paint.isAntiAlias(), fIn stancedPipelineInfo,
809 &useHWAA)); 821 &useHWAA));
810 if (batch) { 822 if (batch) {
811 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 823 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
812 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; 824 this->getDrawTarget()->drawBatch(pipelineBuilder, this, *clip, batch );
813 return; 825 return;
814 } 826 }
815 } 827 }
816 828
817 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { 829 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) {
818 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); 830 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps();
819 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(), 831 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(),
820 viewMat rix, 832 viewMat rix,
821 rrect, 833 rrect,
822 stroke, 834 stroke,
823 shaderC aps)); 835 shaderC aps));
824 if (batch) { 836 if (batch) {
825 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 837 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
826 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; 838 this->getDrawTarget()->drawBatch(pipelineBuilder, this, *clip, batch );
827 return; 839 return;
828 } 840 }
829 } 841 }
830 842
831 SkPath path; 843 SkPath path;
832 path.setIsVolatile(true); 844 path.setIsVolatile(true);
833 path.addRRect(rrect); 845 path.addRRect(rrect);
834 this->internalDrawPath(clip, paint, viewMatrix, path, style); 846 this->internalDrawPath(*clip, paint, viewMatrix, path, style);
835 } 847 }
836 848
837 bool GrDrawContext::drawFilledDRRect(const GrClip& clip, 849 bool GrDrawContext::drawFilledDRRect(const GrClip& clip,
838 const GrPaint& paintIn, 850 const GrPaint& paintIn,
839 const SkMatrix& viewMatrix, 851 const SkMatrix& viewMatrix,
840 const SkRRect& origOuter, 852 const SkRRect& origOuter,
841 const SkRRect& origInner) { 853 const SkRRect& origInner) {
842 SkASSERT(!origInner.isEmpty()); 854 SkASSERT(!origInner.isEmpty());
843 SkASSERT(!origOuter.isEmpty()); 855 SkASSERT(!origOuter.isEmpty());
844 856
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 1309
1298 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip, 1310 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip,
1299 GrDrawBatch* batch) { 1311 GrDrawBatch* batch) {
1300 ASSERT_SINGLE_OWNER 1312 ASSERT_SINGLE_OWNER
1301 RETURN_IF_ABANDONED 1313 RETURN_IF_ABANDONED
1302 SkDEBUGCODE(this->validate();) 1314 SkDEBUGCODE(this->validate();)
1303 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); 1315 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch");
1304 1316
1305 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); 1317 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
1306 } 1318 }
OLDNEW
« no previous file with comments | « src/gpu/GrClipStackClip.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698