sksl enum support

Bug: skia:
Change-Id: I4d505b31cf8b59de12bcdbca410aafc085977ba9
Reviewed-on: https://skia-review.googlesource.com/68621
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 485bce3..ba10fdc 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -973,8 +973,7 @@
         // ...and it should have succeeded
         SkASSERT(this->validPMUPMConversionExists());
 
-        return GrConfigConversionEffect::Make(std::move(fp),
-                                              GrConfigConversionEffect::kToUnpremul_PMConversion);
+        return GrConfigConversionEffect::Make(std::move(fp), PMConversion::kToUnpremul);
     } else {
         // For everything else (sRGB, half-float, etc...), it doesn't make sense to try and
         // explicitly round the results. Just do the obvious, naive thing in the shader.
@@ -992,8 +991,7 @@
         // ...and it should have succeeded
         SkASSERT(this->validPMUPMConversionExists());
 
-        return GrConfigConversionEffect::Make(std::move(fp),
-                                              GrConfigConversionEffect::kToPremul_PMConversion);
+        return GrConfigConversionEffect::Make(std::move(fp), PMConversion::kToPremul);
     } else {
         // For everything else (sRGB, half-float, etc...), it doesn't make sense to try and
         // explicitly round the results. Just do the obvious, naive thing in the shader.
diff --git a/src/gpu/effects/GrArithmeticFP.cpp b/src/gpu/effects/GrArithmeticFP.cpp
index 1c47732..41de643 100644
--- a/src/gpu/effects/GrArithmeticFP.cpp
+++ b/src/gpu/effects/GrArithmeticFP.cpp
@@ -76,7 +76,7 @@
 }
 void GrArithmeticFP::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                            GrProcessorKeyBuilder* b) const {
-    b->add32(fEnforcePMColor);
+    b->add32((int32_t)fEnforcePMColor);
 }
 bool GrArithmeticFP::onIsEqual(const GrFragmentProcessor& other) const {
     const GrArithmeticFP& that = other.cast<GrArithmeticFP>();
diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
index 80e2d37..6dfb6c5 100644
--- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
+++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.cpp
@@ -31,7 +31,8 @@
                 "0.017999999999999999);\n        break;\n    case 1:\n        factor = "
                 "half(smoothstep(1.0, 0.0, float(factor)));\n        break;\n}\n%s = "
                 "half4(factor);\n",
-                args.fInputColor ? args.fInputColor : "half4(1)", _outer.mode(), args.fOutputColor);
+                args.fInputColor ? args.fInputColor : "half4(1)", (int)_outer.mode(),
+                args.fOutputColor);
     }
 
 private:
