Unter Windows encodiert Punktfunk im Display-Treiber
Der Display-Treiber von Punktfunk encodiert jedes Bild, sobald Windows es zusammengesetzt hat; der Host verschickt nur das Ergebnis. Mit RTX 4090 bei 4K120 sind das 4–8 ms Ende zu Ende.
Auf einem Windows-Host encodiert Punktfunk das Video im Display-Treiber. Der Host-Prozess fasst kein Pixel an: Er liest fertig komprimierte Bilder aus gemeinsamem Speicher und verschickt sie.
Der Weg eines Bildes
- Windows setzt den Desktop für das virtuelle Display von Punktfunk zusammen und übergibt das Bild an den Treiber.
- Der Treiber schreibt es in einem einzigen GPU-Durchgang in einen Pool aus drei Plätzen, gleich im Eingabeformat des Encoders, und gibt die Fläche an Windows zurück.
- Ein Encoder-Thread im Treiber nimmt das neueste Bild aus dem Pool und encodiert es.
- Das encodierte Bild landet in gemeinsamem Speicher, wo der Host es abholt.
Kein Bild wird in den Arbeitsspeicher zurückgelesen oder überquert eine Prozessgrenze.
Im Treiber stecken NVENC, AMF, QSV, Media Foundation und PyroWave auf x64, auf ARM64 nur Media Foundation. Der Host wählt nach GPU-Hersteller, PyroWave, wenn der Client es anfordert. Öffnet der Encoder des Herstellers eine 8-Bit-SDR-Sitzung mit H.264 oder HEVC nicht, weicht der Treiber auf Media Foundation aus.
Windows wartet nie auf den Encoder
Der Treiber läuft im Treiber-Hostprozess von Windows und darf Windows deshalb nicht aufhalten. Zwischen Empfang und Rückgabe eines Bildes macht er nur diesen einen Durchgang. Fällt der Encoder zurück, recycelt der Pool das älteste wartende Bild. So bekommt der Encoder immer das frischeste, und ein langsamer Encoder kostet ein Bild im Stream, nie den Desktop.
Die Encoder-Schleife schläft, bis der Encoder ein fertiges Bild meldet, also geht jedes Bild raus, sobald es encodiert ist. Mit NVENC bei 4K120 auf einer RTX 4090 wartete im schlimmsten Messfenster ein Bild 6,2 ms; mit Abfragen per Timer saß eines 48 ms fest. Zeitgesteuerte Wartezeiten nutzen einen hochauflösenden Timer, denn der Standard-Takt von Windows mit 15,6 ms würde Mauszeiger-Updates auf einem stillen Desktop bei etwa 64 pro Sekunde deckeln.
Hängt ein Stream trotzdem, arbeitet sich der Host eine Leiter hoch: Encoder zurücksetzen, Swapchain, Präsentation und zuletzt den Treiber neu laden.
Latenz
Auf einem Testrechner mit RTX 4090 bei 4K, 120 Hz und HDR lag die Latenz Ende zu Ende bei 4–8 ms, gegenüber 9–17 ms, als der Host noch in einem eigenen Prozess encodierte. Der Anteil des Hosts fiel von 6–9 ms auf praktisch null.
PyroWave und Overlay-Tools
Der Treiber läuft in Session 0, die keinen Desktop hat. Overlay-Tools wie RivaTuner laden einen Vulkan-Layer in jedes Vulkan-Programm, und diese Layer hängen dort. Darum schaltet der Treiber implizite Vulkan-Layer für seinen PyroWave-Encoder ab.
Was du brauchst
- Windows 11 22H2 (Build 22621) oder neuer.
- Host und Treiber aus demselben Installer. Das Setup aktualisiert beide; rechne mit einem kurzen schwarzen Bild, während der Treiber neu lädt. Trifft der Host auf einen Treiber, mit dem er nicht sprechen kann, meldet er „driver outdated“.
Einrichtung: Windows-Host. Mehr zur Latenz: niedrige Latenz, wenn das Spiel die GPU auslastet.