| Index: src/gpu/batches/GrPLSPathRenderer.cpp
|
| diff --git a/src/gpu/batches/GrPLSPathRenderer.cpp b/src/gpu/batches/GrPLSPathRenderer.cpp
|
| index 28ad2069bf58c0a0dfb7c5bc6c1af1f51043bf01..ee0316a255e8d06f6c24d0a6dd7b5b7936d9d1fa 100644
|
| --- a/src/gpu/batches/GrPLSPathRenderer.cpp
|
| +++ b/src/gpu/batches/GrPLSPathRenderer.cpp
|
| @@ -36,7 +36,7 @@ GrPLSPathRenderer::GrPLSPathRenderer() {
|
| struct PLSVertex {
|
| SkPoint fPos;
|
| // for triangles, these are the three triangle vertices
|
| - // for quads, vert1 is the texture UV coords, and vert2 and vert3 are the line segment
|
| + // for quads, vert1 is the texture UV coords, and vert2 and vert3 are the line segment
|
| // comprising the flat edge of the quad
|
| SkPoint fVert1;
|
| SkPoint fVert2;
|
| @@ -56,7 +56,7 @@ static const float kBloatLimit = 640000.0f;
|
|
|
| #define kQuadNumVertices 5
|
| static void add_quad(SkPoint pts[3], PLSVertices& vertices) {
|
| - SkPoint normal = SkPoint::Make(pts[0].fY - pts[2].fY,
|
| + SkPoint normal = SkPoint::Make(pts[0].fY - pts[2].fY,
|
| pts[2].fX - pts[0].fX);
|
| normal.setLength(kBloatSize);
|
| SkScalar cross = (pts[1] - pts[0]).cross(pts[2] - pts[0]);
|
| @@ -132,7 +132,7 @@ static bool bloat_tri(SkPoint pts[3]) {
|
| return true;
|
| }
|
|
|
| -static bool get_geometry(const SkPath& path, const SkMatrix& m, PLSVertices& triVertices,
|
| +static bool get_geometry(const SkPath& path, const SkMatrix& m, PLSVertices& triVertices,
|
| PLSVertices& quadVertices, GrResourceProvider* resourceProvider,
|
| SkRect bounds) {
|
| SkScalar screenSpaceTol = GrPathUtils::kDefaultTolerance;
|
| @@ -292,48 +292,48 @@ public:
|
|
|
| GrGLSLVertToFrag v1(kVec2f_GrSLType);
|
| varyingHandler->addVarying("Vertex1", &v1, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| v1.vsOut(),
|
| - te.inVertex1()->fName,
|
| + te.inVertex1()->fName,
|
| te.inVertex1()->fName);
|
|
|
| GrGLSLVertToFrag v2(kVec2f_GrSLType);
|
| varyingHandler->addVarying("Vertex2", &v2, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| v2.vsOut(),
|
| - te.inVertex2()->fName,
|
| + te.inVertex2()->fName,
|
| te.inVertex2()->fName);
|
|
|
| GrGLSLVertToFrag v3(kVec2f_GrSLType);
|
| varyingHandler->addVarying("Vertex3", &v3, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);",
|
| v3.vsOut(),
|
| - te.inVertex3()->fName,
|
| + te.inVertex3()->fName,
|
| te.inVertex3()->fName);
|
|
|
| GrGLSLVertToFrag delta1(kVec2f_GrSLType);
|
| varyingHandler->addVarying("delta1", &delta1, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| delta1.vsOut(), v1.vsOut(), v2.vsOut(), v2.vsOut(), v1.vsOut());
|
|
|
| GrGLSLVertToFrag delta2(kVec2f_GrSLType);
|
| varyingHandler->addVarying("delta2", &delta2, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| delta2.vsOut(), v2.vsOut(), v3.vsOut(), v3.vsOut(), v2.vsOut());
|
|
|
| GrGLSLVertToFrag delta3(kVec2f_GrSLType);
|
| varyingHandler->addVarying("delta3", &delta3, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| delta3.vsOut(), v3.vsOut(), v1.vsOut(), v1.vsOut(), v3.vsOut());
|
|
|
| GrGLSLVertToFrag windings(kInt_GrSLType);
|
| varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = %s;",
|
| + vsBuilder->codeAppendf("%s = %s;",
|
| windings.vsOut(), te.inWindings()->fName);
|
|
|
| // emit transforms
|
| - this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| - te.inPosition()->fName, te.localMatrix(), args.fTransformsIn,
|
| + this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| + te.inPosition()->fName, te.localMatrix(), args.fTransformsIn,
|
| args.fTransformsOut);
|
|
|
| GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
|
| @@ -342,11 +342,11 @@ public:
|
| SkAssertResult(fsBuilder->enableFeature(
|
| GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature));
|
| fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL);
|
| - // Compute four subsamples, each shifted a quarter pixel along x and y from
|
| - // gl_FragCoord. The oriented box positioning of the subsamples is of course not
|
| + // Compute four subsamples, each shifted a quarter pixel along x and y from
|
| + // gl_FragCoord. The oriented box positioning of the subsamples is of course not
|
| // optimal, but it greatly simplifies the math and this simplification is necessary for
|
| // performance reasons.
|
| - fsBuilder->codeAppendf("highp vec2 firstSample = %s.xy - vec2(0.25);",
|
| + fsBuilder->codeAppendf("highp vec2 firstSample = %s.xy - vec2(0.25);",
|
| fsBuilder->fragmentPosition());
|
| fsBuilder->codeAppendf("highp vec2 delta1 = %s;", delta1.fsIn());
|
| fsBuilder->codeAppendf("highp vec2 delta2 = %s;", delta2.fsIn());
|
| @@ -355,11 +355,11 @@ public:
|
| // all are < 0, we're inside. The first vector in each case is half of what it is
|
| // "supposed" to be, because we re-use them later as adjustment factors for which half
|
| // is the correct value, so we multiply the dots by two to compensate.
|
| - fsBuilder->codeAppendf("highp float d1 = dot(delta1, (firstSample - %s).yx) * 2.0;",
|
| + fsBuilder->codeAppendf("highp float d1 = dot(delta1, (firstSample - %s).yx) * 2.0;",
|
| v1.fsIn());
|
| - fsBuilder->codeAppendf("highp float d2 = dot(delta2, (firstSample - %s).yx) * 2.0;",
|
| + fsBuilder->codeAppendf("highp float d2 = dot(delta2, (firstSample - %s).yx) * 2.0;",
|
| v2.fsIn());
|
| - fsBuilder->codeAppendf("highp float d3 = dot(delta3, (firstSample - %s).yx) * 2.0;",
|
| + fsBuilder->codeAppendf("highp float d3 = dot(delta3, (firstSample - %s).yx) * 2.0;",
|
| v3.fsIn());
|
| fsBuilder->codeAppend("highp float dmax = max(d1, max(d2, d3));");
|
| fsBuilder->codeAppendf("pls.windings[0] += (dmax <= 0.0) ? %s : 0;", windings.fsIn());
|
| @@ -420,15 +420,15 @@ private:
|
| : fLocalMatrix(localMatrix)
|
| , fUsesLocalCoords(usesLocalCoords) {
|
| this->initClassID<PLSAATriangleEffect>();
|
| - fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| + fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInVertex1 = &this->addVertexAttrib(Attribute("inVertex1", kVec2f_GrVertexAttribType,
|
| + fInVertex1 = &this->addVertexAttrib(Attribute("inVertex1", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInVertex2 = &this->addVertexAttrib(Attribute("inVertex2", kVec2f_GrVertexAttribType,
|
| + fInVertex2 = &this->addVertexAttrib(Attribute("inVertex2", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInVertex3 = &this->addVertexAttrib(Attribute("inVertex3", kVec2f_GrVertexAttribType,
|
| + fInVertex3 = &this->addVertexAttrib(Attribute("inVertex3", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInWindings = &this->addVertexAttrib(Attribute("inWindings", kInt_GrVertexAttribType,
|
| + fInWindings = &this->addVertexAttrib(Attribute("inWindings", kInt_GrVertexAttribType,
|
| kLow_GrSLPrecision));
|
| this->setWillReadFragmentPosition();
|
| }
|
| @@ -440,7 +440,7 @@ private:
|
| const Attribute* fInWindings;
|
| SkMatrix fLocalMatrix;
|
| bool fUsesLocalCoords;
|
| -
|
| +
|
| GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
|
|
|
| typedef GrGeometryProcessor INHERITED;
|
| @@ -497,31 +497,31 @@ public:
|
|
|
| GrGLSLVertToFrag ep1(kVec2f_GrSLType);
|
| varyingHandler->addVarying("endpoint1", &ep1, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);", ep1.vsOut(),
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);", ep1.vsOut(),
|
| qe.inEndpoint1()->fName, qe.inEndpoint1()->fName);
|
|
|
| GrGLSLVertToFrag ep2(kVec2f_GrSLType);
|
| varyingHandler->addVarying("endpoint2", &ep2, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);", ep2.vsOut(),
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x, %s.y);", ep2.vsOut(),
|
| qe.inEndpoint2()->fName, qe.inEndpoint2()->fName);
|
|
|
| GrGLSLVertToFrag delta(kVec2f_GrSLType);
|
| varyingHandler->addVarying("delta", &delta, kHigh_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| - delta.vsOut(), ep1.vsOut(), ep2.vsOut(), ep2.vsOut(),
|
| + vsBuilder->codeAppendf("%s = vec2(%s.x - %s.x, %s.y - %s.y) * 0.5;",
|
| + delta.vsOut(), ep1.vsOut(), ep2.vsOut(), ep2.vsOut(),
|
| ep1.vsOut());
|
|
|
| GrGLSLVertToFrag windings(kInt_GrSLType);
|
| varyingHandler->addFlatVarying("windings", &windings, kLow_GrSLPrecision);
|
| - vsBuilder->codeAppendf("%s = %s;",
|
| + vsBuilder->codeAppendf("%s = %s;",
|
| windings.vsOut(), qe.inWindings()->fName);
|
|
|
| // Setup position
|
| this->setupPosition(vsBuilder, gpArgs, qe.inPosition()->fName);
|
|
|
| // emit transforms
|
| - this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| - qe.inPosition()->fName, qe.localMatrix(), args.fTransformsIn,
|
| + this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| + qe.inPosition()->fName, qe.localMatrix(), args.fTransformsIn,
|
| args.fTransformsOut);
|
|
|
| GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
|
| @@ -541,7 +541,7 @@ public:
|
| "} else {"
|
| "return false;"
|
| "}";
|
| - fsBuilder->emitFunction(kBool_GrSLType, "in_quad", QUAD_ARGS, inQuadArgs, inQuadCode,
|
| + fsBuilder->emitFunction(kBool_GrSLType, "in_quad", QUAD_ARGS, inQuadArgs, inQuadCode,
|
| &inQuadName);
|
| fsBuilder->declAppendf(GR_GL_PLS_PATH_DATA_DECL);
|
| // keep the derivative instructions outside the conditional
|
| @@ -549,25 +549,25 @@ public:
|
| fsBuilder->codeAppendf("highp vec2 uvdY = dFdy(%s);", uv.fsIn());
|
| fsBuilder->codeAppend("highp vec2 uvIncX = uvdX * 0.45 + uvdY * -0.1;");
|
| fsBuilder->codeAppend("highp vec2 uvIncY = uvdX * 0.1 + uvdY * 0.55;");
|
| - fsBuilder->codeAppendf("highp vec2 uv = %s.xy - uvdX * 0.35 - uvdY * 0.25;",
|
| + fsBuilder->codeAppendf("highp vec2 uv = %s.xy - uvdX * 0.35 - uvdY * 0.25;",
|
| uv.fsIn());
|
| fsBuilder->codeAppendf("highp vec2 firstSample = %s.xy - vec2(0.25);",
|
| fsBuilder->fragmentPosition());
|
| - fsBuilder->codeAppendf("highp float d = dot(%s, (firstSample - %s).yx) * 2.0;",
|
| + fsBuilder->codeAppendf("highp float d = dot(%s, (firstSample - %s).yx) * 2.0;",
|
| delta.fsIn(), ep1.fsIn());
|
| - fsBuilder->codeAppendf("pls.windings[0] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| + fsBuilder->codeAppendf("pls.windings[0] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| windings.fsIn());
|
| fsBuilder->codeAppend("uv += uvIncX;");
|
| fsBuilder->codeAppendf("d += %s.x;", delta.fsIn());
|
| - fsBuilder->codeAppendf("pls.windings[1] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| + fsBuilder->codeAppendf("pls.windings[1] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| windings.fsIn());
|
| fsBuilder->codeAppend("uv += uvIncY;");
|
| fsBuilder->codeAppendf("d += %s.y;", delta.fsIn());
|
| - fsBuilder->codeAppendf("pls.windings[2] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| + fsBuilder->codeAppendf("pls.windings[2] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| windings.fsIn());
|
| fsBuilder->codeAppend("uv -= uvIncX;");
|
| fsBuilder->codeAppendf("d -= %s.x;", delta.fsIn());
|
| - fsBuilder->codeAppendf("pls.windings[3] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| + fsBuilder->codeAppendf("pls.windings[3] += %s(d, uv) ? %s : 0;", inQuadName.c_str(),
|
| windings.fsIn());
|
| }
|
|
|
| @@ -609,15 +609,15 @@ private:
|
| : fLocalMatrix(localMatrix)
|
| , fUsesLocalCoords(usesLocalCoords) {
|
| this->initClassID<PLSQuadEdgeEffect>();
|
| - fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| + fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInUV = &this->addVertexAttrib(Attribute("inUV", kVec2f_GrVertexAttribType,
|
| + fInUV = &this->addVertexAttrib(Attribute("inUV", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInEndpoint1 = &this->addVertexAttrib(Attribute("inEndpoint1", kVec2f_GrVertexAttribType,
|
| + fInEndpoint1 = &this->addVertexAttrib(Attribute("inEndpoint1", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInEndpoint2 = &this->addVertexAttrib(Attribute("inEndpoint2", kVec2f_GrVertexAttribType,
|
| + fInEndpoint2 = &this->addVertexAttrib(Attribute("inEndpoint2", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| - fInWindings = &this->addVertexAttrib(Attribute("inWindings", kInt_GrVertexAttribType,
|
| + fInWindings = &this->addVertexAttrib(Attribute("inWindings", kInt_GrVertexAttribType,
|
| kLow_GrSLPrecision));
|
| this->setWillReadFragmentPosition();
|
| }
|
| @@ -629,7 +629,7 @@ private:
|
| const Attribute* fInWindings;
|
| SkMatrix fLocalMatrix;
|
| bool fUsesLocalCoords;
|
| -
|
| +
|
| GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
|
|
|
| typedef GrGeometryProcessor INHERITED;
|
| @@ -652,13 +652,13 @@ public:
|
| bool colorIgnored() const { return GrColor_ILLEGAL == fColor; }
|
| const SkMatrix& localMatrix() const { return fLocalMatrix; }
|
| bool usesLocalCoords() const { return fUsesLocalCoords; }
|
| -
|
| - GrPixelLocalStorageState getPixelLocalStorageState() const override {
|
| +
|
| + GrPixelLocalStorageState getPixelLocalStorageState() const override {
|
| return GrPixelLocalStorageState::kFinish_GrPixelLocalStorageState;
|
| }
|
|
|
| const char* getDestColorOverride() const override {
|
| - return GR_GL_PLS_DSTCOLOR_NAME;
|
| + return GR_GL_PLS_DSTCOLOR_NAME;
|
| }
|
|
|
| class GLSLProcessor : public GrGLSLGeometryProcessor {
|
| @@ -672,14 +672,14 @@ public:
|
| GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
|
|
|
| fUseEvenOdd = uniformHandler->addUniform(kFragment_GrShaderFlag,
|
| - kFloat_GrSLType, kLow_GrSLPrecision,
|
| + kFloat_GrSLType, kLow_GrSLPrecision,
|
| "useEvenOdd");
|
| const char* useEvenOdd = uniformHandler->getUniformCStr(fUseEvenOdd);
|
|
|
| varyingHandler->emitAttributes(fe);
|
| this->setupPosition(vsBuilder, gpArgs, fe.inPosition()->fName);
|
| - this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| - fe.inPosition()->fName, fe.localMatrix(), args.fTransformsIn,
|
| + this->emitTransforms(vsBuilder, varyingHandler, uniformHandler, gpArgs->fPositionVar,
|
| + fe.inPosition()->fName, fe.localMatrix(), args.fTransformsIn,
|
| args.fTransformsOut);
|
|
|
| GrGLSLPPFragmentBuilder* fsBuilder = args.fFragBuilder;
|
| @@ -699,7 +699,7 @@ public:
|
| fsBuilder->codeAppend("coverage += pls.windings[3] != 0 ? 0.25 : 0.0;");
|
| fsBuilder->codeAppend("}");
|
| if (!fe.colorIgnored()) {
|
| - this->setupUniformColor(fsBuilder, uniformHandler, args.fOutputColor,
|
| + this->setupUniformColor(fsBuilder, uniformHandler, args.fOutputColor,
|
| &fColorUniform);
|
| }
|
| fsBuilder->codeAppendf("%s = vec4(coverage);", args.fOutputCoverage);
|
| @@ -752,14 +752,14 @@ public:
|
| }
|
|
|
| private:
|
| - PLSFinishEffect(GrColor color, bool useEvenOdd, const SkMatrix& localMatrix,
|
| + PLSFinishEffect(GrColor color, bool useEvenOdd, const SkMatrix& localMatrix,
|
| bool usesLocalCoords)
|
| : fColor(color)
|
| , fUseEvenOdd(useEvenOdd)
|
| , fLocalMatrix(localMatrix)
|
| , fUsesLocalCoords(usesLocalCoords) {
|
| this->initClassID<PLSFinishEffect>();
|
| - fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| + fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType,
|
| kHigh_GrSLPrecision));
|
| }
|
|
|
| @@ -797,7 +797,7 @@ public:
|
|
|
| const char* name() const override { return "PLSBatch"; }
|
|
|
| - void computePipelineOptimizations(GrInitInvariantOutput* color,
|
| + void computePipelineOptimizations(GrInitInvariantOutput* color,
|
| GrInitInvariantOutput* coverage,
|
| GrBatchToXPOverrides* overrides) const override {
|
| // When this is called on a batch, there is only one geometry bundle
|
| @@ -911,10 +911,10 @@ public:
|
| }
|
|
|
| SkAutoTUnref<GrGeometryProcessor> finishProcessor(
|
| - PLSFinishEffect::Create(this->color(),
|
| - pathPtr->getFillType() ==
|
| + PLSFinishEffect::Create(this->color(),
|
| + pathPtr->getFillType() ==
|
| SkPath::FillType::kEvenOdd_FillType,
|
| - invert,
|
| + invert,
|
| this->usesLocalCoords()));
|
| const GrBuffer* rectVertexBuffer;
|
| size_t finishStride = finishProcessor->getVertexStride();
|
|
|