diff options
author | joshualitt <joshualitt@chromium.org> | 2015-02-06 15:53:59 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-06 15:53:59 -0800 |
commit | 70f00046a4f207fd49e4fdf85614d93b224f6f7f (patch) | |
tree | 350811e7420bce068d7ab791d5a8fbfb732473ea /src/gpu | |
parent | 38f1c00772539dcbeccbfa3c45d94bdc4acf3518 (diff) |
simple fix to close batches on anything push to the GrIODB recorder
BUG=skia:
Review URL: https://codereview.chromium.org/865153005
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrInOrderDrawBuffer.cpp | 20 | ||||
-rw-r--r-- | src/gpu/GrInOrderDrawBuffer.h | 11 |
2 files changed, 18 insertions, 13 deletions
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp index 3e177ed207..cae1bd5c9e 100644 --- a/src/gpu/GrInOrderDrawBuffer.cpp +++ b/src/gpu/GrInOrderDrawBuffer.cpp @@ -249,8 +249,6 @@ void GrInOrderDrawBuffer::onDraw(const GrPipelineBuilder& pipelineBuilder, const DrawInfo& info, const GrScissorState& scissorState) { SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer())); - - // This closeBatch call is required because we may introduce new draws when we setup clip this->closeBatch(); if (!this->recordStateAndShouldDraw(pipelineBuilder, gp, scissorState, info.getDevBounds())) { @@ -301,6 +299,8 @@ void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder const GrPath* path, const GrScissorState& scissorState, const GrStencilSettings& stencilSettings) { + this->closeBatch(); + StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath, (path, pipelineBuilder.getRenderTarget())); sp->fScissor = scissorState; @@ -341,7 +341,6 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrPipelineBuilder& pipelineBuilder, SkASSERT(pathRange); SkASSERT(indices); SkASSERT(transformValues); - this->closeBatch(); if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, devBounds)) { @@ -395,6 +394,8 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrPipelineBuilder& pipelineBuilder, void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect, GrRenderTarget* renderTarget) { SkASSERT(renderTarget); + this->closeBatch(); + SkIRect r; if (NULL == rect) { // We could do something smart and remove previous draws and clears to @@ -415,6 +416,8 @@ void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTarget* renderTarget) { SkASSERT(renderTarget); + this->closeBatch(); + ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, ClearStencilClip, (renderTarget)); clr->fRect = rect; clr->fInsideClip = insideClip; @@ -423,6 +426,8 @@ void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect, void GrInOrderDrawBuffer::discard(GrRenderTarget* renderTarget) { SkASSERT(renderTarget); + this->closeBatch(); + if (!this->caps()->discardRenderTargetSupport()) { return; } @@ -653,15 +658,6 @@ void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { } } -void GrInOrderDrawBuffer::closeBatch() { - if (fDrawBatch) { - fBatchTarget.resetNumberOfDraws(); - fDrawBatch->execute(this, fPrevState); - fDrawBatch->fBatch->setNumberOfDraws(fBatchTarget.numberOfDraws()); - fDrawBatch = NULL; - } -} - void GrInOrderDrawBuffer::willReserveVertexAndIndexSpace(int vertexCount, size_t vertexStride, int indexCount) { diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h index 3d1bd7c43e..f271207abc 100644 --- a/src/gpu/GrInOrderDrawBuffer.h +++ b/src/gpu/GrInOrderDrawBuffer.h @@ -319,7 +319,16 @@ private: // TODO hack until batch is everywhere DrawBatch* fDrawBatch; - void closeBatch(); + // This will go away when everything uses batch. However, in the short term anything which + // might be put into the GrInOrderDrawBuffer needs to make sure it closes the last batch + void closeBatch() { + if (fDrawBatch) { + fBatchTarget.resetNumberOfDraws(); + fDrawBatch->execute(this, fPrevState); + fDrawBatch->fBatch->setNumberOfDraws(fBatchTarget.numberOfDraws()); + fDrawBatch = NULL; + } + } typedef GrFlushToGpuDrawTarget INHERITED; }; |