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

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: restore most of the counts 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
« src/gpu/GrAllocator.h ('K') | « 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 draw(&fDraws);
535 while (draw.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 != draw.get().fVertexBuffer);
537 fDraws[d].fVertexBuffer->unref(); 538 draw.get().fVertexBuffer->unref();
538 SkSafeUnref(fDraws[d].fIndexBuffer); 539 SkSafeUnref(draw.get().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());
612 const DrawRecord& draw = drawIter.get();
609 fDstGpu->setVertexSourceToBuffer(draw.fVertexBuffer); 613 fDstGpu->setVertexSourceToBuffer(draw.fVertexBuffer);
610 if (draw.isIndexed()) { 614 if (draw.isIndexed()) {
611 fDstGpu->setIndexSourceToBuffer(draw.fIndexBuffer); 615 fDstGpu->setIndexSourceToBuffer(draw.fIndexBuffer);
612 } 616 }
613 fDstGpu->executeDraw(draw); 617 fDstGpu->executeDraw(draw);
614 ++currDraw;
615 break; 618 break;
616 } 619 }
617 case kStencilPath_Cmd: { 620 case kStencilPath_Cmd: {
618 const StencilPath& sp = fStencilPaths[currStencilPath]; 621 SkAssertResult(stencilPathIter.next());
622 const StencilPath& sp = stencilPathIter.get();
619 fDstGpu->stencilPath(sp.fPath.get(), sp.fFill); 623 fDstGpu->stencilPath(sp.fPath.get(), sp.fFill);
620 ++currStencilPath;
621 break; 624 break;
622 } 625 }
623 case kDrawPath_Cmd: { 626 case kDrawPath_Cmd: {
624 const DrawPath& cp = fDrawPath[currDrawPath]; 627 SkAssertResult(drawPathIter.next());
628 const DrawPath& cp = drawPathIter.get();
625 fDstGpu->executeDrawPath(cp.fPath.get(), cp.fFill, 629 fDstGpu->executeDrawPath(cp.fPath.get(), cp.fFill,
626 NULL != cp.fDstCopy.texture() ? &cp.fDs tCopy : NULL); 630 NULL != cp.fDstCopy.texture() ? &cp.fDs tCopy : NULL);
627 ++currDrawPath;
628 break; 631 break;
629 } 632 }
630 case kDrawPaths_Cmd: { 633 case kDrawPaths_Cmd: {
631 DrawPaths& dp = fDrawPaths[currDrawPaths]; 634 SkAssertResult(drawPathsIter.next());
635 const DrawPaths& dp = drawPathsIter.get();
632 const GrDeviceCoordTexture* dstCopy = 636 const GrDeviceCoordTexture* dstCopy =
633 NULL != dp.fDstCopy.texture() ? &dp.fDstCopy : NULL; 637 NULL != dp.fDstCopy.texture() ? &dp.fDstCopy : NULL;
634 fDstGpu->executeDrawPaths(dp.fPathCount, dp.fPaths, 638 fDstGpu->executeDrawPaths(dp.fPathCount, dp.fPaths,
635 dp.fTransforms, dp.fFill, dp.fStroke, 639 dp.fTransforms, dp.fFill, dp.fStroke,
636 dstCopy); 640 dstCopy);
637 ++currDrawPaths;
638 break; 641 break;
639 } 642 }
640 case kSetState_Cmd: 643 case kSetState_Cmd:
641 fStates[currState].restoreTo(&playbackState); 644 SkAssertResult(stateIter.next());
642 ++currState; 645 stateIter.get().restoreTo(&playbackState);
643 break; 646 break;
644 case kSetClip_Cmd: 647 case kSetClip_Cmd:
645 clipData.fClipStack = &fClips[currClip]; 648 SkAssertResult(clipIter.next());
646 clipData.fOrigin = fClipOrigins[currClip]; 649 SkAssertResult(clipOriginIter.next());
650 clipData.fClipStack = &clipIter.get();
651 clipData.fOrigin = clipOriginIter.get();
647 fDstGpu->setClip(&clipData); 652 fDstGpu->setClip(&clipData);
648 ++currClip;
649 break; 653 break;
650 case kClear_Cmd: 654 case kClear_Cmd:
651 if (GrColor_ILLEGAL == fClears[currClear].fColor) { 655 SkAssertResult(clearIter.next());
652 fDstGpu->discard(fClears[currClear].fRenderTarget); 656 if (GrColor_ILLEGAL == clearIter.get().fColor) {
657 fDstGpu->discard(clearIter.get().fRenderTarget);
653 } else { 658 } else {
654 fDstGpu->clear(&fClears[currClear].fRect, 659 fDstGpu->clear(&clearIter.get().fRect,
655 fClears[currClear].fColor, 660 clearIter.get().fColor,
656 fClears[currClear].fCanIgnoreRect, 661 clearIter.get().fCanIgnoreRect,
657 fClears[currClear].fRenderTarget); 662 clearIter.get().fRenderTarget);
658 } 663 }
659 ++currClear;
660 break; 664 break;
661 case kCopySurface_Cmd: 665 case kCopySurface_Cmd:
662 fDstGpu->copySurface(fCopySurfaces[currCopySurface].fDst.get(), 666 SkAssertResult(copySurfaceIter.next());
663 fCopySurfaces[currCopySurface].fSrc.get(), 667 fDstGpu->copySurface(copySurfaceIter.get().fDst.get(),
664 fCopySurfaces[currCopySurface].fSrcRect, 668 copySurfaceIter.get().fSrc.get(),
665 fCopySurfaces[currCopySurface].fDstPoint); 669 copySurfaceIter.get().fSrcRect,
666 ++currCopySurface; 670 copySurfaceIter.get().fDstPoint);
667 break; 671 break;
668 } 672 }
669 if (cmd_has_trace_marker(fCmds[c])) { 673 if (cmd_has_trace_marker(fCmds[c])) {
670 fDstGpu->removeGpuTraceMarker(&newMarker); 674 fDstGpu->removeGpuTraceMarker(&newMarker);
671 } 675 }
672 } 676 }
673 fDstGpu->restoreActiveTraceMarkers(); 677 fDstGpu->restoreActiveTraceMarkers();
674 // we should have consumed all the states, clips, etc. 678 // we should have consumed all the states, clips, etc.
675 SkASSERT(fStates.count() == currState); 679 SkASSERT(!stateIter.next());
676 SkASSERT(fClips.count() == currClip); 680 SkASSERT(!clipIter.next());
677 SkASSERT(fClipOrigins.count() == currClip); 681 SkASSERT(!clipOriginIter.next());
678 SkASSERT(fClears.count() == currClear); 682 SkASSERT(!clearIter.next());
679 SkASSERT(fDraws.count() == currDraw); 683 SkASSERT(!drawIter.next());
680 SkASSERT(fCopySurfaces.count() == currCopySurface); 684 SkASSERT(!copySurfaceIter.next());
685 SkASSERT(!stencilPathIter.next());
686 SkASSERT(!drawPathIter.next());
687 SkASSERT(!drawPathsIter.next());
688
681 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); 689 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
682 690
683 fDstGpu->setDrawState(prevDrawState); 691 fDstGpu->setDrawState(prevDrawState);
684 prevDrawState->unref(); 692 prevDrawState->unref();
685 this->reset(); 693 this->reset();
686 ++fDrawID; 694 ++fDrawID;
687 } 695 }
688 696
689 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst, 697 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
690 GrSurface* src, 698 GrSurface* src,
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 this->addToCmdBuffer(kCopySurface_Cmd); 994 this->addToCmdBuffer(kCopySurface_Cmd);
987 return &fCopySurfaces.push_back(); 995 return &fCopySurfaces.push_back();
988 } 996 }
989 997
990 998
991 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { 999 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) {
992 INHERITED::clipWillBeSet(newClipData); 1000 INHERITED::clipWillBeSet(newClipData);
993 fClipSet = true; 1001 fClipSet = true;
994 fClipProxyState = kUnknown_ClipProxyState; 1002 fClipProxyState = kUnknown_ClipProxyState;
995 } 1003 }
OLDNEW
« src/gpu/GrAllocator.h ('K') | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698