aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2015-02-06 15:53:59 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-02-06 15:53:59 -0800
commit70f00046a4f207fd49e4fdf85614d93b224f6f7f (patch)
tree350811e7420bce068d7ab791d5a8fbfb732473ea /src
parent38f1c00772539dcbeccbfa3c45d94bdc4acf3518 (diff)
simple fix to close batches on anything push to the GrIODB recorder
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrInOrderDrawBuffer.cpp20
-rw-r--r--src/gpu/GrInOrderDrawBuffer.h11
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;
};