| Index: gm/hardstop_gradients.cpp | 
| diff --git a/gm/hardstop_gradients.cpp b/gm/hardstop_gradients.cpp | 
| index c1baa2f1c652002ae9920092292239a59ece1070..846465ec19d7cde3a34b53024077c90517b75c7f 100644 | 
| --- a/gm/hardstop_gradients.cpp | 
| +++ b/gm/hardstop_gradients.cpp | 
| @@ -14,16 +14,25 @@ | 
| * order to highlight the differences between tile modes, the gradient | 
| * starts and ends at 30 pixel inset from either side of the rectangle. | 
| * | 
| - *                      | Clamp         Repeat          Mirror | 
| - * _____________________|___________________________________________ | 
| - * 2-color              | rect00        rect01          rect02 | 
| - * 3-color              | rect10        rect11          rect12 | 
| - * 5-color hard stop    | rect20        rect21          rect22 | 
| - * 5-color edge case 1  | rect30        rect31          rect32 | 
| - * 5-color edge case 2  | rect40        rect41          rect42 | 
| + *                            | Clamp         Repeat          Mirror | 
| + * ___________________________|___________________________________________ | 
| + * 2-color                    | rect00        rect01          rect02 | 
| + * 3-color even               | rect10        rect11          rect12 | 
| + * 3-color texture            | rect20        rect21          rect22 | 
| + * 5-color hard stop          | rect30        rect31          rect32 | 
| + * 4-color hard stop centered | rect40        rect41          rect42 | 
| + * 3-color hard stop 001      | rect50        rect51          rect52 | 
| + * 3-color hard stop 011      | rect60        rect61          rect62 | 
| * | 
| - * The LAST two t-values in edge case 1 are the same, while the FIRST | 
| - * two t-values in edge case 2 are the same. | 
| + * The first three rows are cases covered by pre-hard-stop code; simple | 
| + * 2-color gradients, 3-color gradients with the middle color centered, | 
| + * and general gradients that are rendered from a texture atlas. | 
| + * | 
| + * The next four rows all deal with hard stop gradients. The fourth row | 
| + * is a generic hard stop gradient, while the three subsequent rows deal | 
| + * with special cases of hard stop gradients; centered hard stop gradients | 
| + * (with t-values 0, 0.5, 0.5, 1), and two edge cases (with t-values | 
| + * 0, 0, 1 and 0, 1, 1). | 
| */ | 
|  | 
| #include "gm.h" | 
| @@ -33,7 +42,7 @@ | 
| const int WIDTH  = 500; | 
| const int HEIGHT = 500; | 
|  | 
| -const int NUM_ROWS = 5; | 
| +const int NUM_ROWS = 7; | 
| const int NUM_COLS = 3; | 
|  | 
| const int CELL_WIDTH  = WIDTH  / NUM_COLS; | 
| @@ -60,9 +69,9 @@ static void shade_rect(SkCanvas* canvas, sk_sp<SkShader> shader, int cellRow, in | 
| static void create_gradient_points(int cellRow, int cellCol, SkPoint points[2]) { | 
| const int X_OFFSET = 30; | 
|  | 
| -    auto x0 = SkIntToScalar(cellCol     * CELL_WIDTH + PAD_WIDTH + X_OFFSET); | 
| -    auto x1 = SkIntToScalar((cellCol+1) * CELL_WIDTH - PAD_WIDTH - X_OFFSET); | 
| -    auto y  = SkIntToScalar(cellRow * CELL_HEIGHT + PAD_HEIGHT + RECT_HEIGHT/2); | 
| +    auto x0 = SkIntToScalar(cellCol     * CELL_WIDTH  + PAD_WIDTH  + X_OFFSET); | 
| +    auto x1 = SkIntToScalar((cellCol+1) * CELL_WIDTH  - PAD_WIDTH  - X_OFFSET); | 
| +    auto y  = SkIntToScalar(cellRow     * CELL_HEIGHT + PAD_HEIGHT + RECT_HEIGHT/2); | 
|  | 
| points[0] = SkPoint::Make(x0, y); | 
| points[1] = SkPoint::Make(x1, y); | 
| @@ -94,27 +103,33 @@ protected: | 
| SK_ColorMAGENTA, | 
| }; | 
|  | 
| -        SkScalar row3[] = {0.00f, 0.25f, 0.50f, 0.50f, 1.00f}; | 
| -        SkScalar row4[] = {0.00f, 0.25f, 0.50f, 1.00f, 1.00f}; | 
| -        SkScalar row5[] = {0.00f, 0.00f, 0.50f, 0.50f, 1.00f}; | 
| +        SkScalar row3[] = {0.00f, 0.25f, 1.00f}; | 
| +        SkScalar row4[] = {0.00f, 0.25f, 0.50f, 0.50f, 1.00f}; | 
| +        SkScalar row5[] = {0.00f, 0.50f, 0.50f, 1.00f}; | 
| +        SkScalar row6[] = {0.00f, 0.00f, 1.00f}; | 
| +        SkScalar row7[] = {0.00f, 1.00f, 1.00f}; | 
|  | 
| -        SkScalar* positions[] = { | 
| +        SkScalar* positions[NUM_ROWS] = { | 
| nullptr, | 
| nullptr, | 
| row3, | 
| row4, | 
| row5, | 
| +            row6, | 
| +            row7, | 
| }; | 
|  | 
| -        int numGradientColors[] = { | 
| +        int numGradientColors[NUM_ROWS] = { | 
| 2, | 
| 3, | 
| +            3, | 
| 5, | 
| -            5, | 
| -            5, | 
| +            4, | 
| +            3, | 
| +            3, | 
| }; | 
|  | 
| -        SkShader::TileMode tilemodes[] = { | 
| +        SkShader::TileMode tilemodes[NUM_COLS] = { | 
| SkShader::kClamp_TileMode, | 
| SkShader::kRepeat_TileMode, | 
| SkShader::kMirror_TileMode, | 
|  |