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

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

Issue 2066993003: Begin instanced rendering for simple shapes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: get mixed samples and base instance paths working again Created 4 years, 6 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
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"
11 #include "GrDrawContextPriv.h" 11 #include "GrDrawContextPriv.h"
12 #include "GrDrawingManager.h" 12 #include "GrDrawingManager.h"
13 #include "GrOvalRenderer.h" 13 #include "GrOvalRenderer.h"
14 #include "GrPathRenderer.h" 14 #include "GrPathRenderer.h"
15 #include "GrRenderTarget.h" 15 #include "GrRenderTarget.h"
16 #include "GrRenderTargetPriv.h" 16 #include "GrRenderTargetPriv.h"
17 #include "GrResourceProvider.h" 17 #include "GrResourceProvider.h"
18 #include "SkSurfacePriv.h" 18 #include "SkSurfacePriv.h"
19 19
20 #include "batches/GrBatch.h" 20 #include "batches/GrBatch.h"
21 #include "batches/GrDrawAtlasBatch.h" 21 #include "batches/GrDrawAtlasBatch.h"
22 #include "batches/GrDrawVerticesBatch.h" 22 #include "batches/GrDrawVerticesBatch.h"
23 #include "batches/GrRectBatchFactory.h" 23 #include "batches/GrRectBatchFactory.h"
24 #include "batches/GrNinePatch.h" // TODO Factory 24 #include "batches/GrNinePatch.h" // TODO Factory
25 25
26 #include "effects/GrRRectEffect.h" 26 #include "effects/GrRRectEffect.h"
27 27
28 #include "instanced/InstancedRendering.h"
29
28 #include "text/GrAtlasTextContext.h" 30 #include "text/GrAtlasTextContext.h"
29 #include "text/GrStencilAndCoverTextContext.h" 31 #include "text/GrStencilAndCoverTextContext.h"
30 32
31 #include "../private/GrAuditTrail.h" 33 #include "../private/GrAuditTrail.h"
32 34
33 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fDrawingM anager->getContext()) 35 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == fDrawingM anager->getContext())
34 #define ASSERT_SINGLE_OWNER \ 36 #define ASSERT_SINGLE_OWNER \
35 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);) 37 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fSingleOwner);)
36 #define ASSERT_SINGLE_OWNER_PRIV \ 38 #define ASSERT_SINGLE_OWNER_PRIV \
37 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fDrawContext->fSing leOwner);) 39 SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(fDrawContext->fSing leOwner);)
38 #define RETURN_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return ; } 40 #define RETURN_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return ; }
39 #define RETURN_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAbandon ed()) { return; } 41 #define RETURN_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAbandon ed()) { return; }
40 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return false; } 42 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return false; }
41 #define RETURN_FALSE_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAb andoned()) { return false; } 43 #define RETURN_FALSE_IF_ABANDONED_PRIV if (fDrawContext->fDrawingManager->wasAb andoned()) { return false; }
42 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return nullptr; } 44 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->wasAbandoned()) { return nullptr; }
43 45
46 using gr_instanced::InstancedRendering;
47
44 class AutoCheckFlush { 48 class AutoCheckFlush {
45 public: 49 public:
46 AutoCheckFlush(GrDrawingManager* drawingManager) : fDrawingManager(drawingMa nager) { 50 AutoCheckFlush(GrDrawingManager* drawingManager) : fDrawingManager(drawingMa nager) {
47 SkASSERT(fDrawingManager); 51 SkASSERT(fDrawingManager);
48 } 52 }
49 ~AutoCheckFlush() { fDrawingManager->getContext()->flushIfNecessary(); } 53 ~AutoCheckFlush() { fDrawingManager->getContext()->flushIfNecessary(); }
50 54
51 private: 55 private:
52 GrDrawingManager* fDrawingManager; 56 GrDrawingManager* fDrawingManager;
53 }; 57 };
54 58
55 bool GrDrawContext::wasAbandoned() const { 59 bool GrDrawContext::wasAbandoned() const {
56 return fDrawingManager->wasAbandoned(); 60 return fDrawingManager->wasAbandoned();
57 } 61 }
58 62
59 // In MDB mode the reffing of the 'getLastDrawTarget' call's result allows in-pr ogress 63 // In MDB mode the reffing of the 'getLastDrawTarget' call's result allows in-pr ogress
60 // drawTargets to be picked up and added to by drawContexts lower in the call 64 // drawTargets to be picked up and added to by drawContexts lower in the call
61 // stack. When this occurs with a closed drawTarget, a new one will be allocated 65 // stack. When this occurs with a closed drawTarget, a new one will be allocated
62 // when the drawContext attempts to use it (via getDrawTarget). 66 // when the drawContext attempts to use it (via getDrawTarget).
63 GrDrawContext::GrDrawContext(GrContext* context, 67 GrDrawContext::GrDrawContext(GrContext* context,
64 GrDrawingManager* drawingMgr, 68 GrDrawingManager* drawingMgr,
65 sk_sp<GrRenderTarget> rt, 69 sk_sp<GrRenderTarget> rt,
66 const SkSurfaceProps* surfaceProps, 70 const SkSurfaceProps* surfaceProps,
67 GrAuditTrail* auditTrail, 71 GrAuditTrail* auditTrail,
68 GrSingleOwner* singleOwner) 72 GrSingleOwner* singleOwner)
69 : fDrawingManager(drawingMgr) 73 : fDrawingManager(drawingMgr)
70 , fRenderTarget(std::move(rt)) 74 , fRenderTarget(std::move(rt))
71 , fDrawTarget(SkSafeRef(fRenderTarget->getLastDrawTarget())) 75 , fDrawTarget(SkSafeRef(fRenderTarget->getLastDrawTarget()))
72 , fContext(context) 76 , fContext(context)
77 , fInstancedPipelineInfo(fRenderTarget.get())
73 , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) 78 , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps))
74 , fAuditTrail(auditTrail) 79 , fAuditTrail(auditTrail)
75 #ifdef SK_DEBUG 80 #ifdef SK_DEBUG
76 , fSingleOwner(singleOwner) 81 , fSingleOwner(singleOwner)
77 #endif 82 #endif
78 { 83 {
79 SkDEBUGCODE(this->validate();) 84 SkDEBUGCODE(this->validate();)
80 } 85 }
81 86
82 #ifdef SK_DEBUG 87 #ifdef SK_DEBUG
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 *useHWAA = rt->isUnifiedMultisampled(); 271 *useHWAA = rt->isUnifiedMultisampled();
267 } 272 }
268 return !rt->isUnifiedMultisampled(); 273 return !rt->isUnifiedMultisampled();
269 } 274 }
270 } 275 }
271 276
272 GrDrawBatch* GrDrawContext::getFillRectBatch(const GrPaint& paint, 277 GrDrawBatch* GrDrawContext::getFillRectBatch(const GrPaint& paint,
273 const SkMatrix& viewMatrix, 278 const SkMatrix& viewMatrix,
274 const SkRect& rect, 279 const SkRect& rect,
275 bool* useHWAA) { 280 bool* useHWAA) {
281 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) {
282 if (GrDrawBatch* batch = ir->recordRect(rect, viewMatrix, paint.getColor (),
283 paint.isAntiAlias(), fInstancedP ipelineInfo,
284 useHWAA)) {
285 return batch;
286 }
287 }
276 288
277 GrDrawBatch* batch = nullptr;
278 if (should_apply_coverage_aa(paint, fRenderTarget.get(), useHWAA)) { 289 if (should_apply_coverage_aa(paint, fRenderTarget.get(), useHWAA)) {
279 // The fill path can handle rotation but not skew. 290 // The fill path can handle rotation but not skew.
280 if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { 291 if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
281 SkRect devBoundRect; 292 SkRect devBoundRect;
282 viewMatrix.mapRect(&devBoundRect, rect); 293 viewMatrix.mapRect(&devBoundRect, rect);
283 batch = GrRectBatchFactory::CreateAAFill(paint.getColor(), viewMatri x, 294 return GrRectBatchFactory::CreateAAFill(paint.getColor(), viewMatrix ,
284 rect, devBoundRect); 295 rect, devBoundRect);
285 } 296 }
286 } else { 297 } else {
287 // filled BW rect 298 // filled BW rect
288 batch = GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix , rect, 299 return GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rect,
289 nullptr, nullptr); 300 nullptr, nullptr);
290 } 301 }
291 302
292 return batch; 303 return nullptr;
293 } 304 }
294 305
295 void GrDrawContext::drawRect(const GrClip& clip, 306 void GrDrawContext::drawRect(const GrClip& clip,
296 const GrPaint& paint, 307 const GrPaint& paint,
297 const SkMatrix& viewMatrix, 308 const SkMatrix& viewMatrix,
298 const SkRect& rect, 309 const SkRect& rect,
299 const GrStyle* style) { 310 const GrStyle* style) {
300 if (!style) { 311 if (!style) {
301 style = &GrStyle::SimpleFill(); 312 style = &GrStyle::SimpleFill();
302 } 313 }
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 const GrPaint& paint, 483 const GrPaint& paint,
473 const SkMatrix& viewMatrix, 484 const SkMatrix& viewMatrix,
474 const SkRect& rectToDraw, 485 const SkRect& rectToDraw,
475 const SkRect& localRect) { 486 const SkRect& localRect) {
476 ASSERT_SINGLE_OWNER 487 ASSERT_SINGLE_OWNER
477 RETURN_IF_ABANDONED 488 RETURN_IF_ABANDONED
478 SkDEBUGCODE(this->validate();) 489 SkDEBUGCODE(this->validate();)
479 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect"); 490 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect");
480 491
481 AutoCheckFlush acf(fDrawingManager); 492 AutoCheckFlush acf(fDrawingManager);
493 SkAutoTUnref<GrDrawBatch> batch;
494 bool useHWAA;
482 495
483 bool useHWAA; 496 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) {
484 SkAutoTUnref<GrDrawBatch> batch; 497 batch.reset(ir->recordRect(rectToDraw, viewMatrix, paint.getColor(), loc alRect,
498 paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA));
499 if (batch) {
500 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
501 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
502 return;
503 }
504 }
505
485 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && 506 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) &&
486 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { 507 view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
487 batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie wMatrix, rectToDraw, 508 batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie wMatrix, rectToDraw,
488 localRect)); 509 localRect));
489 } else { 510 } else {
490 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, 511 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw,
491 &localRect, nullptr)); 512 &localRect, nullptr));
492 } 513 }
493 514
494 if (batch) { 515 if (batch) {
495 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 516 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
496 this->drawBatch(pipelineBuilder, clip, batch); 517 this->drawBatch(pipelineBuilder, clip, batch);
497 } 518 }
498 } 519 }
499 520
500 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, 521 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip,
501 const GrPaint& paint, 522 const GrPaint& paint,
502 const SkMatrix& viewMatrix, 523 const SkMatrix& viewMatrix,
503 const SkRect& rectToDraw, 524 const SkRect& rectToDraw,
504 const SkMatrix& localMatrix) { 525 const SkMatrix& localMatrix) {
505 ASSERT_SINGLE_OWNER 526 ASSERT_SINGLE_OWNER
506 RETURN_IF_ABANDONED 527 RETURN_IF_ABANDONED
507 SkDEBUGCODE(this->validate();) 528 SkDEBUGCODE(this->validate();)
508 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix"); 529 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix");
509 530
510 AutoCheckFlush acf(fDrawingManager); 531 AutoCheckFlush acf(fDrawingManager);
532 SkAutoTUnref<GrDrawBatch> batch;
533 bool useHWAA;
511 534
512 bool useHWAA; 535 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) {
513 SkAutoTUnref<GrDrawBatch> batch; 536 batch.reset(ir->recordRect(rectToDraw, viewMatrix, paint.getColor(), loc alMatrix,
537 paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA));
538 if (batch) {
539 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
540 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
541 return;
542 }
543 }
544
514 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && 545 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) &&
515 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { 546 view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
516 batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca lMatrix, 547 batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca lMatrix,
517 rectToDraw)); 548 rectToDraw));
518 } else { 549 } else {
519 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw, 550 batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa trix, rectToDraw,
520 nullptr, &localMatrix)); 551 nullptr, &localMatrix));
521 } 552 }
522 553
523 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 554 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 ASSERT_SINGLE_OWNER 635 ASSERT_SINGLE_OWNER
605 RETURN_IF_ABANDONED 636 RETURN_IF_ABANDONED
606 SkDEBUGCODE(this->validate();) 637 SkDEBUGCODE(this->validate();)
607 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawRRect"); 638 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawRRect");
608 639
609 if (rrect.isEmpty()) { 640 if (rrect.isEmpty()) {
610 return; 641 return;
611 } 642 }
612 643
613 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice 644 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice
645
646 AutoCheckFlush acf(fDrawingManager);
614 const SkStrokeRec stroke = style.strokeRec(); 647 const SkStrokeRec stroke = style.strokeRec();
615 AutoCheckFlush acf(fDrawingManager); 648 bool useHWAA;
616 649
617 bool useHWAA; 650 if (this->getDrawTarget()->instancedRendering() && stroke.isFillStyle()) {
651 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
652 SkAutoTUnref<GrDrawBatch> batch(ir->recordRRect(rrect, viewMatrix, paint .getColor(),
653 paint.isAntiAlias(), fIn stancedPipelineInfo,
654 &useHWAA));
655 if (batch) {
656 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
657 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
658 return;
659 }
660 }
661
618 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { 662 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) {
619 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); 663 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps();
620
621 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(), 664 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g etColor(),
622 viewMat rix, 665 viewMat rix,
623 rrect, 666 rrect,
624 stroke, 667 stroke,
625 shaderC aps)); 668 shaderC aps));
626 if (batch) { 669 if (batch) {
627 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 670 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
628 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; 671 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
629 return; 672 return;
630 } 673 }
631 } 674 }
632 675
633 SkPath path; 676 SkPath path;
634 path.setIsVolatile(true); 677 path.setIsVolatile(true);
635 path.addRRect(rrect); 678 path.addRRect(rrect);
636 this->internalDrawPath(clip, paint, viewMatrix, path, style); 679 this->internalDrawPath(clip, paint, viewMatrix, path, style);
637 } 680 }
638 681
639 bool GrDrawContext::drawFilledDRRect(const GrClip& clip, 682 bool GrDrawContext::drawFilledDRRect(const GrClip& clip,
640 const GrPaint& paintIn, 683 const GrPaint& paintIn,
641 const SkMatrix& viewMatrix, 684 const SkMatrix& viewMatrix,
642 const SkRRect& origOuter, 685 const SkRRect& origOuter,
643 const SkRRect& origInner) { 686 const SkRRect& origInner) {
644 SkASSERT(!origInner.isEmpty()); 687 SkASSERT(!origInner.isEmpty());
645 SkASSERT(!origOuter.isEmpty()); 688 SkASSERT(!origOuter.isEmpty());
646 689
690 if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) {
691 bool useHWAA;
692 SkAutoTUnref<GrDrawBatch> batch(ir->recordDRRect(origOuter, origInner, v iewMatrix,
693 paintIn.getColor(), pai ntIn.isAntiAlias(),
694 fInstancedPipelineInfo, &useHWAA));
695 if (batch) {
696 GrPipelineBuilder pipelineBuilder(paintIn, useHWAA);
697 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
698 return true;
699 }
700 }
701
647 bool applyAA = paintIn.isAntiAlias() && !fRenderTarget->isUnifiedMultisample d(); 702 bool applyAA = paintIn.isAntiAlias() && !fRenderTarget->isUnifiedMultisample d();
648 703
649 GrPrimitiveEdgeType innerEdgeType = applyAA ? kInverseFillAA_GrProcessorEdge Type : 704 GrPrimitiveEdgeType innerEdgeType = applyAA ? kInverseFillAA_GrProcessorEdge Type :
650 kInverseFillBW_GrProcessorEdge Type; 705 kInverseFillBW_GrProcessorEdge Type;
651 GrPrimitiveEdgeType outerEdgeType = applyAA ? kFillAA_GrProcessorEdgeType : 706 GrPrimitiveEdgeType outerEdgeType = applyAA ? kFillAA_GrProcessorEdgeType :
652 kFillBW_GrProcessorEdgeType; 707 kFillBW_GrProcessorEdgeType;
653 708
654 SkTCopyOnFirstWrite<SkRRect> inner(origInner), outer(origOuter); 709 SkTCopyOnFirstWrite<SkRRect> inner(origInner), outer(origOuter);
655 SkMatrix inverseVM; 710 SkMatrix inverseVM;
656 if (!viewMatrix.isIdentity()) { 711 if (!viewMatrix.isIdentity()) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 790
736 if (oval.isEmpty()) { 791 if (oval.isEmpty()) {
737 return; 792 return;
738 } 793 }
739 794
740 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice 795 SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice
741 796
742 AutoCheckFlush acf(fDrawingManager); 797 AutoCheckFlush acf(fDrawingManager);
743 const SkStrokeRec& stroke = style.strokeRec(); 798 const SkStrokeRec& stroke = style.strokeRec();
744 bool useHWAA; 799 bool useHWAA;
800
801 if (this->getDrawTarget()->instancedRendering() && stroke.isFillStyle()) {
802 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
803 SkAutoTUnref<GrDrawBatch> batch(ir->recordOval(oval, viewMatrix, paint.g etColor(),
804 paint.isAntiAlias(), fIns tancedPipelineInfo,
805 &useHWAA));
806 if (batch) {
807 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
808 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
809 return;
810 }
811 }
812
745 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { 813 if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) {
746 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); 814 GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps();
747 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge tColor(), 815 SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge tColor(),
748 viewMatr ix, 816 viewMatr ix,
749 oval, 817 oval,
750 stroke, 818 stroke,
751 shaderCa ps)); 819 shaderCa ps));
752 if (batch) { 820 if (batch) {
753 GrPipelineBuilder pipelineBuilder(paint, useHWAA); 821 GrPipelineBuilder pipelineBuilder(paint, useHWAA);
754 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ; 822 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch) ;
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 1132
1065 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip, 1133 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip,
1066 GrDrawBatch* batch) { 1134 GrDrawBatch* batch) {
1067 ASSERT_SINGLE_OWNER 1135 ASSERT_SINGLE_OWNER
1068 RETURN_IF_ABANDONED 1136 RETURN_IF_ABANDONED
1069 SkDEBUGCODE(this->validate();) 1137 SkDEBUGCODE(this->validate();)
1070 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); 1138 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch");
1071 1139
1072 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); 1140 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
1073 } 1141 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698