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

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

Issue 1386683002: Revert of Incrementally flush GrDrawTarget (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 2 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/GrDrawTarget.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 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrDrawTarget.h" 9 #include "GrDrawTarget.h"
10 10
(...skipping 17 matching lines...) Expand all
28 #include "batches/GrRectBatchFactory.h" 28 #include "batches/GrRectBatchFactory.h"
29 #include "batches/GrStencilPathBatch.h" 29 #include "batches/GrStencilPathBatch.h"
30 30
31 #include "SkStrokeRec.h" 31 #include "SkStrokeRec.h"
32 32
33 //////////////////////////////////////////////////////////////////////////////// 33 ////////////////////////////////////////////////////////////////////////////////
34 34
35 GrDrawTarget::GrDrawTarget(GrGpu* gpu, GrResourceProvider* resourceProvider) 35 GrDrawTarget::GrDrawTarget(GrGpu* gpu, GrResourceProvider* resourceProvider)
36 : fGpu(SkRef(gpu)) 36 : fGpu(SkRef(gpu))
37 , fResourceProvider(resourceProvider) 37 , fResourceProvider(resourceProvider)
38 , fFlushState(fGpu, fResourceProvider, 0)
39 , fFlushing(false) 38 , fFlushing(false)
40 , fFirstUnpreparedBatch(0) { 39 , fLastFlushToken(0) {
41 // TODO: Stop extracting the context (currently needed by GrClipMaskManager) 40 // TODO: Stop extracting the context (currently needed by GrClipMaskManager)
42 fContext = fGpu->getContext(); 41 fContext = fGpu->getContext();
43 fClipMaskManager.reset(new GrClipMaskManager(this)); 42 fClipMaskManager.reset(new GrClipMaskManager(this));
44 } 43 }
45 44
46 GrDrawTarget::~GrDrawTarget() { 45 GrDrawTarget::~GrDrawTarget() {
47 fGpu->unref(); 46 fGpu->unref();
48 } 47 }
49 48
50 //////////////////////////////////////////////////////////////////////////////// 49 ////////////////////////////////////////////////////////////////////////////////
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 dstTexture->setOffset(copyRect.fLeft, copyRect.fTop); 110 dstTexture->setOffset(copyRect.fLeft, copyRect.fTop);
112 return true; 111 return true;
113 } 112 }
114 113
115 void GrDrawTarget::flush() { 114 void GrDrawTarget::flush() {
116 if (fFlushing) { 115 if (fFlushing) {
117 return; 116 return;
118 } 117 }
119 fFlushing = true; 118 fFlushing = true;
120 119
120 GrBatchFlushState flushState(fGpu, fResourceProvider, fLastFlushToken);
121
121 // Loop over all batches and generate geometry 122 // Loop over all batches and generate geometry
122 for (; fFirstUnpreparedBatch < fBatches.count(); ++fFirstUnpreparedBatch) { 123 for (int i = 0; i < fBatches.count(); ++i) {
123 fBatches[fFirstUnpreparedBatch]->prepare(&fFlushState); 124 fBatches[i]->prepare(&flushState);
124 } 125 }
125 126
126 // Upload all data to the GPU 127 // Upload all data to the GPU
127 fFlushState.preIssueDraws(); 128 flushState.preIssueDraws();
128 129
129 // Draw all the generated geometry. 130 // Draw all the generated geometry.
130 for (int i = 0; i < fBatches.count(); ++i) { 131 for (int i = 0; i < fBatches.count(); ++i) {
131 fBatches[i]->draw(&fFlushState); 132 fBatches[i]->draw(&flushState);
132 } 133 }
133 134
134 this->reset(); 135 fLastFlushToken = flushState.lastFlushedToken();
135 136
136 fFlushing = false; 137 fFlushing = false;
138 this->reset();
137 } 139 }
138 140
139 void GrDrawTarget::reset() { 141 void GrDrawTarget::reset() {
140 fFirstUnpreparedBatch = 0;
141 fBatches.reset(); 142 fBatches.reset();
142 } 143 }
143 144
144 void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawBat ch* batch) { 145 void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawBat ch* batch) {
145 // Setup clip 146 // Setup clip
146 GrScissorState scissorState; 147 GrScissorState scissorState;
147 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; 148 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
148 GrPipelineBuilder::AutoRestoreStencil ars; 149 GrPipelineBuilder::AutoRestoreStencil ars;
149 if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissor State, 150 if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissor State,
150 &batch->bounds())) { 151 &batch->bounds())) {
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 ++i; 427 ++i;
427 if (i == maxCandidates) { 428 if (i == maxCandidates) {
428 GrBATCH_INFO("\t\tReached max lookback or beginning of batch arr ay %d\n", i); 429 GrBATCH_INFO("\t\tReached max lookback or beginning of batch arr ay %d\n", i);
429 break; 430 break;
430 } 431 }
431 } 432 }
432 } else { 433 } else {
433 GrBATCH_INFO("\t\tFirstBatch\n"); 434 GrBATCH_INFO("\t\tFirstBatch\n");
434 } 435 }
435 fBatches.push_back().reset(SkRef(batch)); 436 fBatches.push_back().reset(SkRef(batch));
436 if (fBatches.count() > kMaxLookback) {
437 SkASSERT(fBatches.count() - kMaxLookback - fFirstUnpreparedBatch == 1);
438 fBatches[fFirstUnpreparedBatch++]->prepare(&fFlushState);
439 }
440 } 437 }
441 438
442 /////////////////////////////////////////////////////////////////////////////// 439 ///////////////////////////////////////////////////////////////////////////////
443 440
444 bool GrDrawTarget::installPipelineInDrawBatch(const GrPipelineBuilder* pipelineB uilder, 441 bool GrDrawTarget::installPipelineInDrawBatch(const GrPipelineBuilder* pipelineB uilder,
445 const GrScissorState* scissor, 442 const GrScissorState* scissor,
446 GrDrawBatch* batch) { 443 GrDrawBatch* batch) {
447 GrPipeline::CreateArgs args; 444 GrPipeline::CreateArgs args;
448 args.fPipelineBuilder = pipelineBuilder; 445 args.fPipelineBuilder = pipelineBuilder;
449 args.fCaps = this->caps(); 446 args.fCaps = this->caps();
(...skipping 11 matching lines...) Expand all
461 } 458 }
462 459
463 return true; 460 return true;
464 } 461 }
465 462
466 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend erTarget* rt) { 463 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend erTarget* rt) {
467 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); 464 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt);
468 this->recordBatch(batch); 465 this->recordBatch(batch);
469 batch->unref(); 466 batch->unref();
470 } 467 }
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698