From keltars comment:
Try calculating in normalised device coordinates instead of clip space. E.g.
vec4 clip = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position = vec4(clip.xyz / clip.w + vec3(convertexPix, 0.0), 1.0);
You already said that it "works perfectly" in another comment. I think keltar's general approach is absolutely correct here, but this implementation has some issues, and will not work correctly, at least not in the general case.
The problem is that this does the perspective divide manually in the shader, but the clipping (which is done after the shader) has to be done before the divide. This will especially give you wrong results if you have primitives which are intersecting the near plane, or objects which lie behind the camera (which might now even appear in front of you).
What this also will break is the perspective corrected interpolation.
So it is better to modify the approach to keep the original w as it was and use something like:
vec4 clip = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position = vec4(clip.xyz + vec3(clip.w * convertexPix, 0.0), clip.w);