Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: src/gpu/GrContext.cpp

Issue 38573007: Do not apply hairline optimization for paths if nv_path_rendering is used (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: address problems Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrAAHairLinePathRenderer.cpp ('k') | src/gpu/GrDefaultPathRenderer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrContext.cpp
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index b0d34fd03933af6e531ca3b4ae78fbd723477cc7..cab4414ae256e1a28813d55ee8957268fbdd0e16 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -43,10 +43,6 @@ SK_CONF_DECLARE(bool, c_Defer, "gpu.deferContext", true,
#define BUFFERED_DRAW (c_Defer ? kYes_BufferedDraw : kNo_BufferedDraw)
-// When we're using coverage AA but the blend is incompatible (given gpu
-// limitations) should we disable AA or draw wrong?
-#define DISABLE_COVERAGE_AA_FOR_BLEND 1
-
#ifdef SK_DEBUG
// change this to a 1 to see notifications when partial coverage fails
#define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0
@@ -695,14 +691,6 @@ void GrContext::dumpFontCache() const {
////////////////////////////////////////////////////////////////////////////////
-namespace {
-inline bool disable_coverage_aa_for_blend(GrDrawTarget* target) {
- return DISABLE_COVERAGE_AA_FOR_BLEND && !target->canApplyCoverage();
-}
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
/* create a triangle strip that strokes the specified triangle. There are 8
unique vertices, but we repreat the last 2 to close up. Alternatively we
could use an indices array, and then only send 8 verts, but not sure that
@@ -746,7 +734,7 @@ static bool apply_aa_to_rect(GrDrawTarget* target,
// TODO: remove this ugliness when we drop the fixed-pipe impl
*useVertexCoverage = false;
if (!target->getDrawState().canTweakAlphaForCoverage()) {
- if (disable_coverage_aa_for_blend(target)) {
+ if (target->shouldDisableCoverageAAForBlend()) {
#ifdef SK_DEBUG
//GrPrintf("Turning off AA to correctly apply blend.\n");
#endif
@@ -1034,14 +1022,10 @@ void GrContext::drawRRect(const GrPaint& paint,
AutoCheckFlush acf(this);
GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW, &are, &acf);
- bool useAA = paint.isAntiAlias() &&
- !target->getDrawState().getRenderTarget()->isMultisampled() &&
- !disable_coverage_aa_for_blend(target);
-
- if (!fOvalRenderer->drawSimpleRRect(target, this, useAA, rect, stroke)) {
+ if (!fOvalRenderer->drawSimpleRRect(target, this, paint.isAntiAlias(), rect, stroke)) {
SkPath path;
path.addRRect(rect);
- this->internalDrawPath(target, useAA, path, stroke);
+ this->internalDrawPath(target, paint.isAntiAlias(), path, stroke);
}
}
@@ -1058,14 +1042,10 @@ void GrContext::drawOval(const GrPaint& paint,
AutoCheckFlush acf(this);
GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW, &are, &acf);
- bool useAA = paint.isAntiAlias() &&
- !target->getDrawState().getRenderTarget()->isMultisampled() &&
- !disable_coverage_aa_for_blend(target);
-
- if (!fOvalRenderer->drawOval(target, this, useAA, oval, stroke)) {
+ if (!fOvalRenderer->drawOval(target, this, paint.isAntiAlias(), oval, stroke)) {
SkPath path;
path.addOval(oval);
- this->internalDrawPath(target, useAA, path, stroke);
+ this->internalDrawPath(target, paint.isAntiAlias(), path, stroke);
}
}
@@ -1091,7 +1071,7 @@ static bool is_nested_rects(GrDrawTarget* target,
*useVertexCoverage = false;
if (!target->getDrawState().canTweakAlphaForCoverage()) {
- if (disable_coverage_aa_for_blend(target)) {
+ if (target->shouldDisableCoverageAAForBlend()) {
return false;
} else {
*useVertexCoverage = true;
@@ -1141,15 +1121,17 @@ void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const SkStrok
AutoRestoreEffects are;
AutoCheckFlush acf(this);
GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW, &are, &acf);
+ GrDrawState* drawState = target->drawState();
- bool useAA = paint.isAntiAlias() && !target->getDrawState().getRenderTarget()->isMultisampled();
- if (useAA && stroke.getWidth() < 0 && !path.isConvex()) {
+ bool useCoverageAA = paint.isAntiAlias() && !drawState->getRenderTarget()->isMultisampled();
+
+ if (useCoverageAA && stroke.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, stroke, rects, &useVertexCoverage)) {
- SkMatrix origViewMatrix = target->getDrawState().getViewMatrix();
+ SkMatrix origViewMatrix = drawState->getViewMatrix();
GrDrawState::AutoViewMatrixRestore avmr;
if (!avmr.setIdentity(target->drawState())) {
return;
@@ -1167,8 +1149,8 @@ void GrContext::drawPath(const GrPaint& paint, const SkPath& path, const SkStrok
bool isOval = path.isOval(&ovalRect);
if (!isOval || path.isInverseFillType()
- || !fOvalRenderer->drawOval(target, this, useAA, ovalRect, stroke)) {
- this->internalDrawPath(target, useAA, path, stroke);
+ || !fOvalRenderer->drawOval(target, this, paint.isAntiAlias(), ovalRect, stroke)) {
+ this->internalDrawPath(target, paint.isAntiAlias(), path, stroke);
}
}
@@ -1180,15 +1162,14 @@ void GrContext::internalDrawPath(GrDrawTarget* target, bool useAA, const SkPath&
// the src color (either the input alpha or in the frag shader) to implement
// aa. If we have some future driver-mojo path AA that can do the right
// thing WRT to the blend then we'll need some query on the PR.
- if (disable_coverage_aa_for_blend(target)) {
-#ifdef SK_DEBUG
- //GrPrintf("Turning off AA to correctly apply blend.\n");
-#endif
- useAA = false;
- }
+ bool useCoverageAA = useAA &&
+ !target->getDrawState().getRenderTarget()->isMultisampled() &&
+ !target->shouldDisableCoverageAAForBlend();
+
- GrPathRendererChain::DrawType type = useAA ? GrPathRendererChain::kColorAntiAlias_DrawType :
- GrPathRendererChain::kColor_DrawType;
+ GrPathRendererChain::DrawType type =
+ useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType :
+ GrPathRendererChain::kColor_DrawType;
const SkPath* pathPtr = &path;
SkPath tmpPath;
@@ -1198,16 +1179,16 @@ void GrContext::internalDrawPath(GrDrawTarget* target, bool useAA, const SkPath&
GrPathRenderer* pr = this->getPathRenderer(*pathPtr, strokeRec, target, false, type);
if (NULL == pr) {
- if (!strokeRec.isHairlineStyle()) {
+ if (!GrPathRenderer::IsStrokeHairlineOrEquivalent(strokeRec, this->getMatrix(), NULL)) {
// It didn't work the 1st time, so try again with the stroked path
if (strokeRec.applyToPath(&tmpPath, *pathPtr)) {
pathPtr = &tmpPath;
strokeRec.setFillStyle();
+ if (pathPtr->isEmpty()) {
+ return;
+ }
}
}
- if (pathPtr->isEmpty()) {
- return;
- }
// This time, allow SW renderer
pr = this->getPathRenderer(*pathPtr, strokeRec, target, true, type);
@@ -1220,7 +1201,7 @@ void GrContext::internalDrawPath(GrDrawTarget* target, bool useAA, const SkPath&
return;
}
- pr->drawPath(*pathPtr, strokeRec, target, useAA);
+ pr->drawPath(*pathPtr, strokeRec, target, useCoverageAA);
}
////////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « src/gpu/GrAAHairLinePathRenderer.cpp ('k') | src/gpu/GrDefaultPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698