In principle this seems fine, but from this MR on its own it's not obvious to me that this is worth it; the amount of code we're adding for the lowering pass is quite a bit more than what we're removing from the SPIR-V backend. Part of that seems to come from the validation code, which would perhaps more properly be part of vsir_validate_instruction() to begin with. Beyond that though, I imagine part of the motivation is also simplifying the DXIL parser, right? How much does this help there?
I imagine we'll also need some changes to the d3d-asm output in order to distinguish between e.g. ADD on VKD3D_DATA_FLOAT sources and ADD on VKD3D_DATA_DOUBLE sources. That's probably not much of a concern right now (although it does make the post-normalisation trace slightly awkward), but that would change once the DXIL parser starts emitting these.