| Index: src/gpu/GrInOrderDrawBuffer.cpp
|
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
|
| index 2f90373c339f581f0b1adf81e4dc251ec04f522a..7fc201fb0bcabda18c6f9c899151f000ef539d9b 100644
|
| --- a/src/gpu/GrInOrderDrawBuffer.cpp
|
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp
|
| @@ -20,7 +20,7 @@ GrInOrderDrawBuffer::GrInOrderDrawBuffer(GrGpu* gpu,
|
| GrIndexBufferAllocPool* indexPool)
|
| : INHERITED(gpu->getContext())
|
| , fCmdBuffer(kCmdBufferInitialSizeInBytes)
|
| - , fLastState(NULL)
|
| + , fPrevState(NULL)
|
| , fDstGpu(gpu)
|
| , fVertexPool(*vertexPool)
|
| , fIndexPool(*indexPool)
|
| @@ -435,7 +435,7 @@ void GrInOrderDrawBuffer::reset() {
|
| this->resetIndexSource();
|
|
|
| fCmdBuffer.reset();
|
| - fLastState.reset(NULL);
|
| + fPrevState = NULL;
|
| fVertexPool.reset();
|
| fIndexPool.reset();
|
| reset_data_buffer(&fPathIndexBuffer, kPathIdxBufferMinReserve);
|
| @@ -470,7 +470,7 @@ void GrInOrderDrawBuffer::flush() {
|
|
|
| // Updated every time we find a set state cmd to reflect the current state in the playback
|
| // stream.
|
| - SkAutoTUnref<const GrOptDrawState> currentOptState;
|
| + const GrOptDrawState* currentOptState = NULL;
|
|
|
| while (iter.next()) {
|
| GrGpuTraceMarker newMarker("", -1);
|
| @@ -484,9 +484,9 @@ void GrInOrderDrawBuffer::flush() {
|
|
|
| if (kSetState_Cmd == strip_trace_bit(iter->fType)) {
|
| SetState* ss = reinterpret_cast<SetState*>(iter.get());
|
| - currentOptState.reset(SkRef(ss->fState.get()));
|
| + currentOptState = &ss->fState;
|
| } else {
|
| - iter->execute(this, currentOptState.get());
|
| + iter->execute(this, currentOptState);
|
| }
|
|
|
| if (cmd_has_trace_marker(iter->fType)) {
|
| @@ -502,29 +502,32 @@ void GrInOrderDrawBuffer::flush() {
|
| }
|
|
|
| void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState* optState) {
|
| + SkASSERT(optState);
|
| buf->fDstGpu->draw(*optState, fInfo);
|
| }
|
|
|
| void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf,
|
| const GrOptDrawState* optState) {
|
| + SkASSERT(optState);
|
| buf->fDstGpu->stencilPath(*optState, this->path(), fStencilSettings);
|
| }
|
|
|
| void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf,
|
| const GrOptDrawState* optState) {
|
| + SkASSERT(optState);
|
| buf->fDstGpu->drawPath(*optState, this->path(), fStencilSettings);
|
| }
|
|
|
| void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf,
|
| const GrOptDrawState* optState) {
|
| + SkASSERT(optState);
|
| buf->fDstGpu->drawPaths(*optState, this->pathRange(),
|
| &buf->fPathIndexBuffer[fIndicesLocation], fCount,
|
| &buf->fPathTransformBuffer[fTransformsLocation], fTransformsType,
|
| fStencilSettings);
|
| }
|
|
|
| -void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) {
|
| -}
|
| +void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) {}
|
|
|
| void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState*) {
|
| if (GrColor_ILLEGAL == fColor) {
|
| @@ -727,15 +730,16 @@ bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds,
|
| GrGpu::DrawType drawType,
|
| const GrClipMaskManager::ScissorState& scissor,
|
| const GrDeviceCoordTexture* dstCopy) {
|
| - SkAutoTUnref<GrOptDrawState> optState(
|
| - SkNEW_ARGS(GrOptDrawState, (ds, fDstGpu, scissor, dstCopy, drawType)));
|
| - if (optState->mustSkip()) {
|
| + SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState,
|
| + (ds, fDstGpu, scissor, dstCopy, drawType));
|
| + if (ss->fState.mustSkip()) {
|
| + fCmdBuffer.pop_back();
|
| return false;
|
| }
|
| - if (!fLastState || *optState != *fLastState) {
|
| - SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, (optState));
|
| - fLastState.reset(SkRef(optState.get()));
|
| - ss->fDrawType = drawType;
|
| + if (fPrevState && *fPrevState == ss->fState) {
|
| + fCmdBuffer.pop_back();
|
| + } else {
|
| + fPrevState = &ss->fState;
|
| this->recordTraceMarkersIfNecessary();
|
| }
|
| return true;
|
|
|