Why is there frame stutter often with Vsync on?

himmatsj

Reputable
Feb 23, 2014
162
0
4,690
Ok, so without Vsync, I play Bioshock Infinite at roughly 85fps (mixture of med and high graphics settings). The lowest possible is 75 while the highest run into 110fps.

However, when locked to 60fps via Vsync, every once in a while I face stutter. Most of the time it drops to 56 or 57fps for a second or so. And other times it even drops to 30 something fps before regaining the 60fps.

So my question is...if w/o Vsync I can easily stay above 60fps at all times (worst possible being 75fps), why with Vsync on it sometimes stutters?

Is this normal? Should I live with it? Usually happens with extreme mouse movement or loading of new area (but again w/o vsync for both cases it never drops below 75fps).
 

himmatsj

Reputable
Feb 23, 2014
162
0
4,690
The more I'm playing Bioshock, the more frustrating this is. When I look at an exact spot from the same frame (leave my mouse untouched), it shows 30fps. Even after 10 seconds (I thought maybe the textures are loading).

However, the moment, I remove vsync w/o moving my mouse, at that same frame I get 65, 72, 75fps. Then when I turn back Vsync on it is 60fps.

And when I run the framerates are again inconsistent.

W/o vsync I never touch 60 let alone go below it so yeah very frustrating.

Two reasons I have to leave vsync on:
1) Don't wanna make my GPU load be 99% (with no vsync your GPU doesn't know when to stop working)
2) Screen tearing
 

Vsync isn't a free operation. It introduces an additional memory buffer, and an additional screen copy. Vastly oversimplifying:

no vsync:
GPU -> screenbuffer -> monitor

vsync:
GPU -> screenbuffer1 -> screenbuffer2 -> monitor

In the no vsync case, the GPU is just constantly drawing to the same screenbuffer. When the monitor refreshes, it grabs the image in buffer. This usually happens while the GPU is drawing to some place in the middle of the screenbuffer, so you get tearing.

In the vsync case, the GPU writes to the first screenbuffer. When the first screenbuffer is completed, it is copied to the second screenbuffer. When the monitor refreshes, it grabs the image in the second screenbuffer.

So there's some additional overhead involved with vsync which will slightly lower your framerate. Most importantly, if your framerate drops below 60 fps and your monitor is 60 Hz, screenbuffer2 doesn't get a new picture before the monitor grabs the image from it. So you see the same picture for two frames, which is 30 fps.

And how visible screen tearing is depends on the person. Some of us are very sensitive to it. It's pretty obvious to me (I can see old-style fluorescent lights flicker too).
 

himmatsj

Reputable
Feb 23, 2014
162
0
4,690


Thanks. That makes sense. I guess even a low of 70fps without Vsync is not a good enough margin. Perhaps I need the lowest to be 80fps for there to be enough of a buffer zone for Vsync to work smoothly at 60fps at all times?

Thanks for the rather simple explanation mate!

Edit: Does anyone know what is the % increase in performance with Vsync enabled? Also, how do you play your high-end 3D games?