Generaly Fixes to gpu bezier code

BUG=skia:

Change-Id: I2246aa0b2bc3327df42ca30d35020a4b878a819b
Reviewed-on: https://skia-review.googlesource.com/9555
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp
index 54c28a7..9167410 100644
--- a/gm/beziereffects.cpp
+++ b/gm/beziereffects.cpp
@@ -156,15 +156,16 @@
                 };
                 SkPoint chopped[10];
                 SkScalar klmEqs[9];
-                SkScalar klmSigns[3];
+                int loopIndex;
                 int cnt = GrPathUtils::chopCubicAtLoopIntersection(controlPts,
                                                                    chopped,
                                                                    klmEqs,
-                                                                   klmSigns);
+                                                                   &loopIndex);
 
                 SkPaint ctrlPtPaint;
                 ctrlPtPaint.setColor(rand.nextU() | 0xFF000000);
-                for (int i = 0; i < 4; ++i) {
+                canvas->drawCircle(controlPts[0].fX, controlPts[0].fY, 8.f, ctrlPtPaint);
+                for (int i = 1; i < 4; ++i) {
                     canvas->drawCircle(controlPts[i].fX, controlPts[i].fY, 6.f, ctrlPtPaint);
                 }
 
@@ -196,8 +197,13 @@
                     GrPaint grPaint;
                     grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc));
 
+                    SkScalar sign = 1.0f;
+                    if (c == loopIndex && cnt != 3) {
+                        sign = -1.0f;
+                    }
+
                     std::unique_ptr<GrMeshDrawOp> op =
-                            BezierCubicOrConicTestOp::Make(gp, bounds, color, klmEqs, klmSigns[c]);
+                            BezierCubicOrConicTestOp::Make(gp, bounds, color, klmEqs, sign);
 
                     renderTargetContext->priv().testingOnly_addMeshDrawOp(
                             std::move(grPaint), GrAAType::kNone, std::move(op));