Originally Posted by
tombman
Nono, the tool WORKED. I have it here and stuttering almost disappeared perfectly.
All the tool did was to GUARANTEE a certain amount of time to wait until a certain frame gets displayed.
I give you an expample:
Frame A wanted to be displayed after 10ms, which is way too fast, because the NEXT frame would then come out after 50ms, because @ 30fps we have ~60ms time for two frames. This is what i call a 10-50 cadence. The 50ms part is responsible for the stuttering, as it represents a framerate auf 20fps (1000/50=20), which is way below 30fps.
So the goal is to get rid of those 50ms.
So when the tool ADDs to those 10ms of frame A another 20ms it will be displayed at 30ms, AND THE NEXT FRAME will come out in the NEXT 30ms -> a perfect 30-30 cadence. Since we eliminated the 50ms down to 30ms we will NOT see stuttering.
So this tool does NOT "swallow" frames, it just delays them to shorten the lag of following frames. ALL frames get rendered!
If frame A would take 15ms, the additional time added would only be 15ms.
This tool, although not finished, IS working.
==
Now what would make this tool perfect? Intelligence of course ;)
All a perfect tool would have to do, is to look at the previous 2 frametimes, AVERAGE this ((A+B)/2) and then take that as maximum waiting time for the next 2 frames.
So e.g.: 23ms A + 56ms B = 76ms render time for 2 frames. -> 34ms render time for 1 frame. -> EXPECTED render time for next 2 frames = 34ms each. -> waiting time for next 2 frames = 34 - actual frametime. -> actual frametime messured: 10ms + 15ms (asuming game is getting faster ;)) -> waiting time for those 2 NEW frames is 24ms (34-10) and 19ms (34-19). -> expectation has to be adjusted -> next waiting time is [(10+15)/2= 12.5~13ms]-actual frametime and so on and on and on....
So a tool will always look at the previous 2 (SLI) or 3 (TSLI) or 4 (quad-sli) frametimes, calculate an average frametime and then set a minimum wait for the next 2, 3 or 4 frames.
It just SLOWS down those frames that come out too fast, to give the following frame(s) enough time. That's the trick.
Disadvantages: of course a tool can only react 2 to 4 frames late at changing framerates, because it has to look at the past to predict new waiting times. So it WOULD react at changing conditions, e.g. looking at the sky in a game will decrease the load and increase fps, but only with a delay of 2 to 4 frames. So this wil cost a small amount of average fps during a benchmark session, but gameplay will be 1000 times better than without a tool.
==
The easiest way would be to implement this kind of smoothing directly into the driver. The driver wouldn't have to messure more than 1 frame to know how long it took to render 1 frame. So it can react perfectly quick for the next frame.
p.s: i hope i did not miscalculate anything, but it is late here in vienna and i'm tired ;)