It appears that some drivers implement a "flip queue" such that, even with vsync enabled, the first few calls to swap buffers return immediately (queuing those frames for later use). It is only after this queue is filled that buffer swaps will block to synchronize with vblank.
This behavior is detrimental to my application. It creates latency. Does anyone know of a way to disable it or a workaround for dealing with it?
The OpenGL Wiki on Swap Interval suggests a call to glFinish after the swap but I've had no such luck with that trick.