@@ -43,7 +44,7 @@
 }
 void GrBlurredEdgeFragmentProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                                            GrProcessorKeyBuilder* b) const {
-    b->add32(fMode);
+    b->add32((int32_t)fMode);
 }
 bool GrBlurredEdgeFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const {
     const GrBlurredEdgeFragmentProcessor& that = other.cast<GrBlurredEdgeFragmentProcessor>();
diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp
index fe5ffd5..14b29e6 100644
--- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp
+++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp
@@ -5,22 +5,20 @@
  * found in the LICENSE file.
  */
 
-@class {
-    enum Mode {
-        kGaussian_Mode = 0,
-        kSmoothStep_Mode = 1
-    };
-}
+enum class Mode {
+    kGaussian   = 0,
+    kSmoothStep = 1
+};
 
-layout(key) in int mode;
+layout(key) in Mode mode;
 
 void main() {
     half factor = 1.0 - sk_InColor.a;
     @switch (mode) {
-        case 0: // kGaussian_Mode
+        case Mode::kGaussian:
             factor = exp(-factor * factor * 4.0) - 0.018;
             break;
-        case 1: // kSmoothstep_Mode
+        case Mode::kSmoothStep:
             factor = smoothstep(1.0, 0.0, factor);
             break;
     }
diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h
index 0cd9a8e..ff9f047 100644
--- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h
+++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.h
@@ -16,9 +16,9 @@
 #include "GrCoordTransform.h"
 class GrBlurredEdgeFragmentProcessor : public GrFragmentProcessor {
 public:
-    enum Mode { kGaussian_Mode = 0, kSmoothStep_Mode = 1 };
-    int mode() const { return fMode; }
-    static std::unique_ptr<GrFragmentProcessor> Make(int mode) {
+    enum class Mode { kSmoothStep = 1, kGaussian = 0 };
+    Mode mode() const { return fMode; }
+    static std::unique_ptr<GrFragmentProcessor> Make(Mode mode) {
         return std::unique_ptr<GrFragmentProcessor>(new GrBlurredEdgeFragmentProcessor(mode));
     }
     GrBlurredEdgeFragmentProcessor(const GrBlurredEdgeFragmentProcessor& src);
@@ -26,14 +26,14 @@
     const char* name() const override { return "BlurredEdgeFragmentProcessor"; }
 
 private:
-    GrBlurredEdgeFragmentProcessor(int mode)
+    GrBlurredEdgeFragmentProcessor(Mode mode)
             : INHERITED(kGrBlurredEdgeFragmentProcessor_ClassID, kNone_OptimizationFlags)
             , fMode(mode) {}
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
     bool onIsEqual(const GrFragmentProcessor&) const override;
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
-    int fMode;
+    Mode fMode;
     typedef GrFragmentProcessor INHERITED;
 };
 #endif
diff --git a/src/gpu/effects/GrCircleEffect.cpp b/src/gpu/effects/GrCircleEffect.cpp
index eccf8bf..d3eecb7 100644
--- a/src/gpu/effects/GrCircleEffect.cpp
+++ b/src/gpu/effects/GrCircleEffect.cpp
@@ -38,14 +38,14 @@
                 "%s.w))) * float(%s.z));\n}\n@if ((%d == 1 || %d == 3) || %d == 4) {\n    d = "
                 "half(clamp(float(d), 0.0, 1.0));\n} else {\n    d = half(float(d) > 0.5 ? 1.0 : "
                 "0.0);\n}\n%s = %s * d;\n",
-                prevRadius, _outer.edgeType(), _outer.edgeType(),
+                prevRadius, (int)_outer.edgeType(), (int)_outer.edgeType(),
                 args.fUniformHandler->getUniformCStr(fCircleVar),
                 args.fUniformHandler->getUniformCStr(fCircleVar),
                 args.fUniformHandler->getUniformCStr(fCircleVar),
                 args.fUniformHandler->getUniformCStr(fCircleVar),
                 args.fUniformHandler->getUniformCStr(fCircleVar),
-                args.fUniformHandler->getUniformCStr(fCircleVar), _outer.edgeType(),
-                _outer.edgeType(), _outer.edgeType(), args.fOutputColor,
+                args.fUniformHandler->getUniformCStr(fCircleVar), (int)_outer.edgeType(),
+                (int)_outer.edgeType(), (int)_outer.edgeType(), args.fOutputColor,
                 args.fInputColor ? args.fInputColor : "half4(1)");
     }
 
@@ -84,7 +84,7 @@
 }
 void GrCircleEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                            GrProcessorKeyBuilder* b) const {
-    b->add32(fEdgeType);
+    b->add32((int32_t)fEdgeType);
 }
 bool GrCircleEffect::onIsEqual(const GrFragmentProcessor& other) const {
     const GrCircleEffect& that = other.cast<GrCircleEffect>();
@@ -113,7 +113,7 @@
     do {
         et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt);
     } while (GrClipEdgeType::kHairlineAA == et);
-    return GrCircleEffect::Make((int)et, center, radius);
+    return GrCircleEffect::Make(et, center, radius);
 }
 #endif
 #endif
diff --git a/src/gpu/effects/GrCircleEffect.fp b/src/gpu/effects/GrCircleEffect.fp
index 95cbeb0..fe959f8 100644
--- a/src/gpu/effects/GrCircleEffect.fp
+++ b/src/gpu/effects/GrCircleEffect.fp
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-layout(key) in int edgeType;
+layout(key) in GrClipEdgeType edgeType;
 in half2 center;
 in half radius;
 
@@ -37,15 +37,15 @@
     // radius and then denormalized. This is to prevent overflow on devices that have a "real"
     // mediump. It'd be nice to only do this on mediump devices.
     half d;
