D133 - The subgroup level is blocked on hardware, not on effort
Status: assumed
Fidelity::Subgroup stays a stub, and the reason is now
measured rather than assumed.
It materialises the guest's execution mask with a subgroup ballot, which is correct only when the hardware's subgroup is as wide as the guest's wavefront - sixty-four lanes. Neither device this project can reach is:
| Device | Subgroup size |
|---|---|
| RTX 5070 Ti | 32 |
| lavapipe (software, in the build VM) | 8 |
So the level cannot execute here at all, and the differential oracle that would verify it does not exist on this hardware: comparing it against the wavefront model on the same shader needs both halves to run, and one of them would be refused.
Building it anyway would produce a model checked by
spirv-val and nothing else - structurally valid SPIR-V that
has never executed - in a subsystem where every other component is
verified against a real device. That is the shape of output this project
refuses everywhere else, and it does not become acceptable because the
instruction set is interesting.
What would unblock it: any AMD GCN part, or an RDNA
part in its sixty-four-wide mode.
cargo run --example subgroup-size -p orbistoun-gpu-vulkan
answers the question on any machine in about a second.
A design question this raises, deliberately not decided here. Most hardware is thirty-two wide - NVIDIA always, RDNA usually - so a level that requires sixty-four is of limited use even once it can be tested. A variant where each invocation carries two lanes, taking two ballots to assemble the sixty-four-bit mask, would run on the hardware that actually exists and would therefore have an oracle. That is a different model from the one D098 describes, and inventing a fidelity level unprompted is the kind of concept that warrants asking rather than assuming.
The correction worth recording: the roadmap called this the last item with a real oracle and no dependency. That was wrong, and it was wrong in the direction that matters - it would have led to building the one thing here that could not be checked. The check that caught it took one example and under a minute, and it was run because the claim was load-bearing rather than because anything looked suspect.