Implement 2-pt conical gradient layout

Add an FP that provides the two-point conical gradient effect. The
majority of the new FP's shader code is a straight forward port from
SkTwoPointConicalGradient_gpu.cpp. This FP is bulkier because of the
extensive calculations that go on in its overridden Make function.

To support 2-pt conical gradient's behavior of writing transparent
black in invalid areas of the conical interpolation, the contract of
gradient layout FPs has been updated to provide a flag in the y
component as to whether or not the fragment should be rejected.

A separate channel was used since negative values and large values are
perfectly reasonable for the untiled gradient layout to return (before
the value is then constrained into [0, 1]). It also seemed better to
avoid returning a problematic value like infinity or NaN.

Bug: skia:
Change-Id: I37373bb5aebd89cac8905602e699ad19f0f5ac82
Reviewed-on: https://skia-review.googlesource.com/148988
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/gn/gpu.gni b/gn/gpu.gni
index f2005e5..1ce633b 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -409,6 +409,8 @@
   "$_src/gpu/gradients/GrRadialGradientLayout.h",
   "$_src/gpu/gradients/GrSweepGradientLayout.cpp",
   "$_src/gpu/gradients/GrSweepGradientLayout.h",
+  "$_src/gpu/gradients/GrTwoPointConicalGradientLayout.cpp",
+  "$_src/gpu/gradients/GrTwoPointConicalGradientLayout.h",
   "$_src/gpu/gradients/GrClampedGradientEffect.cpp",
   "$_src/gpu/gradients/GrClampedGradientEffect.h",
   "$_src/gpu/gradients/GrTiledGradientEffect.cpp",