For the record, before the patch, with the native dissasembler `fxc -dumpbin`, I was getting:
sample_l r0.xyzw, r0.xyxx, t0.xyzw, s0, r0.zzzz
and I see that our dissasembler shows the last bit as `r0.z`. So there is a discrepancy there.
That's mostly a consequence of sm1/d3dbc not having a distinction between VKD3D_SM4_SWIZZLE_SCALAR/VKD3D_SM4_SWIZZLE_VEC4; "r0.z" and "r0.zzzz" are equivalent there. See also shader_sm4_read_src_param() and shader_dump_src_param(). We should probably fix that, although there would be consequences for e.g. the SPIR-V backend as well.