This seems largely fine like this, although I do wish it used vkd3d_shader_parser_error()/vkd3d_shader_parser_warning() instead of FIXME in more places.
@@ -1986,10 +1986,17 @@ static bool shader_sm4_read_src_param(struct vkd3d_shader_sm4_parser *priv, cons switch (swizzle_type) { case VKD3D_SM4_SWIZZLE_NONE: - if (shader_sm4_is_scalar_register(&src_param->reg)) - src_param->swizzle = VKD3D_SHADER_SWIZZLE(X, X, X, X); - else - src_param->swizzle = VKD3D_SHADER_NO_SWIZZLE; + assert(!shader_sm4_is_scalar_register(&src_param->reg));
What allows us to make that assertion?