Execute UnityObjectToClipPos() once in surface shader?

You can use a “vertex:” function in surface shader.

If you use UnityObjectToClipPos() in this vertex function, the generated vs/fs will execute UnityObjectToClipPos() another time.

See example:

Custom Fog with Final Color Modifier

I’ve just converted a regular vertex/fragment shader into a surface shader and ran into this problem.
It seems that Unity does this for you after your custom vertex program has been executed, so you don’t have to take care of data transformations for the next stage. It also seems that in the context of surface shaders they wouldn’t even call it “vertex program/shader” but “vertex modifier”.

Any updates on this? Didn’t get what should this “fog example” illustrate, but the issue itself is still actual. I’m also converting vertex shader to surface shader and I need UnityObjectToClipPos to execute before my other logic in custom vertex function