Zum Inhalt springen
PS5PCEM
TeilweiseGrafik

Skalare Shader-Aufrufe

S_SWAPPC_B64 und S_CALL_B64 sichern eine volle Rückkehradresse und führen ein begrenztes lokales Unterprogramm aus, auch einen Callee, der hinter ENDPGM liegt. Ein geprüfter AGC-Fetch-Shader kann auf dieselbe Weise verbunden werden.

Repository-Notizen bis 10. Oktober 2026

Aufruf und Rückkehr

Der SOP1-Opcode 0x21 ist S_SWAPPC_B64. Der SOPK-Opcode 0x16 ist S_CALL_B64, mit dem Ziel bei PC + 4 + sign_extend(SIMM16) * 4, was Rückwärtsaufrufe einschließt. Beide schreiben die Adresse des nächsten Befehls in das Ziel-SGPR-Paar. Ein passendes S_SETPC_B64 kehrt dorthin zurück. CALL lässt SCC und EXEC unangetastet.

Ein SWAPPC, dessen Ziel null ist, bleibt die bestehende S_SETPC_B64-Fortsetzung. Lokale SWAPPC-Ziele lassen sich aus einem GETPC plus einer Immediate-Addition oder -Subtraktion voller Breite auflösen. Das Ziel wird festgehalten, auch wenn der Befehl zusätzlich das Link-Register schreibt. Ein Callee, der hinter ENDPGM liegt, wird bis zu seiner passenden Rückkehr dekodiert, innerhalb der Grenzen von Zuteilung und Befehlen. Eine gewöhnliche Hardware-Fortsetzung stoppt weiterhin vor nachgestellten Metadaten.

Wie der Aufruf abgesenkt wird

Der Kontrollflussgraph erhält ausdrückliche Kanten für Aufruf und Rückkehr. Der Callee teilt den Registerzustand des Aufrufers und nutzt den begrenzten SPIR-V-Dispatcher. Ein nicht unterstützter Aufruf kann nicht in den linearen Kontrollflusspfad durchfallen. Die Ressourcenentdeckung des Hosts folgt den Aufrufen und den Rückkehren, sodass ein Deskriptor, der im Callee initialisiert wurde, weiterhin sichtbar ist.

Jeder unterstützte Aufruf besitzt ein eigenes, geradzahlig ausgerichtetes SGPR-Paar von s0:s1 bis s104:s105, mit genau einer passenden Rückkehr. Callees sind verschachtelt oder aufeinanderfolgend, so wie es der Prüfer erlaubt. Allgemeine dynamische Ziele, bei denen das Ziel ein beliebiger Laufzeitwert ist, bleiben nicht unterstützt.

Fetch-Shader und der Prüflauf

Ein externer Fetch-Shader wird verbunden, wenn das unveränderte User-Data-Paar des Aufrufs zur Adresse passt, die AGC registriert hat. Der Fetch-Rumpf wird bis zu seinem zurückkehrenden SETPC dekodiert, und dieses SETPC muss das Link-Paar des Aufrufers lesen. Der Analyse-Cache unterscheidet ein gewöhnliches Programm von einem Fetch-Rumpf, sodass ein älteres Einfügen eines Fetch die Rückkehr eines lokalen Unterprogramms nicht überschreiben kann.

Ein GPU-Prüflauf mit 42 Dispatches prüft 21,504 Wörter. Der Bericht vom 9. Oktober beansprucht aus den Aufrufen allein weder einen neuen Spielmeilenstein noch eine neue Bildrate.

Was umgesetzt ist

  • S_SWAPPC_B64 und S_CALL_B64 mit einer vollen Rückkehradresse und einem passenden S_SETPC_B64.
  • Verschachtelte Callees und Callees hinter ENDPGM, innerhalb der bestehenden Grenzen.
  • Verbinden eines geprüften AGC-Fetch-Shaders, dessen Rückkehr das Link des Aufrufers liest.
  • Ein Prüflauf mit 42 Dispatches über 21,504 Wörter.

Was noch fehlt

  • Allgemeine dynamische Aufrufziele sind nicht unterstützt.
  • Ein Aufruf braucht ein geradzahlig ausgerichtetes Link-Paar und eine passende Rückkehr.
  • Der Prüflauf ist kein Ergebnis in Bildern pro Sekunde.

Verwandte Mechanismen

Worum es auf diesen Seiten geht

Der Text folgt den Architektur-Notizen und den Berichten vom Oktober 2026 im PS5PCEM-Repository. Ein bestandener Einzeltest ist keine neue Bildrate und kein neuer Durchspielstand.

Alle Techniken