matching the OpenGL backend's algorithm. The blit cascade was a much weaker
filter that degenerated badly on thin surfaces.
The new path adds blur.vert / blur_down.frag (5-tap) / blur_up.frag (8-tap),
a single-binding blur descriptor set layout, and per-format down/up pipelines.
BLUR_SCRATCH_USAGE gains COLOR_ATTACHMENT so the scratch images can be both
sampled and rendered into. Cache hit fast path and masked composite are
unchanged.