Index: src/gpu/GrInOrderDrawBuffer.cpp |
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp |
index 55331748531a67749c1a1c4ef2f4534d9fffa939..1e7d4e569c27e937fe73367f3672bbd76194fadc 100644 |
--- a/src/gpu/GrInOrderDrawBuffer.cpp |
+++ b/src/gpu/GrInOrderDrawBuffer.cpp |
@@ -409,8 +409,9 @@ void GrInOrderDrawBuffer::onFlush() { |
if (kSetState_Cmd == strip_trace_bit(iter->fType)) { |
SetState* ss = reinterpret_cast<SetState*>(iter.get()); |
currentOptState = &ss->fState; |
+ this->getGpu()->buildProgramDesc(*currentOptState, ss->fDrawType, &fDesc); |
} else { |
- iter->execute(this, currentOptState); |
+ iter->execute(this, currentOptState, &fDesc); |
} |
if (cmd_has_trace_marker(iter->fType)) { |
@@ -422,35 +423,44 @@ void GrInOrderDrawBuffer::onFlush() { |
++fDrawID; |
} |
-void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState* optState) { |
- SkASSERT(optState); |
- buf->getGpu()->draw(*optState, fInfo); |
+void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, |
+ const GrOptDrawState* optState, |
+ const GrProgramDesc* desc) { |
+ SkASSERT(optState && desc); |
+ buf->getGpu()->draw(*optState, *desc, fInfo); |
} |
void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, |
- const GrOptDrawState* optState) { |
- SkASSERT(optState); |
- buf->getGpu()->stencilPath(*optState, this->path(), fStencilSettings); |
+ const GrOptDrawState* optState, |
+ const GrProgramDesc* desc) { |
+ SkASSERT(optState && desc); |
+ buf->getGpu()->stencilPath(*optState, *desc, this->path(), fStencilSettings); |
} |
void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, |
- const GrOptDrawState* optState) { |
- SkASSERT(optState); |
- buf->getGpu()->drawPath(*optState, this->path(), fStencilSettings); |
+ const GrOptDrawState* optState, |
+ const GrProgramDesc* desc) { |
+ SkASSERT(optState && desc); |
+ buf->getGpu()->drawPath(*optState, *desc, this->path(), fStencilSettings); |
} |
void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, |
- const GrOptDrawState* optState) { |
- SkASSERT(optState); |
- buf->getGpu()->drawPaths(*optState, this->pathRange(), |
+ const GrOptDrawState* optState, |
+ const GrProgramDesc* desc) { |
+ SkASSERT(optState && desc); |
+ buf->getGpu()->drawPaths(*optState, *desc, this->pathRange(), |
&buf->fPathIndexBuffer[fIndicesLocation], fIndexType, |
&buf->fPathTransformBuffer[fTransformsLocation], fTransformType, |
fCount, fStencilSettings); |
} |
-void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) {} |
+void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, |
+ const GrOptDrawState*, |
+ const GrProgramDesc*) {} |
-void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState*) { |
+void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, |
+ const GrOptDrawState*, |
+ const GrProgramDesc*) { |
if (GrColor_ILLEGAL == fColor) { |
buf->getGpu()->discard(this->renderTarget()); |
} else { |
@@ -459,11 +469,14 @@ void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDr |
} |
void GrInOrderDrawBuffer::ClearStencilClip::execute(GrInOrderDrawBuffer* buf, |
- const GrOptDrawState*) { |
+ const GrOptDrawState*, |
+ const GrProgramDesc*) { |
buf->getGpu()->clearStencilClip(fRect, fInsideClip, this->renderTarget()); |
} |
-void GrInOrderDrawBuffer::CopySurface::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState*) { |
+void GrInOrderDrawBuffer::CopySurface::execute(GrInOrderDrawBuffer* buf, |
+ const GrOptDrawState*, |
+ const GrProgramDesc*) { |
buf->getGpu()->copySurface(this->dst(), this->src(), fSrcRect, fDstPoint); |
} |
@@ -486,7 +499,8 @@ bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, |
const GrClipMaskManager::ScissorState& scissor, |
const GrDeviceCoordTexture* dstCopy) { |
SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, |
- (ds, this->getGpu(), scissor, dstCopy, drawType)); |
+ (ds, *this->getGpu()->caps(), scissor, dstCopy, |
+ drawType)); |
if (ss->fState.mustSkip()) { |
fCmdBuffer.pop_back(); |
return false; |