WebGL textures + control-flow on the GPU
The WebGL-on-GPU path grows to the two shapes almost every real shader needs: textures and control flow. A sampler2D uniform now runs on the device - the bound texture is uploaded to a wgpu texture, texture2D() becomes textureSampleLevel against a real texture + sampler bind group, and the wrap and filter modes match the software sampler exactly. And a fragment shader with local variables and a for/while loop (with break and continue) now translates to WGSL and draws on the GPU instead of falling back. Both are readback-proven against the software rasteriser: the textured quad is bit-exact (max_diff=0), and the loop-and-local triangle matches within a single level per channel (only anti-aliased edges differ). It stays an accelerator, never a correctness risk: a shader the translator still cannot express - two or more distinct textures, user-defined functions, an uninitialised local, a non-bool condition - declines to the proven software path, so nothing renders wrong. The GPU aspect moves 48 to 49. The overall holds at 57.