CCPR: Optimize Hull geometry
Conceptualizes hulls a as single entity, rather than a set of "wedges"
fanned around the midpoint. Optimizes GSImpl hulls to use less, better
triangles and not use the midpoint. This refactoring also paves the
way for VSImpl hulls.
Bug: skia:
Change-Id: I6a03c7b64811edfd1589f11a5d102e6ee56ea2d2
Reviewed-on: https://skia-review.googlesource.com/83962
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/ccpr/GrCCPRQuadraticShader.h b/src/gpu/ccpr/GrCCPRQuadraticShader.h
index 5d26a39..14505c6 100644
--- a/src/gpu/ccpr/GrCCPRQuadraticShader.h
+++ b/src/gpu/ccpr/GrCCPRQuadraticShader.h
@@ -22,10 +22,10 @@
*/
class GrCCPRQuadraticShader : public GrCCPRCoverageProcessor::Shader {
protected:
- void emitSetupCode(GrGLSLShaderBuilder*, const char* pts, const char* segmentId,
+ void emitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID,
const char* wind, GeometryVars*) const final;
- virtual void onEmitSetupCode(GrGLSLShaderBuilder*, const char* pts, const char* segmentId,
+ virtual void onEmitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID,
GeometryVars*) const = 0;
WindHandling onEmitVaryings(GrGLSLVaryingHandler*, SkString* code, const char* position,
@@ -45,10 +45,7 @@
* the provided curves are monotonic, this will get every pixel right except the two corners.
*/
class GrCCPRQuadraticHullShader : public GrCCPRQuadraticShader {
- int getNumSegments() const final { return 4; } // 4 wedges.
-
- GeometryType getGeometryType() const override { return GeometryType::kHull; }
- void onEmitSetupCode(GrGLSLShaderBuilder*, const char* pts, const char* wedgeId,
+ void onEmitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID,
GeometryVars*) const override;
void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override;
void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override;
@@ -60,10 +57,7 @@
* This pass fixes the corners of a closed quadratic segment with soft MSAA.
*/
class GrCCPRQuadraticCornerShader : public GrCCPRQuadraticShader {
- int getNumSegments() const final { return 2; } // 2 corners.
-
- GeometryType getGeometryType() const override { return GeometryType::kCorners; }
- void onEmitSetupCode(GrGLSLShaderBuilder*, const char* pts, const char* cornerId,
+ void onEmitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID,
GeometryVars*) const override;
void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override;
void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override;