position_vs.xy = (screencoord.xy * screensize_ws.wx) * (far_ws*depth/near_ws);
screensize_ws.wx? Did you mean xy?
What range is screencoord supposed to be in? DX gives it as the actual on screen pixel coordinate. In my case screencoord.xy = x = 536.500000000, y = 308.500000000. position_vs is coming out to a huge number after the multiplication.