| 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;
|
| -}
|
|
|