Chromium Code Reviews| Index: src/gpu/GrContext.cpp |
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp |
| index 96380bdfe66995a73532acbd8999a279507673d4..e45d048c882d86e0d715000986bc8323464dc1a9 100755 |
| --- a/src/gpu/GrContext.cpp |
| +++ b/src/gpu/GrContext.cpp |
| @@ -719,35 +719,17 @@ static void setStrokeRectStrip(SkPoint verts[10], SkRect rect, |
| verts[9] = verts[1]; |
| } |
| -static bool isIRect(const SkRect& r) { |
|
bsalomon
2014/08/11 15:08:19
This isn't worth it. The perf difference between A
|
| - return SkScalarIsInt(r.fLeft) && SkScalarIsInt(r.fTop) && |
| - SkScalarIsInt(r.fRight) && SkScalarIsInt(r.fBottom); |
| -} |
| - |
| static bool apply_aa_to_rect(GrDrawTarget* target, |
| const SkRect& rect, |
| SkScalar strokeWidth, |
| const SkMatrix& combinedMatrix, |
| - SkRect* devBoundRect, |
| - bool* useVertexCoverage) { |
| - // we use a simple coverage ramp to do aa on axis-aligned rects |
| - // we check if the rect will be axis-aligned, and the rect won't land on |
| - // integer coords. |
| - |
| - // we are keeping around the "tweak the alpha" trick because |
| - // it is our only hope for the fixed-pipe implementation. |
| - // In a shader implementation we can give a separate coverage input |
| - // TODO: remove this ugliness when we drop the fixed-pipe impl |
| - *useVertexCoverage = false; |
| - if (!target->getDrawState().canTweakAlphaForCoverage()) { |
| - if (target->shouldDisableCoverageAAForBlend()) { |
| + SkRect* devBoundRect) { |
| + if (!target->getDrawState().canTweakAlphaForCoverage() && |
| + target->shouldDisableCoverageAAForBlend()) { |
| #ifdef SK_DEBUG |
| - //GrPrintf("Turning off AA to correctly apply blend.\n"); |
| + //GrPrintf("Turning off AA to correctly apply blend.\n"); |
| #endif |
| - return false; |
| - } else { |
| - *useVertexCoverage = true; |
| - } |
| + return false; |
| } |
| const GrDrawState& drawState = target->getDrawState(); |
| if (drawState.getRenderTarget()->isMultisampled()) { |
| @@ -771,11 +753,7 @@ static bool apply_aa_to_rect(GrDrawTarget* target, |
| combinedMatrix.mapRect(devBoundRect, rect); |
| - if (strokeWidth < 0) { |
| - return !isIRect(*devBoundRect); |
| - } else { |
| - return true; |
| - } |
| + return true; |
| } |
| static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& point) { |
| @@ -840,11 +818,9 @@ void GrContext::drawRect(const GrPaint& paint, |
| } |
| SkRect devBoundRect; |
| - bool useVertexCoverage; |
| bool needAA = paint.isAntiAlias() && |
| !target->getDrawState().getRenderTarget()->isMultisampled(); |
| - bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, &devBoundRect, |
| - &useVertexCoverage); |
| + bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, &devBoundRect); |
| const SkStrokeRec& strokeRec = strokeInfo->getStrokeRec(); |
| @@ -856,12 +832,11 @@ void GrContext::drawRect(const GrPaint& paint, |
| if (width >= 0) { |
| fAARectRenderer->strokeAARect(this->getGpu(), target, rect, |
| matrix, devBoundRect, |
| - strokeRec, useVertexCoverage); |
| + strokeRec); |
| } else { |
| // filled AA rect |
| fAARectRenderer->fillAARect(this->getGpu(), target, |
| - rect, matrix, devBoundRect, |
| - useVertexCoverage); |
| + rect, matrix, devBoundRect); |
| } |
| return; |
| } |
| @@ -1117,8 +1092,7 @@ void GrContext::drawOval(const GrPaint& paint, |
| static bool is_nested_rects(GrDrawTarget* target, |
| const SkPath& path, |
| const SkStrokeRec& stroke, |
| - SkRect rects[2], |
| - bool* useVertexCoverage) { |
| + SkRect rects[2]) { |
| SkASSERT(stroke.isFillStyle()); |
| if (path.isInverseFillType()) { |
| @@ -1133,13 +1107,8 @@ static bool is_nested_rects(GrDrawTarget* target, |
| return false; |
| } |
| - *useVertexCoverage = false; |
| - if (!target->getDrawState().canTweakAlphaForCoverage()) { |
| - if (target->shouldDisableCoverageAAForBlend()) { |
| - return false; |
| - } else { |
| - *useVertexCoverage = true; |
| - } |
| + if (!target->getDrawState().canTweakAlphaForCoverage() && target->shouldDisableCoverageAAForBlend()) { |
|
bsalomon
2014/08/11 15:08:19
will wrap in updated CL.
|
| + return false; |
| } |
| SkPath::Direction dirs[2]; |
| @@ -1233,20 +1202,16 @@ void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const GrStrok |
| if (useCoverageAA && strokeRec.getWidth() < 0 && !path.isConvex()) { |
| // Concave AA paths are expensive - try to avoid them for special cases |
| - bool useVertexCoverage; |
| SkRect rects[2]; |
| - if (is_nested_rects(target, path, strokeRec, rects, &useVertexCoverage)) { |
| + if (is_nested_rects(target, path, strokeRec, rects)) { |
| SkMatrix origViewMatrix = drawState->getViewMatrix(); |
| GrDrawState::AutoViewMatrixRestore avmr; |
| if (!avmr.setIdentity(target->drawState())) { |
| return; |
| } |
| - fAARectRenderer->fillAANestedRects(this->getGpu(), target, |
| - rects, |
| - origViewMatrix, |
| - useVertexCoverage); |
| + fAARectRenderer->fillAANestedRects(this->getGpu(), target, rects, origViewMatrix); |
| return; |
| } |
| } |
| @@ -1761,6 +1726,9 @@ GrDrawTarget* GrContext::prepareToDraw(const GrPaint* paint, |
| are->set(NULL); |
| return NULL; |
| } |
| + // Clear any vertex attributes configured for the previous use of the |
| + // GrDrawState which can effect which blend optimizations are in effect. |
| + fDrawState->setDefaultVertexAttribs(); |
| } else { |
| fDrawState->reset(fViewMatrix); |
| fDrawState->setRenderTarget(fRenderTarget.get()); |