Index: src/gpu/GrInOrderDrawBuffer.cpp |
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp |
index 76e085dffa2809a6194e150683832565c875a2cc..e298be6c8bffb575798ae14250512495626e0fe5 100644 |
--- a/src/gpu/GrInOrderDrawBuffer.cpp |
+++ b/src/gpu/GrInOrderDrawBuffer.cpp |
@@ -17,7 +17,6 @@ |
, fCommands(context->getGpu(), vertexPool, indexPool) |
, fPathIndexBuffer(kPathIdxBufferMinReserve * sizeof(char)/4) |
, fPathTransformBuffer(kPathXformBufferMinReserve * sizeof(float)/4) |
- , fPipelineBuffer(kPipelineBufferMinReserve) |
, fDrawID(0) { |
SkASSERT(vertexPool); |
@@ -301,12 +300,7 @@ |
void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch, |
const PipelineInfo& pipelineInfo) { |
- State* state = this->setupPipelineAndShouldDraw(batch, pipelineInfo); |
- if (!state) { |
- return; |
- } |
- |
- GrTargetCommands::Cmd* cmd = fCommands.recordDrawBatch(state, batch); |
+ GrTargetCommands::Cmd* cmd = fCommands.recordDrawBatch(this, batch, pipelineInfo); |
this->recordTraceMarkersIfNecessary(cmd); |
} |
@@ -315,7 +309,7 @@ |
const GrPath* path, |
const GrScissorState& scissorState, |
const GrStencilSettings& stencilSettings) { |
- GrTargetCommands::Cmd* cmd = fCommands.recordStencilPath(pipelineBuilder, |
+ GrTargetCommands::Cmd* cmd = fCommands.recordStencilPath(this, pipelineBuilder, |
pathProc, path, scissorState, |
stencilSettings); |
this->recordTraceMarkersIfNecessary(cmd); |
@@ -325,11 +319,9 @@ |
const GrPath* path, |
const GrStencilSettings& stencilSettings, |
const PipelineInfo& pipelineInfo) { |
- State* state = this->setupPipelineAndShouldDraw(pathProc, pipelineInfo); |
- if (!state) { |
- return; |
- } |
- GrTargetCommands::Cmd* cmd = fCommands.recordDrawPath(state, pathProc, path, stencilSettings); |
+ GrTargetCommands::Cmd* cmd = fCommands.recordDrawPath(this, pathProc, |
+ path, stencilSettings, |
+ pipelineInfo); |
this->recordTraceMarkersIfNecessary(cmd); |
} |
@@ -342,11 +334,7 @@ |
int count, |
const GrStencilSettings& stencilSettings, |
const PipelineInfo& pipelineInfo) { |
- State* state = this->setupPipelineAndShouldDraw(pathProc, pipelineInfo); |
- if (!state) { |
- return; |
- } |
- GrTargetCommands::Cmd* cmd = fCommands.recordDrawPaths(state, this, pathProc, pathRange, |
+ GrTargetCommands::Cmd* cmd = fCommands.recordDrawPaths(this, pathProc, pathRange, |
indices, indexType, transformValues, |
transformType, count, |
stencilSettings, pipelineInfo); |
@@ -355,14 +343,16 @@ |
void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color, |
bool canIgnoreRect, GrRenderTarget* renderTarget) { |
- GrTargetCommands::Cmd* cmd = fCommands.recordClear(rect, color, canIgnoreRect, renderTarget); |
+ GrTargetCommands::Cmd* cmd = fCommands.recordClear(this, rect, color, |
+ canIgnoreRect, renderTarget); |
this->recordTraceMarkersIfNecessary(cmd); |
} |
void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect, |
bool insideClip, |
GrRenderTarget* renderTarget) { |
- GrTargetCommands::Cmd* cmd = fCommands.recordClearStencilClip(rect, insideClip, renderTarget); |
+ GrTargetCommands::Cmd* cmd = fCommands.recordClearStencilClip(this, rect, |
+ insideClip, renderTarget); |
this->recordTraceMarkersIfNecessary(cmd); |
} |
@@ -371,7 +361,7 @@ |
return; |
} |
- GrTargetCommands::Cmd* cmd = fCommands.recordDiscard(renderTarget); |
+ GrTargetCommands::Cmd* cmd = fCommands.recordDiscard(this, renderTarget); |
this->recordTraceMarkersIfNecessary(cmd); |
} |
@@ -380,15 +370,6 @@ |
fPathIndexBuffer.rewind(); |
fPathTransformBuffer.rewind(); |
fGpuCmdMarkers.reset(); |
- |
- fPrevState.reset(NULL); |
- // Note, fPrevState points into fPipelineBuffer's allocation, so we have to reset first. |
- // Furthermore, we have to reset fCommands before fPipelineBuffer too. |
- if (fDrawID % kPipelineBufferHighWaterMark) { |
- fPipelineBuffer.rewind(); |
- } else { |
- fPipelineBuffer.reset(); |
- } |
} |
void GrInOrderDrawBuffer::onFlush() { |
@@ -419,55 +400,3 @@ |
} |
} |
} |
- |
-GrTargetCommands::State* |
-GrInOrderDrawBuffer::setupPipelineAndShouldDraw(const GrPrimitiveProcessor* primProc, |
- const GrDrawTarget::PipelineInfo& pipelineInfo) { |
- State* state = this->allocState(); |
- this->setupPipeline(pipelineInfo, state->pipelineLocation()); |
- |
- if (state->getPipeline()->mustSkip()) { |
- this->unallocState(state); |
- return NULL; |
- } |
- |
- state->fPrimitiveProcessor->initBatchTracker(&state->fBatchTracker, |
- state->getPipeline()->getInitBatchTracker()); |
- |
- if (fPrevState && fPrevState->fPrimitiveProcessor.get() && |
- fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker, |
- *state->fPrimitiveProcessor, |
- state->fBatchTracker) && |
- fPrevState->getPipeline()->isEqual(*state->getPipeline())) { |
- this->unallocState(state); |
- } else { |
- fPrevState.reset(state); |
- } |
- |
- fCommands.recordXferBarrierIfNecessary(*fPrevState->getPipeline(), this); |
- return fPrevState; |
-} |
- |
-GrTargetCommands::State* |
-GrInOrderDrawBuffer::setupPipelineAndShouldDraw(GrBatch* batch, |
- const GrDrawTarget::PipelineInfo& pipelineInfo) { |
- State* state = this->allocState(); |
- this->setupPipeline(pipelineInfo, state->pipelineLocation()); |
- |
- if (state->getPipeline()->mustSkip()) { |
- this->unallocState(state); |
- return NULL; |
- } |
- |
- batch->initBatchTracker(state->getPipeline()->getInitBatchTracker()); |
- |
- if (fPrevState && !fPrevState->fPrimitiveProcessor.get() && |
- fPrevState->getPipeline()->isEqual(*state->getPipeline())) { |
- this->unallocState(state); |
- } else { |
- fPrevState.reset(state); |
- } |
- |
- fCommands.recordXferBarrierIfNecessary(*fPrevState->getPipeline(), this); |
- return fPrevState; |
-} |