Bind-group entry exposing buffer's bytes as an array<vec4<f32>> view —
the twin binding that lets a shader issue 16-byte vector loads alongside
scalar access of the same storage (bind the same GPUBuffer twice: once as
array<f32>, once through this). The view's size is rounded down to a
multiple of 16 because some backends reject non-multiple-of-16 ranges for
vec4 arrays; whenever a kernel's vector path is usable (stride % 4 == 0)
the buffer size is itself a multiple of 16, so the rounding never truncates
a component the vector path would actually read. Buffers smaller than one
vec4 element get a shared dummy storage buffer bound instead — the shader
never dereferences it on those shapes.
Bind-group entry exposing
buffer's bytes as anarray<vec4<f32>>view — the twin binding that lets a shader issue 16-byte vector loads alongside scalar access of the same storage (bind the same GPUBuffer twice: once asarray<f32>, once through this). The view's size is rounded down to a multiple of 16 because some backends reject non-multiple-of-16 ranges for vec4 arrays; whenever a kernel's vector path is usable (stride % 4 == 0) the buffer size is itself a multiple of 16, so the rounding never truncates a component the vector path would actually read. Buffers smaller than one vec4 element get a shared dummy storage buffer bound instead — the shader never dereferences it on those shapes.