WebGPU loops count right on Macs
A correctness release. On Apple Silicon Macs, a WebGPU shader that added to a buffer inside a loop could lose most of its work: ten passes of v[0] += 1 left 1, not 10. It was the graphics compiler's mistake around a guard our shader translator puts in every loop, and it was there in every release with WebGPU on Macs. The guard is now written in a form the compiler keeps, and all eight test shapes give the same numbers as the reference browser. Page shaders also get a hard stop for endless loops, and canvas drawing spends less time on the CPU.
Loops that keep every pass
The shader translator adds a small guard to each loop so a broken shader cannot spin forever. Next to that guard, the Mac graphics compiler threw away stores to a buffer made inside the loop. We rebuilt the failing shaders by hand in plain Metal until the cause was clear, then changed the guard to a form the compiler cannot reason away. Our own shaders, which we know end, skip the guard on Macs, so canvas and video drawing did not get slower.