| Index: src/gpu/GrDrawTarget.cpp
|
| diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
|
| index 3f472d094801da10044291aa80fa709eaf61a6e0..0e7e6bce90225646e42e3625db8b79a32fda7b7b 100644
|
| --- a/src/gpu/GrDrawTarget.cpp
|
| +++ b/src/gpu/GrDrawTarget.cpp
|
| @@ -224,8 +224,23 @@ void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder,
|
| SkASSERT(path);
|
| SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport());
|
|
|
| - GrDrawPathBatch* batch = GrDrawPathBatch::Create(pathProc, path);
|
| + GrDrawPathBatchBase* batch = GrDrawPathBatch::Create(pathProc, path);
|
| + this->drawPathBatch(pipelineBuilder, batch, fill);
|
| + batch->unref();
|
| +}
|
| +
|
| +void GrDrawTarget::drawPathsFromRange(const GrPipelineBuilder& pipelineBuilder,
|
| + const GrPathProcessor* pathProc,
|
| + GrPathRangeDraw* draw,
|
| + GrPathRendering::FillType fill) {
|
| + GrDrawPathBatchBase* batch = GrDrawPathRangeBatch::Create(pathProc, draw);
|
| + this->drawPathBatch(pipelineBuilder, batch, fill);
|
| + batch->unref();
|
| +}
|
|
|
| +void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder,
|
| + GrDrawPathBatchBase* batch,
|
| + GrPathRendering::FillType fill) {
|
| // This looks like drawBatch() but there is an added wrinkle that stencil settings get inserted
|
| // after setupClip() but before onDrawBatch(). TODO: Figure out a better model for handling
|
| // stencil settings WRT interactions between pipeline(builder), clipmaskmanager, and batches.
|
| @@ -244,11 +259,8 @@ void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder,
|
| this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
|
| batch->setStencilSettings(stencilSettings);
|
|
|
| - // 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.
|
| - GrDrawTarget::PipelineInfo pipelineInfo(&pipelineBuilder, &scissorState, batch, nullptr, this);
|
| + GrDrawTarget::PipelineInfo pipelineInfo(&pipelineBuilder, &scissorState, batch,
|
| + &batch->bounds(), this);
|
|
|
| if (!pipelineInfo.valid()) {
|
| return;
|
| @@ -258,50 +270,6 @@ void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder,
|
| }
|
|
|
| this->onDrawBatch(batch);
|
| - batch->unref();
|
| -}
|
| -
|
| -void GrDrawTarget::drawPaths(const GrPipelineBuilder& pipelineBuilder,
|
| - const GrPathProcessor* pathProc,
|
| - const GrPathRange* pathRange,
|
| - const void* indices,
|
| - PathIndexType indexType,
|
| - const float transformValues[],
|
| - PathTransformType transformType,
|
| - int count,
|
| - GrPathRendering::FillType fill) {
|
| - SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport());
|
| - SkASSERT(pathRange);
|
| - SkASSERT(indices);
|
| - SkASSERT(0 == reinterpret_cast<intptr_t>(indices) %
|
| - GrPathRange::PathIndexSizeInBytes(indexType));
|
| - SkASSERT(transformValues);
|
| -
|
| - // Setup clip
|
| - GrScissorState scissorState;
|
| - GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
|
| - GrPipelineBuilder::AutoRestoreStencil ars;
|
| - if (!this->setupClip(pipelineBuilder, &arfps, &ars, &scissorState, nullptr)) {
|
| - return;
|
| - }
|
| -
|
| - // set stencil settings for path
|
| - GrStencilSettings stencilSettings;
|
| - GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
|
| - GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment();
|
| - this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
|
| -
|
| - // 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.
|
| - GrDrawTarget::PipelineInfo pipelineInfo(&pipelineBuilder, &scissorState, pathProc, nullptr, this);
|
| - if (!pipelineInfo.valid()) {
|
| - return;
|
| - }
|
| -
|
| - this->onDrawPaths(pathProc, pathRange, indices, indexType, transformValues,
|
| - transformType, count, stencilSettings, pipelineInfo);
|
| }
|
|
|
| void GrDrawTarget::drawNonAARect(const GrPipelineBuilder& pipelineBuilder,
|
| @@ -406,22 +374,6 @@ void GrDrawTarget::copySurface(GrSurface* dst,
|
|
|
| GrDrawTarget::PipelineInfo::PipelineInfo(const GrPipelineBuilder* pipelineBuilder,
|
| const GrScissorState* scissor,
|
| - const GrPrimitiveProcessor* primProc,
|
| - const SkRect* devBounds,
|
| - GrDrawTarget* target) {
|
| - fArgs.fPipelineBuilder = pipelineBuilder;
|
| - fArgs.fCaps = target->caps();
|
| - fArgs.fScissor = scissor;
|
| - fArgs.fColorPOI = fArgs.fPipelineBuilder->colorProcInfo(primProc);
|
| - fArgs.fCoveragePOI = fArgs.fPipelineBuilder->coverageProcInfo(primProc);
|
| - if (!target->setupDstReadIfNecessary(*fArgs.fPipelineBuilder, fArgs.fColorPOI,
|
| - fArgs.fCoveragePOI, &fArgs.fDstTexture, devBounds)) {
|
| - fArgs.fPipelineBuilder = nullptr;
|
| - }
|
| -}
|
| -
|
| -GrDrawTarget::PipelineInfo::PipelineInfo(const GrPipelineBuilder* pipelineBuilder,
|
| - const GrScissorState* scissor,
|
| const GrDrawBatch* batch,
|
| const SkRect* devBounds,
|
| GrDrawTarget* target) {
|
|
|