-    @if (edgeType == 2 /* GrClipEdgeType::kInverseFillBW */ ||
-         edgeType == 3 /* GrClipEdgeType::kInverseFillAA */) {
+    @if (edgeType == GrClipEdgeType::kInverseFillBW ||
+         edgeType == GrClipEdgeType::kInverseFillAA) {
         d = (length((circle.xy - sk_FragCoord.xy) * circle.w) - 1.0) * circle.z;
     } else {
         d = (1.0 - length((circle.xy - sk_FragCoord.xy) *  circle.w)) * circle.z;
     }
-    @if (edgeType == 1 /* GrClipEdgeType::kFillAA */ ||
-         edgeType == 3 /* GrClipEdgeType::kInverseFillAA */ ||
-         edgeType == 4 /* GrClipEdgeType::kHairlineAA */) {
+    @if (edgeType == GrClipEdgeType::kFillAA ||
+         edgeType == GrClipEdgeType::kInverseFillAA ||
+         edgeType == GrClipEdgeType::kHairlineAA) {
         d = clamp(d, 0.0, 1.0);
     } else {
         d = d > 0.5 ? 1.0 : 0.0;
@@ -63,5 +63,5 @@
     do {
         et = (GrClipEdgeType) testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt);
     } while (GrClipEdgeType::kHairlineAA == et);
-    return GrCircleEffect::Make((int) et, center, radius);
+    return GrCircleEffect::Make(et, center, radius);
 }
\ No newline at end of file
diff --git a/src/gpu/effects/GrCircleEffect.h b/src/gpu/effects/GrCircleEffect.h
index c088fd5..bf6bd0e 100644
--- a/src/gpu/effects/GrCircleEffect.h
+++ b/src/gpu/effects/GrCircleEffect.h
@@ -16,10 +16,11 @@
 #include "GrCoordTransform.h"
 class GrCircleEffect : public GrFragmentProcessor {
 public:
-    int edgeType() const { return fEdgeType; }
+    GrClipEdgeType edgeType() const { return fEdgeType; }
     SkPoint center() const { return fCenter; }
     float radius() const { return fRadius; }
-    static std::unique_ptr<GrFragmentProcessor> Make(int edgeType, SkPoint center, float radius) {
+    static std::unique_ptr<GrFragmentProcessor> Make(GrClipEdgeType edgeType, SkPoint center,
+                                                     float radius) {
         return std::unique_ptr<GrFragmentProcessor>(new GrCircleEffect(edgeType, center, radius));
     }
     GrCircleEffect(const GrCircleEffect& src);
@@ -27,7 +28,7 @@
     const char* name() const override { return "CircleEffect"; }
 
 private:
-    GrCircleEffect(int edgeType, SkPoint center, float radius)
+    GrCircleEffect(GrClipEdgeType edgeType, SkPoint center, float radius)
             : INHERITED(kGrCircleEffect_ClassID,
                         (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag)
             , fEdgeType(edgeType)
@@ -37,7 +38,7 @@
     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
     bool onIsEqual(const GrFragmentProcessor&) const override;
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
-    int fEdgeType;
+    GrClipEdgeType fEdgeType;
     SkPoint fCenter;
     float fRadius;
     typedef GrFragmentProcessor INHERITED;
diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp
index d32cb1d..9887cac 100644
--- a/src/gpu/effects/GrConfigConversionEffect.cpp
+++ b/src/gpu/effects/GrConfigConversionEffect.cpp
@@ -33,7 +33,7 @@
                 "? half3(0.0) : half3(floor(float3(float3((%s.xyz / %s.w) * 255.0) + 0.5)) / "
                 "255.0);\n        break;\n}\n",
                 args.fOutputColor, args.fInputColor ? args.fInputColor : "half4(1)",
-                _outer.pmConversion(), args.fOutputColor, args.fOutputColor, args.fOutputColor,
+                (int)_outer.pmConversion(), args.fOutputColor, args.fOutputColor, args.fOutputColor,
                 args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor);
     }
 
@@ -46,7 +46,7 @@
 }
 void GrConfigConversionEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                                      GrProcessorKeyBuilder* b) const {
-    b->add32(fPmConversion);
+    b->add32((int32_t)fPmConversion);
 }
 bool GrConfigConversionEffect::onIsEqual(const GrFragmentProcessor& other) const {
     const GrConfigConversionEffect& that = other.cast<GrConfigConversionEffect>();
@@ -64,7 +64,8 @@
 #if GR_TEST_UTILS
 std::unique_ptr<GrFragmentProcessor> GrConfigConversionEffect::TestCreate(
         GrProcessorTestData* data) {
-    PMConversion pmConv = static_cast<PMConversion>(data->fRandom->nextULessThan(kPMConversionCnt));
+    PMConversion pmConv = static_cast<PMConversion>(
+            data->fRandom->nextULessThan((int)PMConversion::kPMConversionCnt));
     return std::unique_ptr<GrFragmentProcessor>(new GrConfigConversionEffect(pmConv));
 }
 #endif
diff --git a/src/gpu/effects/GrConfigConversionEffect.fp b/src/gpu/effects/GrConfigConversionEffect.fp
index 4c09bf4..62b998d 100644
--- a/src/gpu/effects/GrConfigConversionEffect.fp
+++ b/src/gpu/effects/GrConfigConversionEffect.fp
@@ -5,12 +5,6 @@
 }
 
 @class {
-    enum PMConversion {
-        kToPremul_PMConversion   = 0,
-        kToUnpremul_PMConversion = 1,
-        kPMConversionCnt         = 2
-    };
-
     static bool TestForPreservingPMConversions(GrContext* context) {
         static constexpr int kSize = 256;
         static constexpr GrPixelConfig kConfig = kRGBA_8888_GrPixelConfig;
@@ -69,9 +63,9 @@
         GrPaint paint2;
         GrPaint paint3;
         std::unique_ptr<GrFragmentProcessor> pmToUPM(
-                new GrConfigConversionEffect(kToUnpremul_PMConversion));
+                new GrConfigConversionEffect(PMConversion::kToUnpremul));
         std::unique_ptr<GrFragmentProcessor> upmToPM(
-                new GrConfigConversionEffect(kToPremul_PMConversion));
+                new GrConfigConversionEffect(PMConversion::kToPremul));
 
         paint1.addColorTextureProcessor(dataProxy, SkMatrix::I());
         paint1.addColorFragmentProcessor(pmToUPM->clone());
