| Index: src/gpu/GrDrawContext.cpp
|
| diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp
|
| index 2832095618b97b631ac291dd1cc242617c005c5e..430ae886f39c603eceb0645d57c73f844c23dcdf 100644
|
| --- a/src/gpu/GrDrawContext.cpp
|
| +++ b/src/gpu/GrDrawContext.cpp
|
| @@ -242,7 +242,11 @@
|
|
|
| AutoCheckFlush acf(fDrawingManager);
|
|
|
| - this->drawNonAAFilledRect(clip, *paint, SkMatrix::I(), r, nullptr, &localMatrix, nullptr);
|
| + SkAutoTUnref<GrDrawBatch> batch(
|
| + GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix::I(), r, nullptr,
|
| + &localMatrix));
|
| + GrPipelineBuilder pipelineBuilder(*paint); // Create a pipeline builder without hwaa.
|
| + this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| }
|
| }
|
|
|
| @@ -270,52 +274,33 @@
|
| }
|
| }
|
|
|
| -bool GrDrawContext::drawFilledRect(const GrClip& clip,
|
| - const GrPaint& paint,
|
| - const SkMatrix& viewMatrix,
|
| - const SkRect& rect,
|
| - const GrUserStencilSettings* ss) {
|
| -
|
| - SkAutoTUnref<GrDrawBatch> batch;
|
| - bool useHWAA;
|
| -
|
| +GrDrawBatch* GrDrawContext::getFillRectBatch(const GrPaint& paint,
|
| + const SkMatrix& viewMatrix,
|
| + const SkRect& rect,
|
| + bool* useHWAA) {
|
| if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) {
|
| - batch.reset(ir->recordRect(rect, viewMatrix, paint.getColor(),
|
| - paint.isAntiAlias(), fInstancedPipelineInfo,
|
| - &useHWAA));
|
| - if (batch) {
|
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| - if (ss) {
|
| - pipelineBuilder.setUserStencil(ss);
|
| - }
|
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) {
|
| + if (GrDrawBatch* batch = ir->recordRect(rect, viewMatrix, paint.getColor(),
|
| + paint.isAntiAlias(), fInstancedPipelineInfo,
|
| + useHWAA)) {
|
| + return batch;
|
| + }
|
| + }
|
| +
|
| + if (should_apply_coverage_aa(paint, fRenderTarget.get(), useHWAA)) {
|
| // The fill path can handle rotation but not skew.
|
| if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
|
| SkRect devBoundRect;
|
| viewMatrix.mapRect(&devBoundRect, rect);
|
| -
|
| - batch.reset(GrRectBatchFactory::CreateAAFill(paint.getColor(), viewMatrix,
|
| - rect, devBoundRect));
|
| - if (batch) {
|
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| - if (ss) {
|
| - pipelineBuilder.setUserStencil(ss);
|
| - }
|
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| - return true;
|
| - }
|
| + return GrRectBatchFactory::CreateAAFill(paint.getColor(), viewMatrix,
|
| + rect, devBoundRect);
|
| }
|
| } else {
|
| - this->drawNonAAFilledRect(clip, paint, viewMatrix, rect, nullptr, nullptr, ss);
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| + // filled BW rect
|
| + return GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rect,
|
| + nullptr, nullptr);
|
| + }
|
| +
|
| + return nullptr;
|
| }
|
|
|
| void GrDrawContext::drawRect(const GrClip& clip,
|
| @@ -337,6 +322,9 @@
|
| AutoCheckFlush acf(fDrawingManager);
|
|
|
| const SkStrokeRec& stroke = style->strokeRec();
|
| + bool useHWAA;
|
| + bool snapToPixelCenters = false;
|
| + SkAutoTUnref<GrDrawBatch> batch;
|
| if (stroke.getStyle() == SkStrokeRec::kFill_Style) {
|
| // Check if this is a full RT draw and can be replaced with a clear. We don't bother
|
| // checking cases where the RT is fully inside a stroke.
|
| @@ -363,10 +351,7 @@
|
| }
|
| }
|
| }
|
| -
|
| - if (this->drawFilledRect(clip, paint, viewMatrix, rect, nullptr)) {
|
| - return;
|
| - }
|
| + batch.reset(this->getFillRectBatch(paint, viewMatrix, rect, &useHWAA));
|
| } else if (stroke.getStyle() == SkStrokeRec::kStroke_Style ||
|
| stroke.getStyle() == SkStrokeRec::kHairline_Style) {
|
| if ((!rect.width() || !rect.height()) &&
|
| @@ -400,11 +385,6 @@
|
| return;
|
| }
|
| }
|
| -
|
| - bool useHWAA;
|
| - bool snapToPixelCenters = false;
|
| - SkAutoTUnref<GrDrawBatch> batch;
|
| -
|
| GrColor color = paint.getColor();
|
| if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) {
|
| // The stroke path needs the rect to remain axis aligned (no rotation or skew).
|
| @@ -420,18 +400,18 @@
|
| batch.reset(GrRectBatchFactory::CreateNonAAStroke(color, viewMatrix, rect,
|
| stroke, snapToPixelCenters));
|
| }
|
| -
|
| - if (batch) {
|
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| -
|
| - if (snapToPixelCenters) {
|
| - pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_Flag,
|
| - snapToPixelCenters);
|
| - }
|
| -
|
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| - return;
|
| - }
|
| + }
|
| +
|
| + if (batch) {
|
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| +
|
| + if (snapToPixelCenters) {
|
| + pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_Flag,
|
| + snapToPixelCenters);
|
| + }
|
| +
|
| + this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| + return;
|
| }
|
|
|
| SkPath path;
|
| @@ -478,7 +458,13 @@
|
|
|
| SkASSERT(!useHWAA || fDrawContext->isStencilBufferMultisampled());
|
|
|
| - fDrawContext->drawFilledRect(clip, paint, viewMatrix, rect, ss);
|
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| + pipelineBuilder.setUserStencil(ss);
|
| +
|
| + SkAutoTUnref<GrDrawBatch> batch(
|
| + GrRectBatchFactory::CreateNonAAFill(SK_ColorWHITE, viewMatrix, rect, nullptr, nullptr));
|
| +
|
| + fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, fDrawContext, clip, batch);
|
| }
|
|
|
| bool GrDrawContextPriv::drawAndStencilRect(const GrFixedClip& clip,
|
| @@ -499,7 +485,14 @@
|
| paint.setAntiAlias(doAA);
|
| paint.setCoverageSetOpXPFactory(op, invert);
|
|
|
| - if (fDrawContext->drawFilledRect(clip, paint, viewMatrix, rect, ss)) {
|
| + bool useHWAA;
|
| + SkAutoTUnref<GrDrawBatch> batch(
|
| + fDrawContext->getFillRectBatch(paint, viewMatrix, rect, &useHWAA));
|
| + if (batch) {
|
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| + pipelineBuilder.setUserStencil(ss);
|
| +
|
| + fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, fDrawContext, clip, batch);
|
| return true;
|
| }
|
|
|
| @@ -537,16 +530,15 @@
|
| view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
|
| batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), viewMatrix, rectToDraw,
|
| localRect));
|
| - if (batch) {
|
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| - this->drawBatch(pipelineBuilder, clip, batch);
|
| - return;
|
| - }
|
| } else {
|
| - this->drawNonAAFilledRect(clip, paint, viewMatrix, rectToDraw, &localRect,
|
| - nullptr, nullptr);
|
| - }
|
| -
|
| + batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rectToDraw,
|
| + &localRect, nullptr));
|
| + }
|
| +
|
| + if (batch) {
|
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| + this->drawBatch(pipelineBuilder, clip, batch);
|
| + }
|
| }
|
|
|
| void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip,
|
| @@ -577,13 +569,13 @@
|
| view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
|
| batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, localMatrix,
|
| rectToDraw));
|
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| } else {
|
| - this->drawNonAAFilledRect(clip, paint, viewMatrix, rectToDraw, nullptr,
|
| - &localMatrix, nullptr);
|
| - }
|
| -
|
| + batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rectToDraw,
|
| + nullptr, &localMatrix));
|
| + }
|
| +
|
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA);
|
| + this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| }
|
|
|
| void GrDrawContext::drawVertices(const GrClip& clip,
|
| @@ -879,23 +871,6 @@
|
| this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| }
|
|
|
| -
|
| -void GrDrawContext::drawNonAAFilledRect(const GrClip& clip,
|
| - const GrPaint& paint,
|
| - const SkMatrix& viewMatrix,
|
| - const SkRect& rect,
|
| - const SkRect* localRect,
|
| - const SkMatrix* localMatrix,
|
| - const GrUserStencilSettings* ss) {
|
| - SkAutoTUnref<GrDrawBatch> batch(
|
| - GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMatrix, rect, localRect,
|
| - localMatrix));
|
| - GrPipelineBuilder pipelineBuilder(paint, this->mustUseHWAA(paint));
|
| - if (ss) {
|
| - pipelineBuilder.setUserStencil(ss);
|
| - }
|
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
|
| -}
|
|
|
| // Can 'path' be drawn as a pair of filled nested rectangles?
|
| static bool fills_as_nested_rects(const SkMatrix& viewMatrix, const SkPath& path, SkRect rects[2]) {
|
|
|