Rework GrSamplerParams to be more compact and use its own wrap mode enum.

The main change is to make GrSamplerParams smaller by making its enums have byte-sized underlying types. The rest is cosmetic.

Change-Id: Ib71ea50612d24619a85e463826c6b8dfb9b445e3
Reviewed-on: https://skia-review.googlesource.com/43200
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp
index 4eb68c9..64d3b48 100644
--- a/src/shaders/gradients/SkGradientShader.cpp
+++ b/src/shaders/gradients/SkGradientShader.cpp
@@ -1530,12 +1530,16 @@
         key |= kHardStopZeroOneOneKey;
     }
 
-    if (SkShader::TileMode::kClamp_TileMode == e.fTileMode) {
-        key |= kClampTileMode;
-    } else if (SkShader::TileMode::kRepeat_TileMode == e.fTileMode) {
-        key |= kRepeatTileMode;
-    } else {
-        key |= kMirrorTileMode;
+    switch (e.fWrapMode) {
+        case GrSamplerState::WrapMode::kClamp:
+            key |= kClampTileMode;
+            break;
+        case GrSamplerState::WrapMode::kRepeat:
+            key |= kRepeatTileMode;
+            break;
+        case GrSamplerState::WrapMode::kMirrorRepeat:
+            key |= kMirrorTileMode;
+            break;
     }
 
     key |= GrColorSpaceXform::XformKey(e.fColorSpaceXform.get()) << kReservedBits;
@@ -1551,17 +1555,17 @@
                                                           const char* outputColor,
                                                           const char* inputColor) {
     // First, apply tiling rules.
-    switch (ge.fTileMode) {
-    case SkShader::kClamp_TileMode:
-        fragBuilder->codeAppendf("float clamp_t = clamp(%s, 0.0, 1.0);", t);
-        break;
-    case SkShader::kRepeat_TileMode:
-        fragBuilder->codeAppendf("float clamp_t = fract(%s);", t);
-        break;
-    case SkShader::kMirror_TileMode:
-        fragBuilder->codeAppendf("float t_1 = %s - 1.0;", t);
-        fragBuilder->codeAppendf("float clamp_t = abs(t_1 - 2.0 * floor(t_1 * 0.5) - 1.0);");
-        break;
+    switch (ge.fWrapMode) {
+        case GrSamplerState::WrapMode::kClamp:
+            fragBuilder->codeAppendf("float clamp_t = clamp(%s, 0.0, 1.0);", t);
+            break;
+        case GrSamplerState::WrapMode::kRepeat:
+            fragBuilder->codeAppendf("float clamp_t = fract(%s);", t);
+            break;
+        case GrSamplerState::WrapMode::kMirrorRepeat:
+            fragBuilder->codeAppendf("float t_1 = %s - 1.0;", t);
+            fragBuilder->codeAppendf("float clamp_t = abs(t_1 - 2.0 * floor(t_1 * 0.5) - 1.0);");
+            break;
     }
 
     // Calculate the color.
@@ -1589,7 +1593,7 @@
         case kHardStopLeftEdged_ColorType: {
             fragBuilder->codeAppendf("float4 colorTemp = mix(%s[1], %s[2], clamp_t);", colors,
                                      colors);
-            if (SkShader::kClamp_TileMode == ge.fTileMode) {
+            if (GrSamplerState::WrapMode::kClamp == ge.fWrapMode) {
                 fragBuilder->codeAppendf("if (%s < 0.0) {", t);
                 fragBuilder->codeAppendf("    colorTemp = %s[0];", colors);
                 fragBuilder->codeAppendf("}");
@@ -1601,7 +1605,7 @@
         case kHardStopRightEdged_ColorType: {
             fragBuilder->codeAppendf("float4 colorTemp = mix(%s[0], %s[1], clamp_t);", colors,
                                      colors);
-            if (SkShader::kClamp_TileMode == ge.fTileMode) {
+            if (GrSamplerState::WrapMode::kClamp == ge.fWrapMode) {
                 fragBuilder->codeAppendf("if (%s > 1.0) {", t);
                 fragBuilder->codeAppendf("    colorTemp = %s[2];", colors);
                 fragBuilder->codeAppendf("}");
@@ -1705,7 +1709,7 @@
         }
     }
 
-    fTileMode = args.fTileMode;
+    fWrapMode = args.fWrapMode;
 
     switch (fColorType) {
         // The two and three color specializations do not currently support tiling.
@@ -1760,18 +1764,16 @@
 
             // We always filter the gradient table. Each table is one row of a texture, always
             // y-clamp.
-            GrSamplerParams params;
-            params.setFilterMode(GrSamplerParams::kBilerp_FilterMode);
-            params.setTileModeX(args.fTileMode);
+            GrSamplerState samplerState(args.fWrapMode, GrSamplerState::Filter::kBilerp);
 
             fRow = fAtlas->lockRow(bitmap);
             if (-1 != fRow) {
                 fYCoord = fAtlas->getYOffset(fRow)+SK_ScalarHalf*fAtlas->getNormalizedTexelHeight();
                 // This is 1/2 places where auto-normalization is disabled
                 fCoordTransform.reset(*args.fMatrix, fAtlas->asTextureProxyRef().get(), false);
-                fTextureSampler.reset(fAtlas->asTextureProxyRef(), params);
+                fTextureSampler.reset(fAtlas->asTextureProxyRef(), samplerState);
             } else {
-                // In this instance we know the params are:
+                // In this instance we know the samplerState state is:
                 //   clampY, bilerp
                 // and the proxy is:
                 //   exact fit, power of two in both dimensions
@@ -1787,7 +1789,7 @@
                 }
                 // This is 2/2 places where auto-normalization is disabled
                 fCoordTransform.reset(*args.fMatrix, proxy.get(), false);
-                fTextureSampler.reset(std::move(proxy), params);
+                fTextureSampler.reset(std::move(proxy), samplerState);
                 fYCoord = SK_ScalarHalf;
             }
 
@@ -1805,7 +1807,7 @@
         , fColors4f(that.fColors4f)
         , fColorSpaceXform(that.fColorSpaceXform)
         , fPositions(that.fPositions)
-        , fTileMode(that.fTileMode)
+        , fWrapMode(that.fWrapMode)
         , fCoordTransform(that.fCoordTransform)
         , fTextureSampler(that.fTextureSampler)
         , fYCoord(that.fYCoord)
@@ -1832,7 +1834,7 @@
 bool GrGradientEffect::onIsEqual(const GrFragmentProcessor& processor) const {
     const GrGradientEffect& ge = processor.cast<GrGradientEffect>();
 
-    if (fTileMode != ge.fTileMode || fColorType != ge.getColorType()) {
+    if (fWrapMode != ge.fWrapMode || fColorType != ge.getColorType()) {
         return false;
     }
     SkASSERT(this->useAtlas() == ge.useAtlas());