Wrapping It Up
So there you have it. Triple buffering gives you all the benefits of double buffering with no vsync enabled in addition to all the benefits of enabling vsync. We get smooth full frames with no tearing. These frames are swapped to the front buffer only on refresh, but they have just as little input lag as double buffering with no vsync at the start of output to the monitor. Even though "performance" doesn't always get reported right with triple buffering, the graphics hardware is working just as hard as it does with double buffering and no vsync and the end user gets all the benefit with out the potential downside. Triple buffering does take up a handful of extra memory on the graphics hardware, but on modern hardware this is not a significant issue.
Just to recap, from our previous example, here are what the three frames we looked at rendering stack up side by side.
Triple Buffering
Double Buffering
Double Buffering with vsync
We've presented the qualitative argument and the quantitative argument in support of triple buffering. So, now the question is: does this data change things? Are people going to start looking for that triple buffering option more now than without this information? Let's find out.
{poll 135:300}
The major difference in the technique we've described here is the ability to drop frames when they are outdated. Render ahead forces older frames to be displayed. Queues can help smoothness and stuttering as a few really quick frames followed by a slow frame end up being evened out and spread over more frames. But the price you pay is in lag (the more frames in the queue, the longer it takes to empty the queue and the older the frames are that are displayed).
In order to maintain smoothness and reduce lag, it is possible to hold on to a limited number of frames in case they are needed but to drop them if they are not (if they get too old). This requires a little more intelligent management of already rendered frames and goes a bit beyond the scope of this article.
Some game developers implement a short render ahead queue and call it triple buffering (because it uses three total buffers). They certainly cannot be faulted for this, as there has been a lot of confusion on the subject and under certain circumstances this setup will perform the same as triple buffering as we have described it (but definitely not when framerate is higher than refresh rate).
Both techniques allow the graphics card to continue doing work while waiting for a vertical refresh when one frame is already completed. When using double buffering (and no render queue), while vertical sync is enabled, after one frame is completed nothing else can be rendered out which can cause stalling and degrade actual performance.
When vsync is not enabled, nothing more than double buffering is needed for performance, but a render queue can still be used to smooth framerate if it requires a few old frames to be kept around. This can keep instantaneous framerate from dipping in some cases, but will (even with double buffering and vsync disabled) add lag and input latency. Even without vsync, render ahead is required for multiGPU systems to work efficiently.
So, this article is as much for gamers as it is for developers. If you are implementing render ahead (aka a flip queue), please don't call it "triple buffering," as that should be reserved for the technique we've described here in order to cut down on the confusion. There are games out there that list triple buffering as an option when the technique used is actually a short render queue. We do realize that this can cause confusion, and we very much hope that this article and discussion help to alleviate this problem.
184 Comments
View All Comments
CallsignVega - Thursday, November 12, 2009 - link
Are you people sure that triple buffering is being enabled even with tools like DXTweaker and ATI Tray tools? In theory, shouldn't the card be working just as hard with triple buffering on as it does with VSync disabled?I've tested EvE online with my ATi HD5870. With Vsync off, my FPS are of course very high and I can see the high load on the GPU in regards to amperage used and heat produced. If I turn VSync on, it uses very little amperage and creates very little heat only running at 60fps.
In triple buffer theory, shouldn't the graphics card be working just as hard but only displaying the 60 FPS with Vsync on? I've mad profiles for EvE under ATi Tray tools and forced triple buffering on, but I get the same results as with VSync on, very low amperage and heat increase. This leads me to believe that triple buffering is in fact, not being applied.
Could all of these so called forcing of Direct3D triple buffering apps really not be doing anything? It could just be placebo effect and people think it's working just because they marked the check-box. Theres no way I could see triple buffering actually working with my HD5870 in Direct3D with such a very very low stress on the card compared to VSync off. Besides polling the stress level of the card, is there any other way to see if triple buffering is ACTUALLY turned on and working?
Skakruk - Wednesday, July 22, 2009 - link
From the last page of the article:"...they have just as little input lag as double buffering with no vsync at the start of output to the monitor."
I believe that is misinformation, as in my experience input lag results can vary significantly from game to game.
For example, enabling V-Sync and Triple Buffer in UT2004 results in input lag so bad that the game is all but unplayable, but enabling V-Sync and Triple Buffer in CoD4 creates barely any input lag at all.
Although CoD4 was very much playable, neither game exhibited "just as little input lag as double buffering with no vsync".
NOTE: For both UT2004 and CoD4, I was forcing V-Sync and Triple Buffer via D3DOverrider, and all mouse filtering etc. was disabled in both games.
griffhamlin - Thursday, July 16, 2009 - link
hang yourself morron. you didn't understand a single piece of this article LMAO !enabling tripple buffering without Vsync ??!!!. tripple buffering IS MEANT FOR VSYNC. for avoid the slowdown due to double buffer.
And vsync is made for avoid TEARING. GOT IT ? u_o.
Stop posting crap.
you want vsync ? go for tripple buffer. dont think , do it...
you don't want vsync ? whatever you enable tripple or double buffer. it doesn't matter.
davidri - Sunday, July 26, 2009 - link
Wow, you're a rudeandy80517 - Wednesday, October 31, 2012 - link
LOL good comment XD !davidri - Tuesday, July 14, 2009 - link
"So there you have it. Triple buffering gives you all the benefits of double buffering with no vsync enabled in addition to all the benefits of enabling vsync. We get smooth full frames with no tearing."This statement is not true. I enabled triple buffering without vsync on a GTX 280/27" LCD @ 60hz and ran Elder Scrolls Oblivion. The vertical tearing was awful.
I have been running the 280 with vsync and double buffering enabled on because I'll take the performance overhead to alleviate vertical tearing.
jp777cmoe - Saturday, July 18, 2009 - link
I read the article but im not sure about vsync and triple buffering..would it work well? i use a samsung 2233rz 120hz lcd monitor
griffhamlin - Wednesday, July 15, 2009 - link
*Facepalm*davidri - Wednesday, July 15, 2009 - link
Thank you for the duly and astute feedback.MamiyaOtaru - Thursday, July 16, 2009 - link
RTFA. DX game has to support triple buffering for you to get the benefit. If you toggled it on in the control panel, you were toggling it on for opengl games only.But *if* the game supports it, you'd be better off with triple buffering for avoiding tearing, though I still prefer double buffering with no vsync for responsiveness