gpu: Fix shadows some more
It turns out the "step" variable could up as 0 when p.y ~= 3.0 || p.y ~= r.y - 3.0 That was not enough to trigger it though because if "start" and "end" were the same value, the "y <= end" check in the loop would immediately terminate it.
However, if start + epsilon == end so that end != start but (end - start) / 7 == 0, then step would end up as 0 and the loop would never terminate.
And if that happened, it would bring down GPUs. So recode this whole machinery to make it impossible to infloop.
Fixes #6896 (closed)