Originally Posted by TranquilTempest
So if your system is fast enough to render >60fps with a 60hz monitor, triple buffering will add 16.7ms of latency over double buffering.
You are implying that every buffer ever rendered has to be presented at speed of Vsynced display. Thats wrong.
a) Set Frame limiter to 60 FPS
In this scenario 3rd buffer should normally be never used, regardless of vsync. This is common for games ported from consoles to PC. You have Vsync, frame limit 30 or 60 and 3rd buffer disabled. This solution has more that one benefit:
- Lower Vram utilization (as the third buffer is not required)
- Lower power consumption - as CPU and GPU are not rendering frames which are later not presented.
b) Lets say that your system is able to generate 120 FPS or more.
Frontbuffer is being displayed.
Backbuffer A is already full
Backuffer B is full too
Pointer is about to swich buffers.
The question is whether the it point to "newest already finised frame" or to "next frame". In first scenario, there is no input lag, one frame is never presented.
Second scenario (which you are implying) has one major disadvantage - it will mean that you have one backbuffer always full. It effectively negates whole purpose of triple buffering. Thats very very serious issue in the whole implementation, therefore I dont believe it works this way. Again the myth that "every frame already rendered should be presented" I admit I could be wrong...
On the other hand the method you are describing is called "Render ahead". This is some sort of triple buffering which tried to utilize Microsoft in Direct3d. Apparently its the one which caused so much misconception.
"Triple buffering" and "Render ahead" should be properly distingished, as they are implemeted on different parts of render chain and also are working in a different manner. In case of "render ahead" yes, you have to display ALL frames in the chain.
And we are back to the god forsaken Skyrim... No real 3rd buffer implementation due Direct3d, no triple buffering. There is one workaround if you wish to have 3 buffers. Just set game to "windowed mode", but you need Win7 or Vista. What is "front buffer" for game engine is only a part of backbuffer for DWM (Aero) effectivelly acting as triple buffering.
These are the reasons why i tried to convince AMD to add Frame Limiter feature to CCC. It will provide best cost-effective solution when considering Hardware resources (Vram in case of triple buffering, total CPU and GPU utilization, and thus Power consumption), and considering special hardware (Gsync kits).
Vsync + Triple buffering is solution which is causing higher GPU/CPU utiilzation, and some already produced frames are dropped, but you get updates from engine to display more often in a manner "As fast as possible". The granularity of updates may be then better as in previous case.Edited by Offler - 12/23/13 at 3:50am