RDNA2-Shader nach SPIR-V
Shader der PlayStation 5 sind RDNA2-Maschinencode. PS5PCEM dekodiert die GFX10-Familien, baut einen Kontrollflussgraphen und senkt die unterstützten Operationen auf SPIR-V 1.5 für Vulkan ab.
Repository-Notizen bis 10. Oktober 2026
Dekodierung
Das Frontend erkennt die skalaren Kodierungen SOP1, SOP2, SOPK, SOPC, SOPP und SMEM, die Vektorkodierungen VOP1, VOP2, VOP3, VOP3P, VOPC und VINTRP sowie MUBUF, MTBUF, FLAT, DS, MIMG und EXP. Architekturelle Rümpfe aus einem und aus zwei Wörtern, optionale Literale und MIMG-NSA-Adresswörter bleiben erhalten, sodass ein späterer nicht unterstützter Opcode den Strom nicht desynchronisiert.
Ein nicht erkannter Opcode innerhalb einer bekannten Familie wird zu einem nicht unterstützten Befehl, der weiterhin seine Familie, seinen numerischen Opcode, die Rohwörter und einen Grund trägt. Erweiterungswörter von SDWA und DPP behalten ihre Selektoren, Modifikatoren und Lane-Masken. Der Decoder benennt einen Opcode nicht um, den er nicht kennt.
Kontrollfluss und die typisierte IR
Direkte Sprungziele teilen das Programm in Blöcke. Vorwärtszusammenführungen, verschachtelte Bereiche und Rückwärtskanten werden getrennt aufgezeichnet. Der aktive Übersetzer kann aus den dekodierten Befehlen erzeugen. PS5_GPU_SHADER_IR=1 wählt die legalisierte typisierte IR. PS5_GPU_SSA=1 ergänzt Phi- und Def-Use-Zustand, Konstantenfaltung und iterative Entfernung toten Codes.
Azyklische Auswahlen werden zu strukturierten SPIR-V-Merges mit Phi-Werten an den Zusammenführungen. Natürliche Schleifen werden zu Loop-Merges. Irreduzibler Kontrollfluss wird zu einem Dispatcher nach Blockindex, der die Prädikate VCC und EXEC behält, sodass eine Lane, die einen Schreibvorgang hätte überspringen müssen, ihn weiterhin überspringt. EXEC-Masken werden innerhalb eines SPIR-V-Blocks wiederverwendet und an jedem Label verworfen, weil ein Wert von einer Seite einer Verzweigung die andere Seite nicht dominiert.
Was die Suite vom 9. Oktober gemessen hat
Der Prüfpunkt für skalare Aufrufe vom 9. Oktober bestand 259 von 259 Tests der GPU-Analyse und 232 von 232 Vulkan-Tests. Die RDNA2-Suite bestand 271 von 281, mit denselben zehn bestehenden Fehlschlägen und einem gemeldeten Leck. Diese Befehlsprüfungen belegen keine neue Bildrate für ein Spiel.
Bildladevorgänge über mehrere Texel, horizontale Gathers, NGG-Fetch-Shader und begrenzte skalare Aufrufe sind als eigene Pfade implementiert und auf eigenen Seiten beschrieben. Stores und Deskriptorkombinationen, die nicht in der gemessenen Menge lagen, bleiben nicht unterstützt.
Was umgesetzt ist
- Dekodierung der GFX10-Familien für Skalar, Vektor, Speicher, Bild und Export, einschließlich Literalen und NSA-Wörtern.
- Strukturierte Auswahlen, natürliche Schleifen und ein Dispatcher für irreduziblen Fluss, der Lane-Masken erhält.
- Optionale typisierte IR und SSA-Bereinigung, gewählt über Umgebungsvariablen.
- SPIR-V 1.5 für die unterstützten Operationen von ALU, Speicher, Bild, Interpolation und Export.
Was noch fehlt
- Zehn bestehende Fehlschläge der RDNA2-Suite bleiben, dazu ein gemeldetes Leck.
- Ein nicht unterstützter Opcode stoppt diese Absenkung. Er wird nicht durch eine geratene Operation ersetzt.
- Die Befehlstests sind kein Bildraten-Ergebnis.
Verwandte Mechanismen
Worum es auf diesen Seiten geht