@@ -125,7 +119,7 @@
     }
 }
 
-layout(key) in int pmConversion;
+layout(key) in PMConversion pmConversion;
 
 @emitCode {
     fragBuilder->forceHighPrecision();
@@ -137,11 +131,11 @@
     sk_OutColor = floor(sk_InColor * 255 + 0.5) / 255;
 
     @switch (pmConversion) {
-        case 0 /* kToPremul_PMConversion */:
+        case PMConversion::kToPremul:
             sk_OutColor.rgb = floor(sk_OutColor.rgb * sk_OutColor.a * 255 + 0.5) / 255;
             break;
 
-        case 1 /* kToUnpremul_PMConversion */:
+        case PMConversion::kToUnpremul:
             sk_OutColor.rgb = sk_OutColor.a <= 0.0 ?
                                           half3(0) :
                                           floor(sk_OutColor.rgb / sk_OutColor.a * 255 + 0.5) / 255;
@@ -150,6 +144,7 @@
 }
 
 @test(data) {
-    PMConversion pmConv = static_cast<PMConversion>(data->fRandom->nextULessThan(kPMConversionCnt));
+    PMConversion pmConv = static_cast<PMConversion>(data->fRandom->nextULessThan(
+                                                             (int) PMConversion::kPMConversionCnt));
     return std::unique_ptr<GrFragmentProcessor>(new GrConfigConversionEffect(pmConv));
 }
diff --git a/src/gpu/effects/GrConfigConversionEffect.h b/src/gpu/effects/GrConfigConversionEffect.h
index cffd5a6..cc02473 100644
--- a/src/gpu/effects/GrConfigConversionEffect.h
+++ b/src/gpu/effects/GrConfigConversionEffect.h
@@ -20,12 +20,6 @@
 #include "GrCoordTransform.h"
 class GrConfigConversionEffect : public GrFragmentProcessor {
 public:
-    enum PMConversion {
-        kToPremul_PMConversion = 0,
-        kToUnpremul_PMConversion = 1,
-        kPMConversionCnt = 2
-    };
-
     static bool TestForPreservingPMConversions(GrContext* context) {
         static constexpr int kSize = 256;
         static constexpr GrPixelConfig kConfig = kRGBA_8888_GrPixelConfig;
@@ -79,9 +73,9 @@
         GrPaint paint2;
         GrPaint paint3;
         std::unique_ptr<GrFragmentProcessor> pmToUPM(
-                new GrConfigConversionEffect(kToUnpremul_PMConversion));
+                new GrConfigConversionEffect(PMConversion::kToUnpremul));
         std::unique_ptr<GrFragmentProcessor> upmToPM(
-                new GrConfigConversionEffect(kToPremul_PMConversion));
+                new GrConfigConversionEffect(PMConversion::kToPremul));
 
         paint1.addColorTextureProcessor(dataProxy, SkMatrix::I());
         paint1.addColorFragmentProcessor(pmToUPM->clone());
@@ -121,7 +115,7 @@
 
         return true;
     }
