diff options
author | 2015-01-28 06:54:30 -0800 | |
---|---|---|
committer | 2015-01-28 06:54:30 -0800 | |
commit | c2893c5e3870d7e9a37ca146e7da88fba54977d5 (patch) | |
tree | 9efd98166a608e5ae24d35ab0dde1c7cb9b763b3 /src/gpu/GrInOrderDrawBuffer.cpp | |
parent | 8b0a05ae44911f9263be5936457b66a967b8a1fc (diff) |
Revert of GrBatchPrototype (patchset #32 id:630001 of https://codereview.chromium.org/845103005/)
Reason for revert:
One last try to fix mac perf regression
Original issue's description:
> GrBatchPrototype
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/d15e4e45374275c045572b304c229237c4a82be4
>
> Committed: https://skia.googlesource.com/skia/+/d5a7db4a867c7e6ccf8451a053d987b470099198
TBR=bsalomon@google.com,kkinnunen@nvidia.com,joshualitt@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/877393002
Diffstat (limited to 'src/gpu/GrInOrderDrawBuffer.cpp')
-rw-r--r-- | src/gpu/GrInOrderDrawBuffer.cpp | 122 |
1 files changed, 10 insertions, 112 deletions
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp index 1cc6ec39d3..70d61ecfff 100644 --- a/src/gpu/GrInOrderDrawBuffer.cpp +++ b/src/gpu/GrInOrderDrawBuffer.cpp @@ -7,7 +7,6 @@ #include "GrInOrderDrawBuffer.h" -#include "GrBufferAllocPool.h" #include "GrDefaultGeoProcFactory.h" #include "GrDrawTargetCaps.h" #include "GrGpu.h" @@ -21,9 +20,7 @@ GrInOrderDrawBuffer::GrInOrderDrawBuffer(GrGpu* gpu, : INHERITED(gpu, vertexPool, indexPool) , fCmdBuffer(kCmdBufferInitialSizeInBytes) , fPrevState(NULL) - , fDrawID(0) - , fBatchTarget(gpu, vertexPool, indexPool) - , fFlushBatches(false) { + , fDrawID(0) { SkASSERT(vertexPool); SkASSERT(indexPool); @@ -213,7 +210,6 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const GrPipelineBuilder& pipelineBu Draw* draw = static_cast<Draw*>(&fCmdBuffer.back()); if (!draw->fInfo.isInstanced() || - draw->fInfo.primitiveType() != info.primitiveType() || draw->fInfo.verticesPerInstance() != info.verticesPerInstance() || draw->fInfo.indicesPerInstance() != info.indicesPerInstance() || draw->fInfo.vertexBuffer() != info.vertexBuffer() || @@ -270,32 +266,6 @@ void GrInOrderDrawBuffer::onDraw(const GrPipelineBuilder& pipelineBuilder, this->recordTraceMarkersIfNecessary(); } -void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch, - const GrPipelineBuilder& pipelineBuilder, - const GrScissorState& scissorState, - const GrDeviceCoordTexture* dstCopy) { - if (!this->recordStateAndShouldDraw(batch, pipelineBuilder, scissorState, dstCopy)) { - return; - } - - // TODO hack until batch is everywhere - fFlushBatches = true; - - // Check if there is a Batch Draw we can batch with - if (kDrawBatch_Cmd != strip_trace_bit(fCmdBuffer.back().fType)) { - GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch)); - return; - } - - DrawBatch* draw = static_cast<DrawBatch*>(&fCmdBuffer.back()); - if (draw->fBatch->combineIfPossible(batch)) { - return; - } else { - GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch)); - } - this->recordTraceMarkersIfNecessary(); -} - void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder, const GrPathProcessor* pathProc, const GrPath* path, @@ -441,39 +411,14 @@ void GrInOrderDrawBuffer::onFlush() { } - // Updated every time we find a set state cmd to reflect the current state in the playback - // stream. - SetState* currentState = NULL; - - // TODO we noticed a huge regression on MacMinis with the initial implementation of GrBatch - // Because of vertex buffer mismanagement between batch and non batch. To compensate we - // flush all the batches into one contigous buffer - if (fFlushBatches) { - fFlushBatches = false; - CmdBuffer::Iter preflush(fCmdBuffer); - while(preflush.next()) { - bool isSetState = kSetState_Cmd == strip_trace_bit(preflush->fType); - if (isSetState) { - SetState* ss = reinterpret_cast<SetState*>(preflush.get()); - if (!ss->fPrimitiveProcessor) { - currentState = ss; - } - } else if (kDrawBatch_Cmd == strip_trace_bit(preflush->fType)) { - preflush->execute(this, currentState); - } - } - } - - // TODO this is temporary while batch is being rolled out - this->getVertexAllocPool()->unmap(); - this->getIndexAllocPool()->unmap(); - fBatchTarget.preFlush(); - - currentState = NULL; CmdBuffer::Iter iter(fCmdBuffer); int currCmdMarker = 0; + // Updated every time we find a set state cmd to reflect the current state in the playback + // stream. + SetState* currentState = NULL; + while (iter.next()) { GrGpuTraceMarker newMarker("", -1); SkString traceString; @@ -484,25 +429,13 @@ void GrInOrderDrawBuffer::onFlush() { ++currCmdMarker; } - // TODO temporary hack - if (kDrawBatch_Cmd == strip_trace_bit(iter->fType)) { - fBatchTarget.flushNext(); - continue; - } - - bool isSetState = kSetState_Cmd == strip_trace_bit(iter->fType); - if (isSetState) { + if (kSetState_Cmd == strip_trace_bit(iter->fType)) { SetState* ss = reinterpret_cast<SetState*>(iter.get()); - // TODO sometimes we have a prim proc, othertimes we have a GrBatch. Eventually we will - // only have GrBatch and we can delete this - if (ss->fPrimitiveProcessor) { - this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, - ss->fPipeline, - ss->fPipeline.descInfo(), - ss->fBatchTracker); - } + this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, ss->fPipeline, + ss->fPipeline.descInfo(), ss->fBatchTracker); currentState = ss; + } else { iter->execute(this, currentState); } @@ -512,9 +445,6 @@ void GrInOrderDrawBuffer::onFlush() { } } - // TODO see copious notes about hack - fBatchTarget.postFlush(); - SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); ++fDrawID; } @@ -554,11 +484,6 @@ void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, const Set fCount, fStencilSettings); } -void GrInOrderDrawBuffer::DrawBatch::execute(GrInOrderDrawBuffer* buf, const SetState* state) { - SkASSERT(state); - fBatch->generateGeometry(buf->getBatchTarget(), &state->fPipeline); -} - void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const SetState*) {} void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const SetState*) { @@ -606,7 +531,7 @@ bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrPipelineBuilder& pipe ss->fPrimitiveProcessor->initBatchTracker(&ss->fBatchTracker, ss->fPipeline.getInitBatchTracker()); - if (fPrevState && fPrevState->fPrimitiveProcessor.get() && + if (fPrevState && fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker, *ss->fPrimitiveProcessor, ss->fBatchTracker) && @@ -619,33 +544,6 @@ bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrPipelineBuilder& pipe return true; } -bool GrInOrderDrawBuffer::recordStateAndShouldDraw(GrBatch* batch, - const GrPipelineBuilder& pipelineBuilder, - const GrScissorState& scissor, - const GrDeviceCoordTexture* dstCopy) { - // TODO this gets much simpler when we have batches everywhere. - // If the previous command is also a set state, then we check to see if it has a Batch. If so, - // and we can make the two batches equal, and we can combine the states, then we make them equal - SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, - (batch, pipelineBuilder, *this->getGpu()->caps(), scissor, - dstCopy)); - if (ss->fPipeline.mustSkip()) { - fCmdBuffer.pop_back(); - return false; - } - - batch->initBatchTracker(ss->fPipeline.getInitBatchTracker()); - - if (fPrevState && !fPrevState->fPrimitiveProcessor.get() && - fPrevState->fPipeline.isEqual(ss->fPipeline)) { - fCmdBuffer.pop_back(); - } else { - fPrevState = ss; - this->recordTraceMarkersIfNecessary(); - } - return true; -} - void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { SkASSERT(!fCmdBuffer.empty()); SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType)); |