It depends, there are multiple methods to this, yes, you can have a complicated vertex shader, but you could also simulate buoyancy with raycasts using a plane with a water shader and if you use enough raycasts on your mesh this can work quite well without the need for any expensive mesh manipulation.
Confirmed this works by the way when I tried it out.