diff options
Diffstat (limited to 'src/gpu/GrDrawTarget.cpp')
-rw-r--r-- | src/gpu/GrDrawTarget.cpp | 54 |
1 files changed, 10 insertions, 44 deletions
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp index 29e33b3048..cb60f11c09 100644 --- a/src/gpu/GrDrawTarget.cpp +++ b/src/gpu/GrDrawTarget.cpp @@ -384,15 +384,15 @@ bool GrDrawTarget::checkDraw(const GrPipelineBuilder& pipelineBuilder, return true; } -bool GrDrawTarget::setupDstReadIfNecessary(GrPipelineBuilder* pipelineBuilder, +bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuilder, GrDeviceCoordTexture* dstCopy, const SkRect* drawBounds) { - if (this->caps()->dstReadInShaderSupport() || !pipelineBuilder->willEffectReadDstColor()) { + if (!pipelineBuilder.willXPNeedDstCopy(*this->caps())) { return true; } SkIRect copyRect; const GrClipData* clip = this->getClip(); - GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); + GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); clip->getConservativeBounds(rt, ©Rect); if (drawBounds) { @@ -470,14 +470,9 @@ void GrDrawTarget::drawIndexed(GrPipelineBuilder* pipelineBuilder, info.setDevBounds(*devBounds); } - // TODO: We should continue with incorrect blending. - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { - return; - } this->setDrawBuffers(&info, gp->getVertexStride()); - this->onDraw(*pipelineBuilder, gp, info, scissorState, dstCopy.texture() ? &dstCopy : NULL); + this->onDraw(*pipelineBuilder, gp, info, scissorState); } } @@ -514,15 +509,9 @@ void GrDrawTarget::drawNonIndexed(GrPipelineBuilder* pipelineBuilder, info.setDevBounds(*devBounds); } - // TODO: We should continue with incorrect blending. - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { - return; - } - this->setDrawBuffers(&info, gp->getVertexStride()); - this->onDraw(*pipelineBuilder, gp, info, scissorState, dstCopy.texture() ? &dstCopy : NULL); + this->onDraw(*pipelineBuilder, gp, info, scissorState); } } @@ -541,12 +530,7 @@ void GrDrawTarget::drawBatch(GrPipelineBuilder* pipelineBuilder, return; } - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { - return; - } - - this->onDrawBatch(batch, *pipelineBuilder, scissorState, dstCopy.texture() ? &dstCopy : NULL); + this->onDrawBatch(batch, *pipelineBuilder, scissorState, devBounds); } static const GrStencilSettings& winding_path_stencil_settings() { @@ -636,13 +620,8 @@ void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, pipelineBuilder->getRenderTarget()->getStencilBuffer(), &stencilSettings); - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, &devBounds)) { - return; - } - this->onDrawPath(*pipelineBuilder, pathProc, path, scissorState, stencilSettings, - dstCopy.texture() ? &dstCopy : NULL); + &devBounds); } void GrDrawTarget::drawPaths(GrPipelineBuilder* pipelineBuilder, @@ -676,18 +655,12 @@ void GrDrawTarget::drawPaths(GrPipelineBuilder* pipelineBuilder, pipelineBuilder->getRenderTarget()->getStencilBuffer(), &stencilSettings); - // Don't compute a bounding box for setupDstReadIfNecessary(), we'll opt + // Don't compute a bounding box for dst copy texture, we'll opt // instead for it to just copy the entire dst. Realistically this is a moot // point, because any context that supports NV_path_rendering will also // support NV_blend_equation_advanced. - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, NULL)) { - return; - } - this->onDrawPaths(*pipelineBuilder, pathProc, pathRange, indices, indexType, transformValues, - transformType, count, scissorState, stencilSettings, - dstCopy.texture() ? &dstCopy : NULL); + transformType, count, scissorState, stencilSettings, NULL); } void GrDrawTarget::clear(const SkIRect* rect, @@ -793,12 +766,6 @@ void GrDrawTarget::drawIndexedInstances(GrPipelineBuilder* pipelineBuilder, info.setDevBounds(*devBounds); } - // TODO: We should continue with incorrect blending. - GrDeviceCoordTexture dstCopy; - if (!this->setupDstReadIfNecessary(pipelineBuilder, &dstCopy, devBounds)) { - return; - } - while (instanceCount) { info.fInstanceCount = SkTMin(instanceCount, maxInstancesPerDraw); info.fVertexCount = info.fInstanceCount * verticesPerInstance; @@ -812,8 +779,7 @@ void GrDrawTarget::drawIndexedInstances(GrPipelineBuilder* pipelineBuilder, info.fVertexCount, info.fIndexCount)) { this->setDrawBuffers(&info, gp->getVertexStride()); - this->onDraw(*pipelineBuilder, gp, info, scissorState, - dstCopy.texture() ? &dstCopy : NULL); + this->onDraw(*pipelineBuilder, gp, info, scissorState); } info.fStartVertex += info.fVertexCount; instanceCount -= info.fInstanceCount; |