-    int pmConversion() const { return fPmConversion; }
+    PMConversion pmConversion() const { return fPmConversion; }
 
     static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> fp,
                                                      PMConversion pmConversion) {
@@ -137,14 +131,14 @@
     const char* name() const override { return "ConfigConversionEffect"; }
 
 private:
-    GrConfigConversionEffect(int pmConversion)
+    GrConfigConversionEffect(PMConversion pmConversion)
             : INHERITED(kGrConfigConversionEffect_ClassID, kNone_OptimizationFlags)
             , fPmConversion(pmConversion) {}
     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
     bool onIsEqual(const GrFragmentProcessor&) const override;
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
-    int fPmConversion;
+    PMConversion fPmConversion;
     typedef GrFragmentProcessor INHERITED;
 };
 #endif
diff --git a/src/gpu/effects/GrDitherEffect.cpp b/src/gpu/effects/GrDitherEffect.cpp
index 78d5591..d3fdc4f 100644
--- a/src/gpu/effects/GrDitherEffect.cpp
+++ b/src/gpu/effects/GrDitherEffect.cpp
@@ -53,7 +53,7 @@
 }
 void GrDitherEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                            GrProcessorKeyBuilder* b) const {
-    b->add32(fRangeType);
+    b->add32((int32_t)fRangeType);
 }
 bool GrDitherEffect::onIsEqual(const GrFragmentProcessor& other) const {
     const GrDitherEffect& that = other.cast<GrDitherEffect>();
diff --git a/src/gpu/effects/GrEllipseEffect.cpp b/src/gpu/effects/GrEllipseEffect.cpp
index 20afa93..4a0f376 100644
--- a/src/gpu/effects/GrEllipseEffect.cpp
+++ b/src/gpu/effects/GrEllipseEffect.cpp
@@ -49,7 +49,7 @@
                 fScaleVar.isValid() ? args.fUniformHandler->getUniformCStr(fScaleVar) : "half2(0)",
                 args.fUniformHandler->getUniformCStr(fEllipseVar),
                 fScaleVar.isValid() ? args.fUniformHandler->getUniformCStr(fScaleVar) : "half2(0)",
-                _outer.edgeType());
+                (int)_outer.edgeType());
         fragBuilder->codeAppendf(
                 "0);\n        break;\n    case 1:\n        alpha = half(clamp(0.5 - "
                 "float(approx_dist), 0.0, 1.0));\n        break;\n    case 2:\n        alpha = "
@@ -110,7 +110,7 @@
 }
 void GrEllipseEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
                                             GrProcessorKeyBuilder* b) const {
-    b->add32(fEdgeType);
+    b->add32((int32_t)fEdgeType);
 }
 bool GrEllipseEffect::onIsEqual(const GrFragmentProcessor& other) const {
     const GrEllipseEffect& that = other.cast<GrEllipseEffect>();
@@ -140,7 +140,7 @@
     do {
         et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt);
     } while (GrClipEdgeType::kHairlineAA == et);
-    return GrEllipseEffect::Make((int)et, center, SkPoint::Make(rx, ry));
+    return GrEllipseEffect::Make(et, center, SkPoint::Make(rx, ry));
 }
 #endif
 #endif
