A named pool of bind group layouts shared across materials/compute passes — register a
layout once (e.g. a camera’s, under "camera") as soon as it exists, then anywhere a
material/compute wants it, pull it with get and wrap it in
GroupEntry::Layout at whatever position that material/compute’s shader declares it.
One @group(N) slot in a material/compute pipeline layout — position in the
Material::entries/
Compute::entries list is its @group(N) index, so
there’s no separate group number to keep in sync with the shader by hand: the first element
occupies @group(0), the second @group(1), and so on.