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/GrCCPRCubicShader.h b/src/gpu/ccpr/GrCCPRCubicShader.h
index be7635e..10f4dff 100644
--- a/src/gpu/ccpr/GrCCPRCubicShader.h
+++ b/src/gpu/ccpr/GrCCPRCubicShader.h
@@ -23,11 +23,11 @@
*/
class GrCCPRCubicShader : 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,
- GeometryVars*) const = 0;
+ virtual void onEmitSetupCode(GrGLSLVertexGeoBuilder*, const char* pts, const char* repetitionID,
+ GeometryVars*) const {}
WindHandling onEmitVaryings(GrGLSLVaryingHandler*, SkString* code, const char* position,
const char* coverage, const char* wind) final;
@@ -40,10 +40,6 @@
};
class GrCCPRCubicHullShader : public GrCCPRCubicShader {
- GeometryType getGeometryType() const override { return GeometryType::kHull; }
- int getNumSegments() const override { return 4; } // 4 wedges.
- void onEmitSetupCode(GrGLSLShaderBuilder*, const char* pts, const char* wedgeId,
- GeometryVars*) const override;
void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override;
void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override;
@@ -51,9 +47,7 @@
};
class GrCCPRCubicCornerShader : public GrCCPRCubicShader {
- GeometryType getGeometryType() const override { return GeometryType::kCorners; }
- int getNumSegments() const override { return 2; } // 2 corners.
- 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;