aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/ccpr/GrCCPRQuadraticShader.cpp
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-10-24 10:59:03 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-25 15:59:18 +0000
commitc17bf32a1bf2f79a8c4a281c2ad312a3cdb610cd (patch)
treedaac8294c72cd1bfd370291faf3dbc364460be8e /src/gpu/ccpr/GrCCPRQuadraticShader.cpp
parenta045eea29eb79254248d7e2666825a1ca7d23d4e (diff)
Convert geometry shaders to operate in Skia device space
Defers the transformation to normalized window coordinates until after the geometry shader. Merges vertex and a geometry shader builders into a single compilation unit with a common base class. Updates CCPR geometry shaders accordingly. Bug: skia: Change-Id: If93c90e978b1fdc7120febd05cfb05810fd496b5 Reviewed-on: https://skia-review.googlesource.com/62980 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/ccpr/GrCCPRQuadraticShader.cpp')
-rw-r--r--src/gpu/ccpr/GrCCPRQuadraticShader.cpp26
1 files changed, 12 insertions, 14 deletions
diff --git a/src/gpu/ccpr/GrCCPRQuadraticShader.cpp b/src/gpu/ccpr/GrCCPRQuadraticShader.cpp
index 44e9b7e8c9..126dae15cd 100644
--- a/src/gpu/ccpr/GrCCPRQuadraticShader.cpp
+++ b/src/gpu/ccpr/GrCCPRQuadraticShader.cpp
@@ -17,13 +17,12 @@ void GrCCPRQuadraticShader::appendInputPointFetch(const GrCCPRCoverageProcessor&
SkStringPrintf("%s.x + %s", proc.instanceAttrib(), pointId).c_str());
}
-void GrCCPRQuadraticShader::emitWind(GrGLSLShaderBuilder* s, const char* pts, const char* rtAdjust,
+void GrCCPRQuadraticShader::emitWind(GrGLSLShaderBuilder* s, const char* pts,
const char* outputWind) const {
s->codeAppendf("float area_times_2 = determinant(float2x2(%s[1] - %s[0], %s[2] - %s[0]));",
pts, pts, pts, pts);
// Drop curves that are nearly flat, in favor of the higher quality triangle antialiasing.
- s->codeAppendf("if (2 * abs(area_times_2) < length((%s[2] - %s[0]) * %s.zx)) {",
- pts, pts, rtAdjust);
+ s->codeAppendf("if (2 * abs(area_times_2) < length(%s[2] - %s[0])) {", pts, pts);
#ifndef SK_BUILD_FOR_MAC
s->codeAppend ( "return;");
#else
@@ -35,8 +34,7 @@ void GrCCPRQuadraticShader::emitWind(GrGLSLShaderBuilder* s, const char* pts, co
}
void GrCCPRQuadraticShader::emitSetupCode(GrGLSLShaderBuilder* s, const char* pts,
- const char* segmentId, const char* bloat,
- const char* wind, const char* rtAdjust,
+ const char* segmentId, const char* wind,
GeometryVars* vars) const {
s->declareGlobal(fCanonicalMatrix);
s->codeAppendf("%s = float3x3(0.0, 0, 1, "
@@ -47,16 +45,17 @@ void GrCCPRQuadraticShader::emitSetupCode(GrGLSLShaderBuilder* s, const char* pt
"%s[2], 1));",
fCanonicalMatrix.c_str(), pts, pts, pts);
+ // TODO: remove in followup CL.
s->declareGlobal(fCanonicalDerivatives);
- s->codeAppendf("%s = float2x2(%s) * float2x2(%s.x, 0, 0, %s.z);",
- fCanonicalDerivatives.c_str(), fCanonicalMatrix.c_str(), rtAdjust, rtAdjust);
+ s->codeAppendf("%s = float2x2(%s);",
+ fCanonicalDerivatives.c_str(), fCanonicalMatrix.c_str());
s->declareGlobal(fEdgeDistanceEquation);
s->codeAppendf("float2 edgept0 = %s[%s > 0 ? 2 : 0];", pts, wind);
s->codeAppendf("float2 edgept1 = %s[%s > 0 ? 0 : 2];", pts, wind);
Shader::EmitEdgeDistanceEquation(s, "edgept0", "edgept1", fEdgeDistanceEquation.c_str());
- this->onEmitSetupCode(s, pts, segmentId, rtAdjust, vars);
+ this->onEmitSetupCode(s, pts, segmentId, vars);
}
GrCCPRQuadraticShader::WindHandling
@@ -75,8 +74,7 @@ GrCCPRQuadraticShader::onEmitVaryings(GrGLSLVaryingHandler* varyingHandler, SkSt
}
void GrCCPRQuadraticHullShader::onEmitSetupCode(GrGLSLShaderBuilder* s, const char* pts,
- const char* /*wedgeId*/, const char* /*rtAdjust*/,
- GeometryVars* vars) const {
+ const char* /*wedgeId*/, GeometryVars* vars) const {
// Find the T value whose tangent is halfway between the tangents at the endpionts.
s->codeAppendf("float2 tan0 = %s[1] - %s[0];", pts, pts);
s->codeAppendf("float2 tan1 = %s[2] - %s[1];", pts, pts);
@@ -109,11 +107,11 @@ void GrCCPRQuadraticHullShader::onEmitFragmentCode(GrGLSLPPFragmentBuilder* f,
}
void GrCCPRQuadraticCornerShader::onEmitSetupCode(GrGLSLShaderBuilder* s, const char* pts,
- const char* cornerId, const char* rtAdjust,
- GeometryVars* vars) const {
+ const char* cornerId, GeometryVars* vars) const {
+ // TODO: remove in followup CL.
s->declareGlobal(fEdgeDistanceDerivatives);
- s->codeAppendf("%s = %s.xy * %s.xz;",
- fEdgeDistanceDerivatives.c_str(), fEdgeDistanceEquation.c_str(), rtAdjust);
+ s->codeAppendf("%s = %s.xy;",
+ fEdgeDistanceDerivatives.c_str(), fEdgeDistanceEquation.c_str());
s->codeAppendf("float2 corner = %s[%s * 2];", pts, cornerId);
vars->fCornerVars.fPoint = "corner";