| Index: src/gpu/GrInOrderDrawBuffer.cpp
|
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
|
| index 1453276e4944cef93d747e3f9bfa24a8f8f34d89..70d61ecfffba21ef67ab4c8bd1a8fdff53034770 100644
|
| --- a/src/gpu/GrInOrderDrawBuffer.cpp
|
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp
|
| @@ -20,8 +20,7 @@
|
| : INHERITED(gpu, vertexPool, indexPool)
|
| , fCmdBuffer(kCmdBufferInitialSizeInBytes)
|
| , fPrevState(NULL)
|
| - , fDrawID(0)
|
| - , fBatchTarget(gpu, vertexPool, indexPool) {
|
| + , fDrawID(0) {
|
|
|
| SkASSERT(vertexPool);
|
| SkASSERT(indexPool);
|
| @@ -211,7 +210,6 @@
|
| 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() ||
|
| @@ -264,29 +262,6 @@
|
| }
|
| } else {
|
| draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
|
| - }
|
| - this->recordTraceMarkersIfNecessary();
|
| -}
|
| -
|
| -void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch,
|
| - const GrPipelineBuilder& pipelineBuilder,
|
| - const GrScissorState& scissorState,
|
| - const GrDeviceCoordTexture* dstCopy) {
|
| - if (!this->recordStateAndShouldDraw(batch, pipelineBuilder, scissorState, dstCopy)) {
|
| - return;
|
| - }
|
| -
|
| - // 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();
|
| }
|
| @@ -435,6 +410,7 @@
|
| return;
|
| }
|
|
|
| +
|
| CmdBuffer::Iter iter(fCmdBuffer);
|
|
|
| int currCmdMarker = 0;
|
| @@ -442,10 +418,6 @@
|
| // Updated every time we find a set state cmd to reflect the current state in the playback
|
| // stream.
|
| SetState* currentState = NULL;
|
| -
|
| - // TODO to prevent flushing the batch buffer too much, we only flush when wasBatch && !isBatch
|
| - // In the long term we can delete this and just flush once at the end of all geometry generation
|
| - bool wasBatch = false;
|
|
|
| while (iter.next()) {
|
| GrGpuTraceMarker newMarker("", -1);
|
| @@ -457,30 +429,13 @@
|
| ++currCmdMarker;
|
| }
|
|
|
| - bool isSetState = kSetState_Cmd == strip_trace_bit(iter->fType);
|
| -
|
| - if (!isSetState && kDrawBatch_Cmd != strip_trace_bit(iter->fType)) {
|
| - // TODO see note above, this gets deleted once everyone uses batch drawing
|
| - if (wasBatch) {
|
| - wasBatch = false;
|
| - fBatchTarget.flush();
|
| - }
|
| - }
|
| -
|
| - 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);
|
| - } else {
|
| - wasBatch = true;
|
| - }
|
| + this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, ss->fPipeline,
|
| + ss->fPipeline.descInfo(), ss->fBatchTracker);
|
| currentState = ss;
|
| +
|
| } else {
|
| iter->execute(this, currentState);
|
| }
|
| @@ -488,11 +443,6 @@
|
| if (cmd_has_trace_marker(iter->fType)) {
|
| this->getGpu()->removeGpuTraceMarker(&newMarker);
|
| }
|
| - }
|
| -
|
| - // TODO see note above, one last catch
|
| - if (wasBatch) {
|
| - fBatchTarget.flush();
|
| }
|
|
|
| SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
|
| @@ -532,11 +482,6 @@
|
| &buf->fPathIndexBuffer[fIndicesLocation], fIndexType,
|
| &buf->fPathTransformBuffer[fTransformsLocation], fTransformType,
|
| 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*) {}
|
| @@ -586,7 +531,7 @@
|
| ss->fPrimitiveProcessor->initBatchTracker(&ss->fBatchTracker,
|
| ss->fPipeline.getInitBatchTracker());
|
|
|
| - if (fPrevState && fPrevState->fPrimitiveProcessor.get() &&
|
| + if (fPrevState &&
|
| fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker,
|
| *ss->fPrimitiveProcessor,
|
| ss->fBatchTracker) &&
|
| @@ -599,33 +544,6 @@
|
| 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));
|
|
|