I'm not opposed in principle to migrating to `vkd3d_shader_instruction`, though I haven't considered precisely how much work it is. Surely reusing structures instead of defining a new variant has some value. OTOH, in this case we need much less than the whole `vkd3d_shader_register` structure. Currently I think we either use one constant register, or one constant and one dynamic register. Unless we already anticipate needing more, we could just design our structures around this.
I think the main value in using the vkd3d_shader_instruction structures is that it gets us a step closer to having a common low level IR in vkd3d-shader. I.e., allowing us to do HLSL/d3dbc/tpf/dxil/d3d-asm -> vkil -> d3dbc/tpf/dxil/d3d-asm/SPIR-V/GLSL/MSL/AIR in a more straightforward manner. Some of those are more useful than others, but e.g. d3d-asm->d3dbc is something that Wine's d3dx9/d3dcompiler needs, and e.g. HLSL->SPIR-V/GLSL/MSL/AIR is useful for porting Direct3D applications.