aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp')
-rw-r--r--src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp24
1 files changed, 7 insertions, 17 deletions
diff --git a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
index b1d886cf8c..61bb4ec7cf 100644
--- a/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
+++ b/src/gpu/ccpr/GrCCCoverageProcessor_GSImpl.cpp
@@ -59,18 +59,11 @@ protected:
GrShaderVar wind("wind", kHalf_GrSLType);
g->declareGlobal(wind);
- if (PrimitiveType::kWeightedTriangles != proc.fPrimitiveType) {
- g->codeAppend ("float area_x2 = determinant(float2x2(pts[0] - pts[1], "
- "pts[0] - pts[2]));");
- if (4 == numInputPoints) {
- g->codeAppend ("area_x2 += determinant(float2x2(pts[0] - pts[2], "
- "pts[0] - pts[3]));");
- }
- g->codeAppendf("%s = sign(area_x2);", wind.c_str());
- } else {
+ Shader::CalcWind(proc, g, "pts", wind.c_str());
+ if (PrimitiveType::kWeightedTriangles == proc.fPrimitiveType) {
SkASSERT(3 == numInputPoints);
SkASSERT(kFloat4_GrVertexAttribType == proc.getAttrib(0).fType);
- g->codeAppendf("%s = sk_in[0].sk_Position.w;", wind.c_str());
+ g->codeAppendf("%s *= sk_in[0].sk_Position.w;", wind.c_str());
}
SkString emitVertexFn;
@@ -306,10 +299,8 @@ public:
const GrShaderVar& wind, const char* emitVertexFn) const override {
fShader->emitSetupCode(g, "pts", wind.c_str());
- bool isTriangle = PrimitiveType::kTriangles == proc.fPrimitiveType ||
- PrimitiveType::kWeightedTriangles == proc.fPrimitiveType;
g->codeAppendf("int corneridx = sk_InvocationID;");
- if (!isTriangle) {
+ if (!proc.isTriangles()) {
g->codeAppendf("corneridx *= %i;", proc.numInputPoints() - 1);
}
@@ -336,7 +327,7 @@ public:
Shader::CalcCornerAttenuation(g, "leftdir", "rightdir", "attenuation");
g->codeAppend ("}");
- if (isTriangle) {
+ if (proc.isTriangles()) {
g->codeAppend ("half2 left_coverages; {");
Shader::CalcEdgeCoveragesAtBloatVertices(g, "left", "corner", "-outbloat",
"-crossbloat", "left_coverages");
@@ -384,7 +375,7 @@ public:
g->codeAppendf("%s(corner + crossbloat * bloat, -1, half2(1));", emitVertexFn);
}
- g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, isTriangle ? 3 : 2);
+ g->configure(InputType::kLines, OutputType::kTriangleStrip, 4, proc.isTriangles() ? 3 : 2);
}
};
@@ -416,8 +407,7 @@ void GrCCCoverageProcessor::appendGSMesh(GrBuffer* instanceBuffer, int instanceC
GrGLSLPrimitiveProcessor* GrCCCoverageProcessor::createGSImpl(std::unique_ptr<Shader> shadr) const {
if (GSSubpass::kHulls == fGSSubpass) {
- return (PrimitiveType::kTriangles == fPrimitiveType ||
- PrimitiveType::kWeightedTriangles == fPrimitiveType)
+ return this->isTriangles()
? (GSImpl*) new GSTriangleHullImpl(std::move(shadr))
: (GSImpl*) new GSCurveHullImpl(std::move(shadr));
}