Das ist sogar schon Quadbuffering:
#1: Bild 1, fertig, wird ausgegeben
#2: Bild 2, fertig, wartet
#3: Bild 3 in Arbeit
#4: Bild 1,5 wird gerade interpoliert
Bei der Latenz wirkt sich das aber anders aus, als der Schritt von Double zu Tripple Buffering. Bei einer GPU-Framerate, die halb so hoch wie die Bildwiederholrate des Monitors ist, braucht Triple Buffering gut zwei Refresh-Zyklen, ehe ein Anlass aus dem Gameloop angezeigt wird und dann noch einmal vier, ehe man auch die Reaktion sieht. DLSS 3.0 ist bei der Ausgabe der Reaktion genauso schnell, aber der gesamte Berechnungs-Loop ist um einen Refresh-Zyklus nach vorne verschoben und man reagiert nicht auf einen zwei Zyklen alten Inhalt, sondern auf einen drei Zyklen alten. (Gesamtlatenz von Anlass im Gameloop bis Ausgabe der Reaktion: 7 Zyklen statt 6.) Double Buffering ohne Vsync kommt dagegen im Best Case (= Anlass und Reaktion liegen auf der richtigen Seite der Tearingzone) mit einem Zyklus Vor- und zwei Zyklen Nachlauf aus. (3 insgesamt)
Das alles natürlich unter der perfekt theoretischen Annahme, dass die Tensorcores ihre Arbeit in 0,0 ms erledigen oder zufällig immer rechtzeitig genug vor dem nächsten Refresh damit beginnen können, um noch vor diesem fertig zu werden, und unter der Annahme, dass sie dafür weder Strombudget noch Speichertransferrate zu Lasten der Shader benötigen. In der Praxis ist all das natürlich nicht garantiert, sodass die DLSS-Ausgabe sich bei einigen Frames um einen weiteren Zyklus verlangsamen wird und es werden auch nicht exakt doppelt so viele Fps erreicht, sodass bei gleicher Monitorwiederholrate entweder das Triple-Buffering-System ab und zu mal einen Frame nur einmal anzeigt und dadurch einen Zyklus einspart oder aber das DLSS-3.0-System manchmal drei Refreshzyklen mit einem Render-Frame überbrücken muss.
@PCGH_Phil: Weißt du, ob Nvidia in letzterem Fall zwei Zwischenbilder berechnet oder ob eins wiederholt angezeigt wird? Im Prinzip braucht man dann ja sogar fünf Buffer.
Geht man von einem fortlaufenden Renderloop und einer gewissen Reaktionszeit aus, ändert sich bei Triple-Buffering als Bezugspunkt erstmal wenig – der Input folgt einen Zyklus später auf den Game-Loop (=> Output-Lag knapp vier statt knapp drei Zyklen), aber da die Grafikkarte unter meinen ursprünglichen Annahmen ohnehin einen weiteren Zyklus brauchte, ehe sie die das Bild dazu berechnen konnte, ändert bei der Ausgabe nichts (=> Input-Lag drei statt vier Zyklen).Ich muss meine Einschätzung nochmal korrigieren: Das kürzglich Gesagte gilt nur, wenn man eine 0-Reaktionszeit seitens des Spielers annimmt und der erste Frame einfach schon fertig ist, weil der Redakteur nur den weiteren Verlauf betrachtet.Geht man von einem fortlaufenden Renderloop und einer gewissen Reaktionszeit aus, ändert sich bei Triple-Buffering als Bezugspunkt erstmal wenig – der Input folgt einen Zyklus später auf den Game-Loop (=> Output-Lag knapp vier statt knapp drei Zyklen), aber da die Grafikkarte unter meinen ursprünglichen Annahmen ohnehin einen weiteren Zyklus brauchte, ehe sie die das Bild dazu berechnen konnte, ändert bei der Ausgabe nichts (=> Input-Lag drei statt vier Zyklen).
Bei Double-Buffering dagegen verdoppelt sich der Input-Lag realistischerweise um einen Frame = zwei Zyklen, denn man kann unmöglich während der Anzeige eines Bilds so schnell reagieren, dass die Eingabe schon im folgenden, bereits in Berechnung befindlichen Bild berücksichtigt wird. Und für die Berechnung des ersten Bildes sollte man fairerweise auch zwei Zyklen statt einem einplanen.
Bei DLSS 3.0 hat die Berücksichtigung der Reaktionszeit ähnlich drastische Auswirkungen wie bei Double Buffering: Da die Ausgabe des ersten Frames verzögert erfolgt und wir keine Zauberer sind, kann die Reaktion des Spielers nicht mehr rechtzeitig für den übernächsten Frame erfolgen, sondern erst für den über-übernächsten. Das heißt Frame Generation erzeugt gegenüber Triple-Bffering nicht nur einen weiteren Zyklen mehr Output-Lag, sondern zusätzliche zwei Zyklen Input-Lag gegenüber meiner ursprünglichen Schätzung und somit auch gegenüber Triple-Buffering. Das ist genauso mieß wie der Worst-Case bei Double-Buffering mit einem Drittel der (interpolierten) Framerate. Dazu verschlimmert sich auch noch die Zeit, bis man überhaupt reagieren kann, gegenüber Triple-Buffering genauso stark, wie vom Double-Buffer-Best-Case zu Triple-Buffering.
Im Anhang habe ich das mal mit den benötigten Puffern in der GPU darzustellen versucht.
Anmerkung:
Die Begriffswahl ist dem gängigen Gebrauch angepasst, der aber irgendwie reichlich bescheuert ist. Warum nutzen wir eigentlich "Input-Lag" für den Zeitraum von einer Spielereingabe (z.B. Mausbewegung) bis zu deren Darstellung, obwohl es sich um das Warten auf eine Ausgabe handelt? Der oben beschrieben Output-Lag wiederum gibt die Zeit an, bis der Spieler endlich eine Eingabe auf ein Ingame-Ereignis tätigt.
Abgesehen davon, dass das eher Phils Testfachgebiet ist
Lag heisst ja übersetzt (zeitliche) Verzögerung.Warum nutzen wir eigentlich "Input-Lag" für den Zeitraum von einer Spielereingabe (z.B. Mausbewegung) bis zu deren Darstellung, obwohl es sich um das Warten auf eine Ausgabe handelt?