Index: src/gpu/GrInOrderDrawBuffer.cpp |
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp |
index 3e177ed20700e893d491dbab061ad8b43bd0684c..e59df80e96c1cf7768803f40393a18e44cfdd289 100644 |
--- a/src/gpu/GrInOrderDrawBuffer.cpp |
+++ b/src/gpu/GrInOrderDrawBuffer.cpp |
@@ -247,13 +247,14 @@ |
void GrInOrderDrawBuffer::onDraw(const GrPipelineBuilder& pipelineBuilder, |
const GrGeometryProcessor* gp, |
const DrawInfo& info, |
- const GrScissorState& scissorState) { |
+ const GrScissorState& scissorState, |
+ const GrDeviceCoordTexture* dstCopy) { |
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())) { |
+ if (!this->recordStateAndShouldDraw(pipelineBuilder, gp, scissorState, dstCopy)) { |
return; |
} |
@@ -275,8 +276,8 @@ |
void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch, |
const GrPipelineBuilder& pipelineBuilder, |
const GrScissorState& scissorState, |
- const SkRect* devBounds) { |
- if (!this->recordStateAndShouldDraw(batch, pipelineBuilder, scissorState, devBounds)) { |
+ const GrDeviceCoordTexture* dstCopy) { |
+ if (!this->recordStateAndShouldDraw(batch, pipelineBuilder, scissorState, dstCopy)) { |
return; |
} |
@@ -315,11 +316,11 @@ |
const GrPath* path, |
const GrScissorState& scissorState, |
const GrStencilSettings& stencilSettings, |
- const SkRect* devBounds) { |
+ const GrDeviceCoordTexture* dstCopy) { |
this->closeBatch(); |
// TODO: Only compare the subset of GrPipelineBuilder relevant to path covering? |
- if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, devBounds)) { |
+ if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, dstCopy)) { |
return; |
} |
DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path)); |
@@ -337,14 +338,14 @@ |
int count, |
const GrScissorState& scissorState, |
const GrStencilSettings& stencilSettings, |
- const SkRect* devBounds) { |
+ const GrDeviceCoordTexture* dstCopy) { |
SkASSERT(pathRange); |
SkASSERT(indices); |
SkASSERT(transformValues); |
this->closeBatch(); |
- if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, devBounds)) { |
+ if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, dstCopy)) { |
return; |
} |
@@ -488,6 +489,7 @@ |
if (ss->fPrimitiveProcessor) { |
this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, |
ss->fPipeline, |
+ ss->fPipeline.descInfo(), |
ss->fBatchTracker); |
} |
currentState = ss; |
@@ -582,14 +584,10 @@ |
bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrPipelineBuilder& pipelineBuilder, |
const GrPrimitiveProcessor* primProc, |
const GrScissorState& scissor, |
- const SkRect* devBounds) { |
- GrDeviceCoordTexture dstCopy; |
- if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { |
- return false; |
- } |
+ const GrDeviceCoordTexture* dstCopy) { |
SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, |
(pipelineBuilder, primProc, *this->getGpu()->caps(), |
- scissor, &dstCopy)); |
+ scissor, dstCopy)); |
if (ss->fPipeline.mustSkip()) { |
fCmdBuffer.pop_back(); |
return false; |
@@ -614,17 +612,13 @@ |
bool GrInOrderDrawBuffer::recordStateAndShouldDraw(GrBatch* batch, |
const GrPipelineBuilder& pipelineBuilder, |
const GrScissorState& scissor, |
- const SkRect* devBounds) { |
- GrDeviceCoordTexture dstCopy; |
- if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { |
- return false; |
- } |
+ const GrDeviceCoordTexture* dstCopy) { |
// TODO this gets much simpler when we have batches everywhere. |
// If the previous command is also a set state, then we check to see if it has a Batch. If so, |
// and we can make the two batches equal, and we can combine the states, then we make them equal |
SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, |
(batch, pipelineBuilder, *this->getGpu()->caps(), scissor, |
- &dstCopy)); |
+ dstCopy)); |
if (ss->fPipeline.mustSkip()) { |
fCmdBuffer.pop_back(); |
return false; |