Originally posted by: nitromullet
I would think that the delay would have to be introduced between finished frame and display frame. The reason for micro stutter is because one frame follows the one before it 'too closely' leaving a huge gap between it and the next frame, this is what caused the stutter.
Since this won't be a constant, it seems to me that the only way it could be fixed by imposing a delay would be to build in a rule that in effect says if interval <= x, then insert delay. If that is the case, the frame would have to already be rendered or the interval would be unknown.
If you were to introduce a delay prior to rendering, it seems that the only effect that would have would be to reduce the fps since you would have to apply the delay to every second frame rendered.
I'm really out of my area of expertise here though, so I could be completely incorrect or misunderstanding what you were saying. Of course, there is the option that ATI solved this issue with a means other than introducing a delay at all.
Like you said, the whole aim is to remove the skew in frame times before the display.
The time at which a frame is ready to be displayed depends on when the GPU starts working on that frame, and also on how long it takes the GPU to process it. Hence to adjust the time when a frame is finished, I could either finish the frame and hold on to it, or start processing it late. In the former case, each frame is held on to till the appropriate time, while in the latter, the delay is applied at intervals to correct the skew. Both need to be adaptive, as the right amount of delay depends on FPS.
(Scenario: GPU1 renders odd numbered frames, while GPU2 renders even frames)
The amount of delay to be introduced depends on when the previous frame was finished and when the next frame is expected to be ready i.e delay for #4 depends on when #3 is ready, and when #5 is expected. Even if we wait till #3 is ready, the time for #5 has to be predicted. Hence the system will require a form of a predictor, which ever option is chosen. For ease of implementation, most likely both values will be predicted. The accuracy of the predictor will improve with reduction in processing time variance (at the extreme of constant instantaneous FPS from a single GPU, the predictor is always right). Of course higher accuracy is required at lower frame rates.
The problem with the 'start delay' option is that, in addition to the earlier variables, we also need to predict the processing time for the current frame i.e. #4. This latter prediction is easier with similar GPUs but gets more difficult with dissimilar ones. Predicting processing time for #4 is same order of accuracy as predicting for #5 in similar GPU case. So you really dont lose much.
On the upside for this option is that each GPU renders the most recent game state and thus reduces input lag.