Most of this looks fine to me, but I have my doubts about 9/9. What the old code calls "immconst_type" *is* the dimension; I don't think that it's meaningfully different, and I think that we should quite possibly be making vsir look more like the hlsl_sm4 layer in this respect—that is, rename "immconst_type" to "dimension" and parse and specify it everywhere.
If we do that, that takes away the impetus for putting it in a table.
I see. If we replace `vkd3d_shader_register.immconst_type` with `vkd3d_shader_register.dimension` and always define it, I think we could drop 8/9 too then.
If we don't, we should probably get the table entries right from the beginning. Most of those entries are marked VEC4, which at least seems surprising.
Well, I made the table so that we replicate the current behavior, which is indeed writing VEC4 often.
Also, marking IMMCONST as 0 isn't great, because 0 is NONE.
Yep, I added a `VKD3D_SM4_DIMENSION_INVALID` in previous versions, but I removed it, I used 0 as a reminder that this was the exception to be handled according to the circumstances.