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.
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. Also, marking IMMCONST as 0 isn't great, because 0 is NONE.
Leaving that last patch it off the series for now may be prudent.