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

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

Issue 364823004: Combine clip stack and clip origin into one struct in GrIODB. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 fCmds.reset(); 541 fCmds.reset();
542 fDraws.reset(); 542 fDraws.reset();
543 fStencilPaths.reset(); 543 fStencilPaths.reset();
544 fDrawPath.reset(); 544 fDrawPath.reset();
545 fDrawPaths.reset(); 545 fDrawPaths.reset();
546 fStates.reset(); 546 fStates.reset();
547 fClears.reset(); 547 fClears.reset();
548 fVertexPool.reset(); 548 fVertexPool.reset();
549 fIndexPool.reset(); 549 fIndexPool.reset();
550 fClips.reset(); 550 fClips.reset();
551 fClipOrigins.reset();
552 fCopySurfaces.reset(); 551 fCopySurfaces.reset();
553 fGpuCmdMarkers.reset(); 552 fGpuCmdMarkers.reset();
554 fClipSet = true; 553 fClipSet = true;
555 } 554 }
556 555
557 void GrInOrderDrawBuffer::flush() { 556 void GrInOrderDrawBuffer::flush() {
558 if (fFlushing) { 557 if (fFlushing) {
559 return; 558 return;
560 } 559 }
561 560
(...skipping 18 matching lines...) Expand all
580 579
581 GrDrawState playbackState; 580 GrDrawState playbackState;
582 GrDrawState* prevDrawState = fDstGpu->drawState(); 581 GrDrawState* prevDrawState = fDstGpu->drawState();
583 prevDrawState->ref(); 582 prevDrawState->ref();
584 fDstGpu->setDrawState(&playbackState); 583 fDstGpu->setDrawState(&playbackState);
585 584
586 GrClipData clipData; 585 GrClipData clipData;
587 586
588 StateAllocator::Iter stateIter(&fStates); 587 StateAllocator::Iter stateIter(&fStates);
589 ClipAllocator::Iter clipIter(&fClips); 588 ClipAllocator::Iter clipIter(&fClips);
590 ClipOriginAllocator::Iter clipOriginIter(&fClipOrigins);
591 ClearAllocator::Iter clearIter(&fClears); 589 ClearAllocator::Iter clearIter(&fClears);
592 DrawAllocator::Iter drawIter(&fDraws); 590 DrawAllocator::Iter drawIter(&fDraws);
593 StencilPathAllocator::Iter stencilPathIter(&fStencilPaths); 591 StencilPathAllocator::Iter stencilPathIter(&fStencilPaths);
594 DrawPathAllocator::Iter drawPathIter(&fDrawPath); 592 DrawPathAllocator::Iter drawPathIter(&fDrawPath);
595 DrawPathsAllocator::Iter drawPathsIter(&fDrawPaths); 593 DrawPathsAllocator::Iter drawPathsIter(&fDrawPaths);
596 CopySurfaceAllocator::Iter copySurfaceIter(&fCopySurfaces); 594 CopySurfaceAllocator::Iter copySurfaceIter(&fCopySurfaces);
597 595
598 int currCmdMarker = 0; 596 int currCmdMarker = 0;
599 597
600 fDstGpu->saveActiveTraceMarkers(); 598 fDstGpu->saveActiveTraceMarkers();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 drawPathsIter->fTransforms, drawPathsI ter->fFill, 635 drawPathsIter->fTransforms, drawPathsI ter->fFill,
638 drawPathsIter->fStroke, dstCopy); 636 drawPathsIter->fStroke, dstCopy);
639 break; 637 break;
640 } 638 }
641 case kSetState_Cmd: 639 case kSetState_Cmd:
642 SkAssertResult(stateIter.next()); 640 SkAssertResult(stateIter.next());
643 stateIter->restoreTo(&playbackState); 641 stateIter->restoreTo(&playbackState);
644 break; 642 break;
645 case kSetClip_Cmd: 643 case kSetClip_Cmd:
646 SkAssertResult(clipIter.next()); 644 SkAssertResult(clipIter.next());
647 SkAssertResult(clipOriginIter.next()); 645 clipData.fClipStack = &clipIter->fStack;
648 clipData.fClipStack = clipIter.get(); 646 clipData.fOrigin = clipIter->fOrigin;
649 clipData.fOrigin = *clipOriginIter;
650 fDstGpu->setClip(&clipData); 647 fDstGpu->setClip(&clipData);
651 break; 648 break;
652 case kClear_Cmd: 649 case kClear_Cmd:
653 SkAssertResult(clearIter.next()); 650 SkAssertResult(clearIter.next());
654 if (GrColor_ILLEGAL == clearIter->fColor) { 651 if (GrColor_ILLEGAL == clearIter->fColor) {
655 fDstGpu->discard(clearIter->fRenderTarget); 652 fDstGpu->discard(clearIter->fRenderTarget);
656 } else { 653 } else {
657 fDstGpu->clear(&clearIter->fRect, 654 fDstGpu->clear(&clearIter->fRect,
658 clearIter->fColor, 655 clearIter->fColor,
659 clearIter->fCanIgnoreRect, 656 clearIter->fCanIgnoreRect,
660 clearIter->fRenderTarget); 657 clearIter->fRenderTarget);
661 } 658 }
662 break; 659 break;
663 case kCopySurface_Cmd: 660 case kCopySurface_Cmd:
664 SkAssertResult(copySurfaceIter.next()); 661 SkAssertResult(copySurfaceIter.next());
665 fDstGpu->copySurface(copySurfaceIter->fDst.get(), 662 fDstGpu->copySurface(copySurfaceIter->fDst.get(),
666 copySurfaceIter->fSrc.get(), 663 copySurfaceIter->fSrc.get(),
667 copySurfaceIter->fSrcRect, 664 copySurfaceIter->fSrcRect,
668 copySurfaceIter->fDstPoint); 665 copySurfaceIter->fDstPoint);
669 break; 666 break;
670 } 667 }
671 if (cmd_has_trace_marker(fCmds[c])) { 668 if (cmd_has_trace_marker(fCmds[c])) {
672 fDstGpu->removeGpuTraceMarker(&newMarker); 669 fDstGpu->removeGpuTraceMarker(&newMarker);
673 } 670 }
674 } 671 }
675 fDstGpu->restoreActiveTraceMarkers(); 672 fDstGpu->restoreActiveTraceMarkers();
676 // we should have consumed all the states, clips, etc. 673 // we should have consumed all the states, clips, etc.
677 SkASSERT(!stateIter.next()); 674 SkASSERT(!stateIter.next());
678 SkASSERT(!clipIter.next()); 675 SkASSERT(!clipIter.next());
679 SkASSERT(!clipOriginIter.next());
680 SkASSERT(!clearIter.next()); 676 SkASSERT(!clearIter.next());
681 SkASSERT(!drawIter.next()); 677 SkASSERT(!drawIter.next());
682 SkASSERT(!copySurfaceIter.next()); 678 SkASSERT(!copySurfaceIter.next());
683 SkASSERT(!stencilPathIter.next()); 679 SkASSERT(!stencilPathIter.next());
684 SkASSERT(!drawPathIter.next()); 680 SkASSERT(!drawPathIter.next());
685 SkASSERT(!drawPathsIter.next()); 681 SkASSERT(!drawPathsIter.next());
686 682
687 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); 683 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
688 684
689 fDstGpu->setDrawState(prevDrawState); 685 fDstGpu->setDrawState(prevDrawState);
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) * 917 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) *
922 restoredState.fIndexCount; 918 restoredState.fIndexCount;
923 } 919 }
924 } 920 }
925 921
926 bool GrInOrderDrawBuffer::needsNewState() const { 922 bool GrInOrderDrawBuffer::needsNewState() const {
927 return fStates.empty() || !fStates.back().isEqual(this->getDrawState()); 923 return fStates.empty() || !fStates.back().isEqual(this->getDrawState());
928 } 924 }
929 925
930 bool GrInOrderDrawBuffer::needsNewClip() const { 926 bool GrInOrderDrawBuffer::needsNewClip() const {
931 SkASSERT(fClips.count() == fClipOrigins.count());
932 if (this->getDrawState().isClipState()) { 927 if (this->getDrawState().isClipState()) {
933 if (fClipSet && 928 if (fClipSet &&
934 (fClips.empty() || 929 (fClips.empty() ||
935 fClips.back() != *this->getClip()->fClipStack || 930 fClips.back().fStack != *this->getClip()->fClipStack ||
936 fClipOrigins.back() != this->getClip()->fOrigin)) { 931 fClips.back().fOrigin != this->getClip()->fOrigin)) {
937 return true; 932 return true;
938 } 933 }
939 } 934 }
940 return false; 935 return false;
941 } 936 }
942 937
943 void GrInOrderDrawBuffer::addToCmdBuffer(uint8_t cmd) { 938 void GrInOrderDrawBuffer::addToCmdBuffer(uint8_t cmd) {
944 SkASSERT(!cmd_has_trace_marker(cmd)); 939 SkASSERT(!cmd_has_trace_marker(cmd));
945 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); 940 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
946 if (activeTraceMarkers.count() > 0) { 941 if (activeTraceMarkers.count() > 0) {
947 fCmds.push_back(add_trace_bit(cmd)); 942 fCmds.push_back(add_trace_bit(cmd));
948 fGpuCmdMarkers.push_back(activeTraceMarkers); 943 fGpuCmdMarkers.push_back(activeTraceMarkers);
949 } else { 944 } else {
950 fCmds.push_back(cmd); 945 fCmds.push_back(cmd);
951 } 946 }
952 } 947 }
953 948
954 void GrInOrderDrawBuffer::recordClip() { 949 void GrInOrderDrawBuffer::recordClip() {
955 fClips.push_back(*this->getClip()->fClipStack); 950 fClips.push_back().fStack = *this->getClip()->fClipStack;
956 fClipOrigins.push_back() = this->getClip()->fOrigin; 951 fClips.back().fOrigin = this->getClip()->fOrigin;
957 fClipSet = false; 952 fClipSet = false;
958 this->addToCmdBuffer(kSetClip_Cmd); 953 this->addToCmdBuffer(kSetClip_Cmd);
959 } 954 }
960 955
961 void GrInOrderDrawBuffer::recordState() { 956 void GrInOrderDrawBuffer::recordState() {
962 fStates.push_back().saveFrom(this->getDrawState()); 957 fStates.push_back().saveFrom(this->getDrawState());
963 this->addToCmdBuffer(kSetState_Cmd); 958 this->addToCmdBuffer(kSetState_Cmd);
964 } 959 }
965 960
966 GrInOrderDrawBuffer::DrawRecord* GrInOrderDrawBuffer::recordDraw(const DrawInfo& info) { 961 GrInOrderDrawBuffer::DrawRecord* GrInOrderDrawBuffer::recordDraw(const DrawInfo& info) {
(...skipping 19 matching lines...) Expand all
986 GrInOrderDrawBuffer::Clear* GrInOrderDrawBuffer::recordClear() { 981 GrInOrderDrawBuffer::Clear* GrInOrderDrawBuffer::recordClear() {
987 this->addToCmdBuffer(kClear_Cmd); 982 this->addToCmdBuffer(kClear_Cmd);
988 return &fClears.push_back(); 983 return &fClears.push_back();
989 } 984 }
990 985
991 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() { 986 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() {
992 this->addToCmdBuffer(kCopySurface_Cmd); 987 this->addToCmdBuffer(kCopySurface_Cmd);
993 return &fCopySurfaces.push_back(); 988 return &fCopySurfaces.push_back();
994 } 989 }
995 990
996
997 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { 991 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) {
998 INHERITED::clipWillBeSet(newClipData); 992 INHERITED::clipWillBeSet(newClipData);
999 fClipSet = true; 993 fClipSet = true;
1000 fClipProxyState = kUnknown_ClipProxyState; 994 fClipProxyState = kUnknown_ClipProxyState;
1001 } 995 }
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