Index: src/gpu/GrTargetCommands.cpp |
diff --git a/src/gpu/GrTargetCommands.cpp b/src/gpu/GrTargetCommands.cpp |
index 9b968dc9e73650c0501fd9786a1e0901bcef2e18..d3c924d36847b2ca76b242bdc39b667ba35c4919 100644 |
--- a/src/gpu/GrTargetCommands.cpp |
+++ b/src/gpu/GrTargetCommands.cpp |
@@ -82,8 +82,11 @@ GrTargetCommands::Cmd* GrTargetCommands::recordDraw( |
const GrGeometryProcessor* gp, |
const GrDrawTarget::DrawInfo& info, |
const GrDrawTarget::PipelineInfo& pipelineInfo) { |
+#ifdef USE_BITMAP_TEXTBLOBS |
+ SkFAIL("Non-batch no longer supported\n"); |
+#endif |
SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer())); |
- this->closeBatch(); |
+ CLOSE_BATCH |
if (!this->setupPipelineAndShouldDraw(iodb, gp, pipelineInfo)) { |
return NULL; |
@@ -121,7 +124,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordDrawBatch( |
SkASSERT(&fCmdBuffer.back() == fDrawBatch); |
if (!fDrawBatch->fBatch->combineIfPossible(batch)) { |
- this->closeBatch(); |
+ CLOSE_BATCH |
fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fBatchTarget)); |
} |
@@ -135,7 +138,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordStencilPath( |
const GrPath* path, |
const GrScissorState& scissorState, |
const GrStencilSettings& stencilSettings) { |
- this->closeBatch(); |
+ CLOSE_BATCH |
StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath, |
(path, pipelineBuilder.getRenderTarget())); |
@@ -153,7 +156,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordDrawPath( |
const GrPath* path, |
const GrStencilSettings& stencilSettings, |
const GrDrawTarget::PipelineInfo& pipelineInfo) { |
- this->closeBatch(); |
+ CLOSE_BATCH |
// TODO: Only compare the subset of GrPipelineBuilder relevant to path covering? |
if (!this->setupPipelineAndShouldDraw(iodb, pathProc, pipelineInfo)) { |
@@ -178,7 +181,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordDrawPaths( |
SkASSERT(pathRange); |
SkASSERT(indexValues); |
SkASSERT(transformValues); |
- this->closeBatch(); |
+ CLOSE_BATCH |
if (!this->setupPipelineAndShouldDraw(iodb, pathProc, pipelineInfo)) { |
return NULL; |
@@ -234,7 +237,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordClear(GrInOrderDrawBuffer* iodb, |
bool canIgnoreRect, |
GrRenderTarget* renderTarget) { |
SkASSERT(renderTarget); |
- this->closeBatch(); |
+ CLOSE_BATCH |
SkIRect r; |
if (NULL == rect) { |
@@ -257,7 +260,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordClearStencilClip(GrInOrderDrawBuf |
bool insideClip, |
GrRenderTarget* renderTarget) { |
SkASSERT(renderTarget); |
- this->closeBatch(); |
+ CLOSE_BATCH |
ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, ClearStencilClip, (renderTarget)); |
clr->fRect = rect; |
@@ -268,7 +271,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordClearStencilClip(GrInOrderDrawBuf |
GrTargetCommands::Cmd* GrTargetCommands::recordDiscard(GrInOrderDrawBuffer* iodb, |
GrRenderTarget* renderTarget) { |
SkASSERT(renderTarget); |
- this->closeBatch(); |
+ CLOSE_BATCH |
Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget)); |
clr->fColor = GrColor_ILLEGAL; |
@@ -287,19 +290,38 @@ void GrTargetCommands::flush(GrInOrderDrawBuffer* iodb) { |
} |
// TODO this is temporary while batch is being rolled out |
- this->closeBatch(); |
- iodb->getVertexAllocPool()->unmap(); |
- iodb->getIndexAllocPool()->unmap(); |
- fBatchTarget.preFlush(); |
+ CLOSE_BATCH |
// Updated every time we find a set state cmd to reflect the current state in the playback |
// stream. |
SetState* currentState = NULL; |
- CmdBuffer::Iter iter(fCmdBuffer); |
- |
GrGpu* gpu = iodb->getGpu(); |
+#ifdef USE_BITMAP_TEXTBLOBS |
+ // Loop over all batches and generate geometry |
+ CmdBuffer::Iter genIter(fCmdBuffer); |
+ while (genIter.next()) { |
+ if (Cmd::kDrawBatch_CmdType == genIter->type()) { |
+ DrawBatch* db = reinterpret_cast<DrawBatch*>(genIter.get()); |
+ fBatchTarget.resetNumberOfDraws(); |
+ db->execute(NULL, currentState); |
+ db->fBatch->setNumberOfDraws(fBatchTarget.numberOfDraws()); |
+ } else if (Cmd::kSetState_CmdType == genIter->type()) { |
+ SetState* ss = reinterpret_cast<SetState*>(genIter.get()); |
+ |
+ ss->execute(gpu, currentState); |
+ currentState = ss; |
+ } |
+ } |
+#endif |
+ |
+ iodb->getVertexAllocPool()->unmap(); |
+ iodb->getIndexAllocPool()->unmap(); |
+ fBatchTarget.preFlush(); |
+ |
+ CmdBuffer::Iter iter(fCmdBuffer); |
+ |
while (iter.next()) { |
GrGpuTraceMarker newMarker("", -1); |
SkString traceString; |
@@ -321,10 +343,21 @@ void GrTargetCommands::flush(GrInOrderDrawBuffer* iodb) { |
} |
if (Cmd::kSetState_CmdType == iter->type()) { |
+#ifndef USE_BITMAP_TEXTBLOBS |
SetState* ss = reinterpret_cast<SetState*>(iter.get()); |
ss->execute(gpu, currentState); |
currentState = ss; |
+#else |
+ // TODO this is just until NVPR is in batch |
+ SetState* ss = reinterpret_cast<SetState*>(iter.get()); |
+ |
+ if (ss->fPrimitiveProcessor) { |
+ ss->execute(gpu, currentState); |
+ } |
+ currentState = ss; |
+#endif |
+ |
} else { |
iter->execute(gpu, currentState); |
} |
@@ -408,7 +441,7 @@ GrTargetCommands::Cmd* GrTargetCommands::recordCopySurface(GrInOrderDrawBuffer* |
const SkIRect& srcRect, |
const SkIPoint& dstPoint) { |
if (iodb->getGpu()->canCopySurface(dst, src, srcRect, dstPoint)) { |
- this->closeBatch(); |
+ CLOSE_BATCH |
CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst, src)); |
cs->fSrcRect = srcRect; |
cs->fDstPoint = dstPoint; |
@@ -461,7 +494,7 @@ bool GrTargetCommands::setupPipelineAndShouldDraw(GrInOrderDrawBuffer* iodb, |
fPrevState->getPipeline()->isEqual(*ss->getPipeline())) { |
fCmdBuffer.pop_back(); |
} else { |
- this->closeBatch(); |
+ CLOSE_BATCH |
fPrevState = ss; |
iodb->recordTraceMarkersIfNecessary(ss); |
} |