| Index: src/gpu/batches/GrMSAAPathRenderer.cpp
|
| diff --git a/src/gpu/batches/GrMSAAPathRenderer.cpp b/src/gpu/batches/GrMSAAPathRenderer.cpp
|
| index d38d88600a4874dbe704a9f7f2a02f60778eb0fd..39b924c1b670ca136644d3eca25862083101de2f 100644
|
| --- a/src/gpu/batches/GrMSAAPathRenderer.cpp
|
| +++ b/src/gpu/batches/GrMSAAPathRenderer.cpp
|
| @@ -567,9 +567,10 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| SkPath path;
|
| shape.asPath(&path);
|
|
|
| + static const int kMaxNumPasses = 2;
|
| +
|
| int passCount = 0;
|
| - const GrUserStencilSettings* passes[3];
|
| - GrPipelineBuilder::DrawFace drawFace[3];
|
| + const GrUserStencilSettings* passes[kMaxNumPasses];
|
| bool reverse = false;
|
| bool lastPassIsBounds;
|
|
|
| @@ -578,9 +579,8 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| if (stencilOnly) {
|
| passes[0] = &gDirectToStencil;
|
| } else {
|
| - passes[0] = nullptr;
|
| + passes[0] = userStencilSettings;
|
| }
|
| - drawFace[0] = GrPipelineBuilder::kBoth_DrawFace;
|
| lastPassIsBounds = false;
|
| } else {
|
| switch (path.getFillType()) {
|
| @@ -601,7 +601,6 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| passes[1] = &gEOColorPass;
|
| }
|
| }
|
| - drawFace[0] = drawFace[1] = GrPipelineBuilder::kBoth_DrawFace;
|
| break;
|
|
|
| case SkPath::kInverseWinding_FillType:
|
| @@ -610,17 +609,15 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| case SkPath::kWinding_FillType:
|
| passes[0] = &gWindStencilSeparateWithWrap;
|
| passCount = 2;
|
| - drawFace[0] = GrPipelineBuilder::kBoth_DrawFace;
|
| if (stencilOnly) {
|
| lastPassIsBounds = false;
|
| - --passCount;
|
| + passCount = 1;
|
| } else {
|
| lastPassIsBounds = true;
|
| - drawFace[passCount-1] = GrPipelineBuilder::kBoth_DrawFace;
|
| if (reverse) {
|
| - passes[passCount-1] = &gInvWindColorPass;
|
| + passes[1] = &gInvWindColorPass;
|
| } else {
|
| - passes[passCount-1] = &gWindColorPass;
|
| + passes[1] = &gWindColorPass;
|
| }
|
| }
|
| break;
|
| @@ -633,6 +630,8 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| SkRect devBounds;
|
| GetPathDevBounds(path, drawContext->width(), drawContext->height(), viewMatrix, &devBounds);
|
|
|
| + SkASSERT(passCount <= kMaxNumPasses);
|
| +
|
| for (int p = 0; p < passCount; ++p) {
|
| if (lastPassIsBounds && (p == passCount-1)) {
|
| SkRect bounds;
|
| @@ -658,14 +657,8 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewM, bounds, nullptr,
|
| &localMatrix));
|
|
|
| - SkASSERT(GrPipelineBuilder::kBoth_DrawFace == drawFace[p]);
|
| GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(paint));
|
| - pipelineBuilder.setDrawFace(drawFace[p]);
|
| - if (passes[p]) {
|
| - pipelineBuilder.setUserStencil(passes[p]);
|
| - } else {
|
| - pipelineBuilder.setUserStencil(userStencilSettings);
|
| - }
|
| + pipelineBuilder.setUserStencil(passes[p]);
|
|
|
| drawContext->drawBatch(pipelineBuilder, clip, batch);
|
| } else {
|
| @@ -676,12 +669,7 @@ bool GrMSAAPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| }
|
|
|
| GrPipelineBuilder pipelineBuilder(paint, drawContext->mustUseHWAA(paint));
|
| - pipelineBuilder.setDrawFace(drawFace[p]);
|
| - if (passes[p]) {
|
| - pipelineBuilder.setUserStencil(passes[p]);
|
| - } else {
|
| - pipelineBuilder.setUserStencil(userStencilSettings);
|
| - }
|
| + pipelineBuilder.setUserStencil(passes[p]);
|
| if (passCount > 1) {
|
| pipelineBuilder.setDisableColorXPFactory();
|
| }
|
|
|