This turns out to be quite messy and results from FXC weirdness. I ran into a new problem with the test: `dcl_indexrange` exceeds its required bounds and sweeps up `SV_Position` into the array. The patch for this may be too hacky for upstream, since it's not known to occur in the wild. In the test I tried to avoid it by using `SV_Position` only in the DS and PS, but it failed to render. I changed `struct data` to `struct ds_data` and declared a new `struct data` containing `POSITION` instead, and had `ds_main` output a `ds_data`, and `ps_main` receive one. I don't know why that would be a problem so maybe I misunderstand how this should work.