Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(266)

Unified Diff: src/gpu/GrTargetCommands.cpp

Issue 1092403002: Stop closing batch prematurely (Closed) Base URL: https://skia.googlesource.com/skia.git@atdfopt3
Patch Set: fix nvpr Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrTargetCommands.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « src/gpu/GrTargetCommands.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698