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

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

Issue 362023002: Reduce integer divides in GrAllocator (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: iter getters Created 6 years, 5 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/GrInOrderDrawBuffer.h ('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 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 "GrInOrderDrawBuffer.h" 8 #include "GrInOrderDrawBuffer.h"
9 9
10 #include "GrBufferAllocPool.h" 10 #include "GrBufferAllocPool.h"
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 Clear* clr = this->recordClear(); 523 Clear* clr = this->recordClear();
524 clr->fColor = GrColor_ILLEGAL; 524 clr->fColor = GrColor_ILLEGAL;
525 clr->fRenderTarget = renderTarget; 525 clr->fRenderTarget = renderTarget;
526 renderTarget->ref(); 526 renderTarget->ref();
527 } 527 }
528 528
529 void GrInOrderDrawBuffer::reset() { 529 void GrInOrderDrawBuffer::reset() {
530 SkASSERT(1 == fGeoPoolStateStack.count()); 530 SkASSERT(1 == fGeoPoolStateStack.count());
531 this->resetVertexSource(); 531 this->resetVertexSource();
532 this->resetIndexSource(); 532 this->resetIndexSource();
533 int numDraws = fDraws.count(); 533
534 for (int d = 0; d < numDraws; ++d) { 534 DrawAllocator::Iter drawIter(&fDraws);
535 while (drawIter.next()) {
535 // we always have a VB, but not always an IB 536 // we always have a VB, but not always an IB
536 SkASSERT(NULL != fDraws[d].fVertexBuffer); 537 SkASSERT(NULL != drawIter->fVertexBuffer);
537 fDraws[d].fVertexBuffer->unref(); 538 drawIter->fVertexBuffer->unref();
538 SkSafeUnref(fDraws[d].fIndexBuffer); 539 SkSafeUnref(drawIter->fIndexBuffer);
539 } 540 }
540 fCmds.reset(); 541 fCmds.reset();
541 fDraws.reset(); 542 fDraws.reset();
542 fStencilPaths.reset(); 543 fStencilPaths.reset();
543 fDrawPath.reset(); 544 fDrawPath.reset();
544 fDrawPaths.reset(); 545 fDrawPaths.reset();
545 fStates.reset(); 546 fStates.reset();
546 fClears.reset(); 547 fClears.reset();
547 fVertexPool.reset(); 548 fVertexPool.reset();
548 fIndexPool.reset(); 549 fIndexPool.reset();
(...skipping 28 matching lines...) Expand all
577 GrDrawTarget::AutoClipRestore acr(fDstGpu); 578 GrDrawTarget::AutoClipRestore acr(fDstGpu);
578 AutoGeometryAndStatePush agasp(fDstGpu, kPreserve_ASRInit); 579 AutoGeometryAndStatePush agasp(fDstGpu, kPreserve_ASRInit);
579 580
580 GrDrawState playbackState; 581 GrDrawState playbackState;
581 GrDrawState* prevDrawState = fDstGpu->drawState(); 582 GrDrawState* prevDrawState = fDstGpu->drawState();
582 prevDrawState->ref(); 583 prevDrawState->ref();
583 fDstGpu->setDrawState(&playbackState); 584 fDstGpu->setDrawState(&playbackState);
584 585
585 GrClipData clipData; 586 GrClipData clipData;
586 587
587 int currState = 0; 588 StateAllocator::Iter stateIter(&fStates);
588 int currClip = 0; 589 ClipAllocator::Iter clipIter(&fClips);
589 int currClear = 0; 590 ClipOriginAllocator::Iter clipOriginIter(&fClipOrigins);
590 int currDraw = 0; 591 ClearAllocator::Iter clearIter(&fClears);
591 int currStencilPath = 0; 592 DrawAllocator::Iter drawIter(&fDraws);
592 int currDrawPath = 0; 593 StencilPathAllocator::Iter stencilPathIter(&fStencilPaths);
593 int currDrawPaths = 0; 594 DrawPathAllocator::Iter drawPathIter(&fDrawPath);
594 int currCopySurface = 0; 595 DrawPathsAllocator::Iter drawPathsIter(&fDrawPaths);
596 CopySurfaceAllocator::Iter copySurfaceIter(&fCopySurfaces);
597
595 int currCmdMarker = 0; 598 int currCmdMarker = 0;
596 599
597 fDstGpu->saveActiveTraceMarkers(); 600 fDstGpu->saveActiveTraceMarkers();
598 for (int c = 0; c < numCmds; ++c) { 601 for (int c = 0; c < numCmds; ++c) {
599 GrGpuTraceMarker newMarker("", -1); 602 GrGpuTraceMarker newMarker("", -1);
600 if (cmd_has_trace_marker(fCmds[c])) { 603 if (cmd_has_trace_marker(fCmds[c])) {
601 SkString traceString = fGpuCmdMarkers[currCmdMarker].toString(); 604 SkString traceString = fGpuCmdMarkers[currCmdMarker].toString();
602 newMarker.fMarker = traceString.c_str(); 605 newMarker.fMarker = traceString.c_str();
603 fDstGpu->addGpuTraceMarker(&newMarker); 606 fDstGpu->addGpuTraceMarker(&newMarker);
604 ++currCmdMarker; 607 ++currCmdMarker;
605 } 608 }
606 switch (strip_trace_bit(fCmds[c])) { 609 switch (strip_trace_bit(fCmds[c])) {
607 case kDraw_Cmd: { 610 case kDraw_Cmd: {
608 const DrawRecord& draw = fDraws[currDraw]; 611 SkAssertResult(drawIter.next());
609 fDstGpu->setVertexSourceToBuffer(draw.fVertexBuffer); 612 fDstGpu->setVertexSourceToBuffer(drawIter->fVertexBuffer);
610 if (draw.isIndexed()) { 613 if (drawIter->isIndexed()) {
611 fDstGpu->setIndexSourceToBuffer(draw.fIndexBuffer); 614 fDstGpu->setIndexSourceToBuffer(drawIter->fIndexBuffer);
612 } 615 }
613 fDstGpu->executeDraw(draw); 616 fDstGpu->executeDraw(*drawIter);
614 ++currDraw;
615 break; 617 break;
616 } 618 }
617 case kStencilPath_Cmd: { 619 case kStencilPath_Cmd: {
618 const StencilPath& sp = fStencilPaths[currStencilPath]; 620 SkAssertResult(stencilPathIter.next());
619 fDstGpu->stencilPath(sp.fPath.get(), sp.fFill); 621 fDstGpu->stencilPath(stencilPathIter->fPath.get(), stencilPathIt er->fFill);
620 ++currStencilPath;
621 break; 622 break;
622 } 623 }
623 case kDrawPath_Cmd: { 624 case kDrawPath_Cmd: {
624 const DrawPath& cp = fDrawPath[currDrawPath]; 625 SkAssertResult(drawPathIter.next());
625 fDstGpu->executeDrawPath(cp.fPath.get(), cp.fFill, 626 fDstGpu->executeDrawPath(drawPathIter->fPath.get(), drawPathIter ->fFill,
626 NULL != cp.fDstCopy.texture() ? &cp.fDs tCopy : NULL); 627 NULL != drawPathIter->fDstCopy.texture( ) ?
627 ++currDrawPath; 628 &drawPathIter->fDstCopy :
629 NULL);
628 break; 630 break;
629 } 631 }
630 case kDrawPaths_Cmd: { 632 case kDrawPaths_Cmd: {
631 DrawPaths& dp = fDrawPaths[currDrawPaths]; 633 SkAssertResult(drawPathsIter.next());
632 const GrDeviceCoordTexture* dstCopy = 634 const GrDeviceCoordTexture* dstCopy =
633 NULL != dp.fDstCopy.texture() ? &dp.fDstCopy : NULL; 635 NULL !=drawPathsIter->fDstCopy.texture() ? &drawPathsIter->f DstCopy : NULL;
634 fDstGpu->executeDrawPaths(dp.fPathCount, dp.fPaths, 636 fDstGpu->executeDrawPaths(drawPathsIter->fPathCount, drawPathsIt er->fPaths,
635 dp.fTransforms, dp.fFill, dp.fStroke, 637 drawPathsIter->fTransforms, drawPathsI ter->fFill,
636 dstCopy); 638 drawPathsIter->fStroke, dstCopy);
637 ++currDrawPaths;
638 break; 639 break;
639 } 640 }
640 case kSetState_Cmd: 641 case kSetState_Cmd:
641 fStates[currState].restoreTo(&playbackState); 642 SkAssertResult(stateIter.next());
642 ++currState; 643 stateIter->restoreTo(&playbackState);
643 break; 644 break;
644 case kSetClip_Cmd: 645 case kSetClip_Cmd:
645 clipData.fClipStack = &fClips[currClip]; 646 SkAssertResult(clipIter.next());
646 clipData.fOrigin = fClipOrigins[currClip]; 647 SkAssertResult(clipOriginIter.next());
648 clipData.fClipStack = clipIter.get();
649 clipData.fOrigin = *clipOriginIter;
647 fDstGpu->setClip(&clipData); 650 fDstGpu->setClip(&clipData);
648 ++currClip;
649 break; 651 break;
650 case kClear_Cmd: 652 case kClear_Cmd:
651 if (GrColor_ILLEGAL == fClears[currClear].fColor) { 653 SkAssertResult(clearIter.next());
652 fDstGpu->discard(fClears[currClear].fRenderTarget); 654 if (GrColor_ILLEGAL == clearIter->fColor) {
655 fDstGpu->discard(clearIter->fRenderTarget);
653 } else { 656 } else {
654 fDstGpu->clear(&fClears[currClear].fRect, 657 fDstGpu->clear(&clearIter->fRect,
655 fClears[currClear].fColor, 658 clearIter->fColor,
656 fClears[currClear].fCanIgnoreRect, 659 clearIter->fCanIgnoreRect,
657 fClears[currClear].fRenderTarget); 660 clearIter->fRenderTarget);
658 } 661 }
659 ++currClear;
660 break; 662 break;
661 case kCopySurface_Cmd: 663 case kCopySurface_Cmd:
662 fDstGpu->copySurface(fCopySurfaces[currCopySurface].fDst.get(), 664 SkAssertResult(copySurfaceIter.next());
663 fCopySurfaces[currCopySurface].fSrc.get(), 665 fDstGpu->copySurface(copySurfaceIter->fDst.get(),
664 fCopySurfaces[currCopySurface].fSrcRect, 666 copySurfaceIter->fSrc.get(),
665 fCopySurfaces[currCopySurface].fDstPoint); 667 copySurfaceIter->fSrcRect,
666 ++currCopySurface; 668 copySurfaceIter->fDstPoint);
667 break; 669 break;
668 } 670 }
669 if (cmd_has_trace_marker(fCmds[c])) { 671 if (cmd_has_trace_marker(fCmds[c])) {
670 fDstGpu->removeGpuTraceMarker(&newMarker); 672 fDstGpu->removeGpuTraceMarker(&newMarker);
671 } 673 }
672 } 674 }
673 fDstGpu->restoreActiveTraceMarkers(); 675 fDstGpu->restoreActiveTraceMarkers();
674 // we should have consumed all the states, clips, etc. 676 // we should have consumed all the states, clips, etc.
675 SkASSERT(fStates.count() == currState); 677 SkASSERT(!stateIter.next());
676 SkASSERT(fClips.count() == currClip); 678 SkASSERT(!clipIter.next());
677 SkASSERT(fClipOrigins.count() == currClip); 679 SkASSERT(!clipOriginIter.next());
678 SkASSERT(fClears.count() == currClear); 680 SkASSERT(!clearIter.next());
679 SkASSERT(fDraws.count() == currDraw); 681 SkASSERT(!drawIter.next());
680 SkASSERT(fCopySurfaces.count() == currCopySurface); 682 SkASSERT(!copySurfaceIter.next());
683 SkASSERT(!stencilPathIter.next());
684 SkASSERT(!drawPathIter.next());
685 SkASSERT(!drawPathsIter.next());
686
681 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); 687 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
682 688
683 fDstGpu->setDrawState(prevDrawState); 689 fDstGpu->setDrawState(prevDrawState);
684 prevDrawState->unref(); 690 prevDrawState->unref();
685 this->reset(); 691 this->reset();
686 ++fDrawID; 692 ++fDrawID;
687 } 693 }
688 694
689 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst, 695 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
690 GrSurface* src, 696 GrSurface* src,
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 this->addToCmdBuffer(kCopySurface_Cmd); 992 this->addToCmdBuffer(kCopySurface_Cmd);
987 return &fCopySurfaces.push_back(); 993 return &fCopySurfaces.push_back();
988 } 994 }
989 995
990 996
991 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { 997 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) {
992 INHERITED::clipWillBeSet(newClipData); 998 INHERITED::clipWillBeSet(newClipData);
993 fClipSet = true; 999 fClipSet = true;
994 fClipProxyState = kUnknown_ClipProxyState; 1000 fClipProxyState = kUnknown_ClipProxyState;
995 } 1001 }
OLDNEW
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698