Another issue is vkd3d-compiler disassembles only the source TPF, not normalised VSIR, but the SPIR-V disassembly contains VSIR line numbers.
I see we indeed set "compiler->location.line" to the current instruction index in spirv_compiler_generate_spirv(), I guess because that code was simply never updated. We should probably use "instruction->location.line" in the call to vkd3d_spirv_build_op_line() in any case, regardless of whether "compiler->location" is accurate or not.