aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-09-11 22:04:03 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-12 18:08:21 +0000
commita640c49b7ecf667696542143edec96d10a940592 (patch)
tree519a2e31ef560c1f9e60c5b55acb32b7e81d07bb
parent6f0751e50f61479e435c6c1c5b72139ba7e8b7e6 (diff)
Minor cleanups for CCPR
Bug: skia: Change-Id: Ic4838f0e242ded0c3d0cb5c86715ed67d8152f5c Reviewed-on: https://skia-review.googlesource.com/44520 Commit-Queue: Chris Dalton <csmartdalton@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
-rw-r--r--samplecode/SampleCCPRGeometry.cpp12
-rw-r--r--src/core/SkGeometry.h17
-rw-r--r--src/gpu/ccpr/GrCCPRCoverageProcessor.cpp6
-rw-r--r--src/gpu/ccpr/GrCCPRCoverageProcessor.h16
4 files changed, 32 insertions, 19 deletions
diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp
index 3fb4fb6cbf..c3cd4707dc 100644
--- a/samplecode/SampleCCPRGeometry.cpp
+++ b/samplecode/SampleCCPRGeometry.cpp
@@ -29,6 +29,8 @@ using TriangleInstance = GrCCPRCoverageProcessor::TriangleInstance;
using CurveInstance = GrCCPRCoverageProcessor::CurveInstance;
using Mode = GrCCPRCoverageProcessor::Mode;
+static constexpr float kDebugBloat = 40;
+
static int num_points(Mode mode) {
return mode >= Mode::kSerpentineHulls ? 4 : 3;
}
@@ -156,10 +158,10 @@ void CCPRGeometryView::onDrawContent(SkCanvas* canvas) {
gridPaint.setStyle(SkPaint::kStroke_Style);
gridPaint.setStrokeWidth(0);
gridPaint.setAntiAlias(true);
- for (int y = 0; y < this->height(); y += GrCCPRCoverageProcessor::kDebugBloat) {
+ for (int y = 0; y < this->height(); y += kDebugBloat) {
canvas->drawLine(0, y, this->width(), y, gridPaint);
}
- for (int x = 0; x < this->width(); x += GrCCPRCoverageProcessor::kDebugBloat) {
+ for (int x = 0; x < this->width(); x += kDebugBloat) {
canvas->drawLine(x, 0, x, this->height(), outlinePaint);
}
#endif
@@ -220,9 +222,7 @@ void CCPRGeometryView::updateGpuData() {
GrCCPRGeometry geometry;
geometry.beginContour(fPoints[0]);
- geometry.cubicTo(fPoints[1], fPoints[2], fPoints[3],
- GrCCPRCoverageProcessor::kDebugBloat / 2,
- GrCCPRCoverageProcessor::kDebugBloat / 2);
+ geometry.cubicTo(fPoints[1], fPoints[2], fPoints[3], kDebugBloat/2, kDebugBloat/2);
geometry.endContour();
fGpuPoints.push_back_n(geometry.points().count(), geometry.points().begin());
int ptsIdx = 0;
@@ -305,7 +305,7 @@ void CCPRGeometryView::Op::onExecute(GrOpFlushState* state) {
SkBlendMode::kSrcOver);
GrCCPRCoverageProcessor ccprProc(fView->fMode, pointsBuffer.get());
- SkDEBUGCODE(ccprProc.enableDebugVisualizations();)
+ SkDEBUGCODE(ccprProc.enableDebugVisualizations(kDebugBloat);)
GrMesh mesh(4 == vertexCount ? GrPrimitiveType::kLinesAdjacency : GrPrimitiveType::kTriangles);
mesh.setInstanced(instanceBuffer.get(), fView->fInstanceCount, 0, vertexCount);
diff --git a/src/core/SkGeometry.h b/src/core/SkGeometry.h
index d9554448a3..96565888d8 100644
--- a/src/core/SkGeometry.h
+++ b/src/core/SkGeometry.h
@@ -166,8 +166,21 @@ enum class SkCubicType {
kQuadratic,
kLineOrPoint
};
-constexpr bool SkCubicIsDegenerate(SkCubicType type) {
- return type >= SkCubicType::kQuadratic;
+
+static inline bool SkCubicIsDegenerate(SkCubicType type) {
+ switch (type) {
+ case SkCubicType::kSerpentine:
+ case SkCubicType::kLoop:
+ case SkCubicType::kLocalCusp:
+ case SkCubicType::kCuspAtInfinity:
+ return false;
+ default:
+ SK_ABORT("Invalid SkCubicType");
+ // fallthru
+ case SkCubicType::kQuadratic:
+ case SkCubicType::kLineOrPoint:
+ return true;
+ }
}
/** Returns the cubic classification.
diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
index 69605095f6..079f240231 100644
--- a/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
+++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.cpp
@@ -159,8 +159,8 @@ void PrimitiveProcessor::emitGeometryShader(const GrCCPRCoverageProcessor& proc,
g->codeAppendf("highp float2 bloat = %f * abs(%s.xz);", kAABloatRadius, rtAdjust);
#ifdef SK_DEBUG
- if (proc.debugVisualizations()) {
- g->codeAppendf("bloat *= %f;", GrCCPRCoverageProcessor::kDebugBloat);
+ if (proc.debugVisualizationsEnabled()) {
+ g->codeAppendf("bloat *= %f;", proc.debugBloat());
}
#endif
@@ -324,7 +324,7 @@ void PrimitiveProcessor::emitCoverage(const GrCCPRCoverageProcessor& proc, GrGLS
f->codeAppendf("%s = float4(1);", outputCoverage);
#ifdef SK_DEBUG
- if (proc.debugVisualizations()) {
+ if (proc.debugVisualizationsEnabled()) {
f->codeAppendf("%s = float4(-%s.a, %s.a, 0, 1);", outputColor, outputColor, outputColor);
}
#endif
diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.h b/src/gpu/ccpr/GrCCPRCoverageProcessor.h
index 2835cc5a5f..b8032d9ec2 100644
--- a/src/gpu/ccpr/GrCCPRCoverageProcessor.h
+++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.h
@@ -92,12 +92,12 @@ public:
void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
- static constexpr float kDebugBloat = 50;
#ifdef SK_DEBUG
- // Increases the 1/2 pixel AA bloat by a factor of kDebugBloat and outputs color instead of
+ // Increases the 1/2 pixel AA bloat by a factor of debugBloat and outputs color instead of
// coverage (coverage=+1 -> green, coverage=0 -> black, coverage=-1 -> red).
- void enableDebugVisualizations() { fDebugVisualizations = true; }
- bool debugVisualizations() const { return fDebugVisualizations; }
+ void enableDebugVisualizations(float debugBloat) { fDebugBloat = debugBloat; }
+ bool debugVisualizationsEnabled() const { return fDebugBloat > 0; }
+ float debugBloat() const { SkASSERT(this->debugVisualizationsEnabled()); return fDebugBloat; }
static void Validate(GrRenderTargetProxy* atlasProxy);
#endif
@@ -105,10 +105,10 @@ public:
class PrimitiveProcessor;
private:
- const Mode fMode;
- const Attribute& fInstanceAttrib;
- BufferAccess fPointsBufferAccess;
- SkDEBUGCODE(bool fDebugVisualizations = false;)
+ const Mode fMode;
+ const Attribute& fInstanceAttrib;
+ BufferAccess fPointsBufferAccess;
+ SkDEBUGCODE(float fDebugBloat = false;)
typedef GrGeometryProcessor INHERITED;
};