SkMorphologyImageFilter currently uses a loop in the fragment shader with a number of iterations equal to the radius size (one pass for horizontal, one pass for vertical). This will exceed the loop limits or texture samples of some older GPUs. We should break each pass into multiple subpasses in order to avoid exceeding the loop limits.
In addition to improving compatibility, this kind of divide-and-conquer approach may improve performance (although this should be benchmarked). For example, consider a morphology of radius 4, and assume a limit of 3 texture samples for simplicity.
Current implementation: 9 texture reads, 9 min/max and 1 write.
A two-pass approach would yield:
Pass 1, radius 1 (-1, 0, 1): 3 reads, 3 min/max, 1 write
Pass 2: radius 2 (-3, 0, 3): 3 reads, 3 min/max, 1 write
Total: 6 reads, 6 min/max, 2 writes.