The point is that any callers of hlsl_type_get_regset() either don't need to handle structs, or need to do something special to handle structs. In the case of sm1 "something special" might mean "assuming they're always numeric", but that's still something we want to spell out explicitly. HLSL_REGSET_VOID should never actually be interpreted, and as a corollary shouldn't exist.
Okay, I made `hlsl_type_get_regset()` throw `vkd3d_unreachable()` for types for which calling this function doesn't make sense (structs, and for now, arrays), and removed `HLSL_TYPE_VOID`.
I added `hlsl_type_is_resource()` which returns true for textures, samplers, and UAVs (and in the future arrays of these). I realized that in almost all cases it makes sense to call this function, before calling `hlsl_type_get_regset()`, to handle these special cases.
hlsl_type_calculate_reg_size() really just shouldn't exist, at least not in its current form. We should never care about the register size of a variable that has any of those types. I think we eventually want to stop stashing reg_size in the type itself and just make hlsl_type_calculate_reg_size() a pure function. Probably it should just duplicate hlsl_type_get_regset() for now.
I realized that `hlsl_type_calculate_reg_size()` was just another case where it made sense to call `hlsl_type_is_resource()`, so I did that.