diff --git a/src/gpu/effects/GrEllipseEffect.fp b/src/gpu/effects/GrEllipseEffect.fp
index f3feae1..54641b7 100644
--- a/src/gpu/effects/GrEllipseEffect.fp
+++ b/src/gpu/effects/GrEllipseEffect.fp
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-layout(key) in int edgeType;
+layout(key) in GrClipEdgeType edgeType;
 in half2 center;
 in half2 radii;
 
@@ -72,16 +72,16 @@
 
     half alpha;
     @switch (edgeType) {
-        case 0 /* GrClipEdgeType::kFillBW */:
+        case GrClipEdgeType::kFillBW:
             alpha = approx_dist > 0.0 ? 0.0 : 1.0;
             break;
-        case 1 /* GrClipEdgeType::kFillAA */:
+        case GrClipEdgeType::kFillAA:
             alpha = clamp(0.5 - approx_dist, 0.0, 1.0);
             break;
-        case 2 /* GrClipEdgeType::kInverseFillBW */:
+        case GrClipEdgeType::kInverseFillBW:
             alpha = approx_dist > 0.0 ? 1.0 : 0.0;
             break;
-        case 3 /* GrClipEdgeType::kInverseFillAA */:
+        case GrClipEdgeType::kInverseFillAA:
             alpha = clamp(0.5 + approx_dist, 0.0, 1.0);
             break;
         default:
@@ -101,5 +101,5 @@
     do {
         et = (GrClipEdgeType) testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt);
     } while (GrClipEdgeType::kHairlineAA == et);
-    return GrEllipseEffect::Make((int) et, center, SkPoint::Make(rx, ry));
+    return GrEllipseEffect::Make(et, center, SkPoint::Make(rx, ry));
 }
\ No newline at end of file
diff --git a/src/gpu/effects/GrEllipseEffect.h b/src/gpu/effects/GrEllipseEffect.h
index 97d7607..8769295 100644
--- a/src/gpu/effects/GrEllipseEffect.h
+++ b/src/gpu/effects/GrEllipseEffect.h
@@ -16,10 +16,11 @@
 #include "GrCoordTransform.h"
 class GrEllipseEffect : public GrFragmentProcessor {
 public:
-    int edgeType() const { return fEdgeType; }
+    GrClipEdgeType edgeType() const { return fEdgeType; }
     SkPoint center() const { return fCenter; }
     SkPoint radii() const { return fRadii; }
-    static std::unique_ptr<GrFragmentProcessor> Make(int edgeType, SkPoint center, SkPoint radii) {
+    static std::unique_ptr<GrFragmentProcessor> Make(GrClipEdgeType edgeType, SkPoint center,
+                                                     SkPoint radii) {
         return std::unique_ptr<GrFragmentProcessor>(new GrEllipseEffect(edgeType, center, radii));
     }
     GrEllipseEffect(const GrEllipseEffect& src);
@@ -27,7 +28,7 @@
     const char* name() const override { return "EllipseEffect"; }
 
 private:
-    GrEllipseEffect(int edgeType, SkPoint center, SkPoint radii)
+    GrEllipseEffect(GrClipEdgeType edgeType, SkPoint center, SkPoint radii)
             : INHERITED(kGrEllipseEffect_ClassID,
                         (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag)
             , fEdgeType(edgeType)
@@ -37,7 +38,7 @@
     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
     bool onIsEqual(const GrFragmentProcessor&) const override;
     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
-    int fEdgeType;
+    GrClipEdgeType fEdgeType;
     SkPoint fCenter;
     SkPoint fRadii;
     typedef GrFragmentProcessor INHERITED;
diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp
index 60ea9df..0c0f3bd 100644
--- a/src/gpu/effects/GrOvalEffect.cpp
+++ b/src/gpu/effects/GrOvalEffect.cpp
@@ -20,12 +20,12 @@
     SkScalar h = oval.height();
     if (SkScalarNearlyEqual(w, h)) {
         w /= 2;
-        return GrCircleEffect::Make((int) edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + w),
+        return GrCircleEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + w),
                                     w);
     } else {
         w /= 2;
         h /= 2;
-        return GrEllipseEffect::Make((int) edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + h),
+        return GrEllipseEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + h),
                                      SkPoint::Make(w, h));
     }