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

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

Issue 368913003: Remove deferred version of GrDrawState. (Closed) Base URL: https://skia.googlesource.com/skia.git@citer
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 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 570
571 GrAutoTRestore<bool> flushRestore(&fFlushing); 571 GrAutoTRestore<bool> flushRestore(&fFlushing);
572 fFlushing = true; 572 fFlushing = true;
573 573
574 fVertexPool.unmap(); 574 fVertexPool.unmap();
575 fIndexPool.unmap(); 575 fIndexPool.unmap();
576 576
577 GrDrawTarget::AutoClipRestore acr(fDstGpu); 577 GrDrawTarget::AutoClipRestore acr(fDstGpu);
578 AutoGeometryAndStatePush agasp(fDstGpu, kPreserve_ASRInit); 578 AutoGeometryAndStatePush agasp(fDstGpu, kPreserve_ASRInit);
579 579
580 GrDrawState playbackState; 580 GrDrawState* prevDrawState = SkRef(fDstGpu->drawState());
581 GrDrawState* prevDrawState = fDstGpu->drawState();
582 prevDrawState->ref();
583 fDstGpu->setDrawState(&playbackState);
584 581
585 GrClipData clipData; 582 GrClipData clipData;
586 583
587 StateAllocator::Iter stateIter(&fStates); 584 StateAllocator::Iter stateIter(&fStates);
588 ClipAllocator::Iter clipIter(&fClips); 585 ClipAllocator::Iter clipIter(&fClips);
589 ClearAllocator::Iter clearIter(&fClears); 586 ClearAllocator::Iter clearIter(&fClears);
590 DrawAllocator::Iter drawIter(&fDraws); 587 DrawAllocator::Iter drawIter(&fDraws);
591 StencilPathAllocator::Iter stencilPathIter(&fStencilPaths); 588 StencilPathAllocator::Iter stencilPathIter(&fStencilPaths);
592 DrawPathAllocator::Iter drawPathIter(&fDrawPath); 589 DrawPathAllocator::Iter drawPathIter(&fDrawPath);
593 DrawPathsAllocator::Iter drawPathsIter(&fDrawPaths); 590 DrawPathsAllocator::Iter drawPathsIter(&fDrawPaths);
594 CopySurfaceAllocator::Iter copySurfaceIter(&fCopySurfaces); 591 CopySurfaceAllocator::Iter copySurfaceIter(&fCopySurfaces);
595 592
596 int currCmdMarker = 0; 593 int currCmdMarker = 0;
597 594
598 fDstGpu->saveActiveTraceMarkers(); 595 fDstGpu->saveActiveTraceMarkers();
599 for (int c = 0; c < numCmds; ++c) { 596 for (int c = 0; c < numCmds; ++c) {
600 GrGpuTraceMarker newMarker("", -1); 597 GrGpuTraceMarker newMarker("", -1);
601 if (cmd_has_trace_marker(fCmds[c])) { 598 if (cmd_has_trace_marker(fCmds[c])) {
602 SkString traceString = fGpuCmdMarkers[currCmdMarker].toString(); 599 SkString traceString = fGpuCmdMarkers[currCmdMarker].toString();
603 newMarker.fMarker = traceString.c_str(); 600 newMarker.fMarker = traceString.c_str();
604 fDstGpu->addGpuTraceMarker(&newMarker); 601 fDstGpu->addGpuTraceMarker(&newMarker);
605 ++currCmdMarker; 602 ++currCmdMarker;
606 } 603 }
607 switch (strip_trace_bit(fCmds[c])) { 604 switch (strip_trace_bit(fCmds[c])) {
608 case kDraw_Cmd: { 605 case kDraw_Cmd: {
606 SkASSERT(fDstGpu->drawState() != prevDrawState);
609 SkAssertResult(drawIter.next()); 607 SkAssertResult(drawIter.next());
610 fDstGpu->setVertexSourceToBuffer(drawIter->fVertexBuffer); 608 fDstGpu->setVertexSourceToBuffer(drawIter->fVertexBuffer);
611 if (drawIter->isIndexed()) { 609 if (drawIter->isIndexed()) {
612 fDstGpu->setIndexSourceToBuffer(drawIter->fIndexBuffer); 610 fDstGpu->setIndexSourceToBuffer(drawIter->fIndexBuffer);
613 } 611 }
614 fDstGpu->executeDraw(*drawIter); 612 fDstGpu->executeDraw(*drawIter);
615 break; 613 break;
616 } 614 }
617 case kStencilPath_Cmd: { 615 case kStencilPath_Cmd: {
616 SkASSERT(fDstGpu->drawState() != prevDrawState);
618 SkAssertResult(stencilPathIter.next()); 617 SkAssertResult(stencilPathIter.next());
619 fDstGpu->stencilPath(stencilPathIter->fPath.get(), stencilPathIt er->fFill); 618 fDstGpu->stencilPath(stencilPathIter->fPath.get(), stencilPathIt er->fFill);
620 break; 619 break;
621 } 620 }
622 case kDrawPath_Cmd: { 621 case kDrawPath_Cmd: {
622 SkASSERT(fDstGpu->drawState() != prevDrawState);
623 SkAssertResult(drawPathIter.next()); 623 SkAssertResult(drawPathIter.next());
624 fDstGpu->executeDrawPath(drawPathIter->fPath.get(), drawPathIter ->fFill, 624 fDstGpu->executeDrawPath(drawPathIter->fPath.get(), drawPathIter ->fFill,
625 NULL != drawPathIter->fDstCopy.texture( ) ? 625 NULL != drawPathIter->fDstCopy.texture( ) ?
626 &drawPathIter->fDstCopy : 626 &drawPathIter->fDstCopy :
627 NULL); 627 NULL);
628 break; 628 break;
629 } 629 }
630 case kDrawPaths_Cmd: { 630 case kDrawPaths_Cmd: {
631 SkASSERT(fDstGpu->drawState() != prevDrawState);
631 SkAssertResult(drawPathsIter.next()); 632 SkAssertResult(drawPathsIter.next());
632 const GrDeviceCoordTexture* dstCopy = 633 const GrDeviceCoordTexture* dstCopy =
633 NULL !=drawPathsIter->fDstCopy.texture() ? &drawPathsIter->f DstCopy : NULL; 634 NULL !=drawPathsIter->fDstCopy.texture() ? &drawPathsIter->f DstCopy : NULL;
634 fDstGpu->executeDrawPaths(drawPathsIter->fPathCount, drawPathsIt er->fPaths, 635 fDstGpu->executeDrawPaths(drawPathsIter->fPathCount, drawPathsIt er->fPaths,
635 drawPathsIter->fTransforms, drawPathsI ter->fFill, 636 drawPathsIter->fTransforms, drawPathsI ter->fFill,
636 drawPathsIter->fStroke, dstCopy); 637 drawPathsIter->fStroke, dstCopy);
637 break; 638 break;
638 } 639 }
639 case kSetState_Cmd: 640 case kSetState_Cmd:
640 SkAssertResult(stateIter.next()); 641 SkAssertResult(stateIter.next());
641 stateIter->restoreTo(&playbackState); 642 fDstGpu->setDrawState(stateIter.get());
642 break; 643 break;
643 case kSetClip_Cmd: 644 case kSetClip_Cmd:
644 SkAssertResult(clipIter.next()); 645 SkAssertResult(clipIter.next());
645 clipData.fClipStack = &clipIter->fStack; 646 clipData.fClipStack = &clipIter->fStack;
646 clipData.fOrigin = clipIter->fOrigin; 647 clipData.fOrigin = clipIter->fOrigin;
647 fDstGpu->setClip(&clipData); 648 fDstGpu->setClip(&clipData);
648 break; 649 break;
649 case kClear_Cmd: 650 case kClear_Cmd:
650 SkAssertResult(clearIter.next()); 651 SkAssertResult(clearIter.next());
651 if (GrColor_ILLEGAL == clearIter->fColor) { 652 if (GrColor_ILLEGAL == clearIter->fColor) {
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
913 poolState.fUsedPoolVertexBytes = restoredState.fVertexSize * restoredSta te.fVertexCount; 914 poolState.fUsedPoolVertexBytes = restoredState.fVertexSize * restoredSta te.fVertexCount;
914 } 915 }
915 if (kReserved_GeometrySrcType == restoredState.fIndexSrc || 916 if (kReserved_GeometrySrcType == restoredState.fIndexSrc ||
916 kArray_GeometrySrcType == restoredState.fIndexSrc) { 917 kArray_GeometrySrcType == restoredState.fIndexSrc) {
917 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) * 918 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) *
918 restoredState.fIndexCount; 919 restoredState.fIndexCount;
919 } 920 }
920 } 921 }
921 922
922 bool GrInOrderDrawBuffer::needsNewState() const { 923 bool GrInOrderDrawBuffer::needsNewState() const {
923 return fStates.empty() || !fStates.back().isEqual(this->getDrawState()); 924 return fStates.empty() || fStates.back() != this->getDrawState();
924 } 925 }
925 926
926 bool GrInOrderDrawBuffer::needsNewClip() const { 927 bool GrInOrderDrawBuffer::needsNewClip() const {
927 if (this->getDrawState().isClipState()) { 928 if (this->getDrawState().isClipState()) {
928 if (fClipSet && 929 if (fClipSet &&
929 (fClips.empty() || 930 (fClips.empty() ||
930 fClips.back().fStack != *this->getClip()->fClipStack || 931 fClips.back().fStack != *this->getClip()->fClipStack ||
931 fClips.back().fOrigin != this->getClip()->fOrigin)) { 932 fClips.back().fOrigin != this->getClip()->fOrigin)) {
932 return true; 933 return true;
933 } 934 }
(...skipping 13 matching lines...) Expand all
947 } 948 }
948 949
949 void GrInOrderDrawBuffer::recordClip() { 950 void GrInOrderDrawBuffer::recordClip() {
950 fClips.push_back().fStack = *this->getClip()->fClipStack; 951 fClips.push_back().fStack = *this->getClip()->fClipStack;
951 fClips.back().fOrigin = this->getClip()->fOrigin; 952 fClips.back().fOrigin = this->getClip()->fOrigin;
952 fClipSet = false; 953 fClipSet = false;
953 this->addToCmdBuffer(kSetClip_Cmd); 954 this->addToCmdBuffer(kSetClip_Cmd);
954 } 955 }
955 956
956 void GrInOrderDrawBuffer::recordState() { 957 void GrInOrderDrawBuffer::recordState() {
957 fStates.push_back().saveFrom(this->getDrawState()); 958 fStates.push_back() = this->getDrawState();
958 this->addToCmdBuffer(kSetState_Cmd); 959 this->addToCmdBuffer(kSetState_Cmd);
959 } 960 }
960 961
961 GrInOrderDrawBuffer::DrawRecord* GrInOrderDrawBuffer::recordDraw(const DrawInfo& info) { 962 GrInOrderDrawBuffer::DrawRecord* GrInOrderDrawBuffer::recordDraw(const DrawInfo& info) {
962 this->addToCmdBuffer(kDraw_Cmd); 963 this->addToCmdBuffer(kDraw_Cmd);
963 return &fDraws.push_back(info); 964 return &fDraws.push_back(info);
964 } 965 }
965 966
966 GrInOrderDrawBuffer::StencilPath* GrInOrderDrawBuffer::recordStencilPath() { 967 GrInOrderDrawBuffer::StencilPath* GrInOrderDrawBuffer::recordStencilPath() {
967 this->addToCmdBuffer(kStencilPath_Cmd); 968 this->addToCmdBuffer(kStencilPath_Cmd);
(...skipping 18 matching lines...) Expand all
986 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() { 987 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() {
987 this->addToCmdBuffer(kCopySurface_Cmd); 988 this->addToCmdBuffer(kCopySurface_Cmd);
988 return &fCopySurfaces.push_back(); 989 return &fCopySurfaces.push_back();
989 } 990 }
990 991
991 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { 992 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) {
992 INHERITED::clipWillBeSet(newClipData); 993 INHERITED::clipWillBeSet(newClipData);
993 fClipSet = true; 994 fClipSet = true;
994 fClipProxyState = kUnknown_ClipProxyState; 995 fClipProxyState = kUnknown_ClipProxyState;
995 } 996 }
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