Ein RISC-V-Emulator in Form eines Pixelshaders, der die Ausführung von Linux in VRChat ermöglicht.

Die Ergebnisse eines Experiments zur Implementierung von Linux innerhalb eines virtuellen 3D-Raums in dem Mehrspieler-Online-Spiel VRChat wurden veröffentlicht. Dieses ermöglicht das Laden von 3D-Modellen mit eigenen Shadern. Zur Umsetzung der Idee wurde ein RISC-V-Architektur-Emulator entwickelt, der auf der GPU als Pixel- (Fragment-)Shader ausgeführt wird (VRChat unterstützt keine Compute-Shader und UAV). Der Code des Emulators ist unter der MIT-Lizenz veröffentlicht.

Der Emulator basiert auf einer Implementierung in C, bei der die minimalistischen Ansätze des riscv-rust-Emulators genutzt wurden, der in Rust entwickelt wird. Der vorbereitete C-Code wird in einen Pixel-Shader in HLSL übersetzt, der in VRChat hochgeladen werden kann. Der Emulator bietet vollständige Unterstützung für die rv32imasu-Befehlssatzarchitektur, das SV32-Speicherverwaltungssystem und ein minimales Set von Peripheriegeräten (UART und Timer). Diese Funktionen reichen aus, um den Linux-Kernel 5.13.5 und die grundlegende BusyBox-Befehlszeilenumgebung zu laden, mit der direkt aus der virtuellen Welt von VRChat interagiert werden kann.

Ein RISC-V-Emulator in Form eines Pixelshaders, der die Ausführung von Linux in VRChat ermöglicht.
Ein RISC-V-Emulator in Form eines Pixelshaders, der die Ausführung von Linux in VRChat ermöglicht.

Der Emulator wird in einem Shader als eigene dynamische Textur (Unity Custom Render Texture) implementiert und durch die für VRChat bereitgestellten Udon-Skripte ergänzt, die zur Steuerung des Emulators während seiner Ausführung verwendet werden. Der Inhalt des RAM und der Zustand des emulierten Systems werden in Form einer Textur mit einer Größe von 2048×2048 Pixeln gespeichert. Der emulierte Prozessor arbeitet mit einer Frequenz von 250 kHz. Neben Linux kann auch Micropython im Emulator ausgeführt werden.

Ein RISC-V-Emulator in Form eines Pixelshaders, der die Ausführung von Linux in VRChat ermöglicht.

Für die Organisation einer dauerhaften Datenspeicherung mit Lese- und Schreibunterstützung wird ein Trick angewendet, der die Verwendung eines an einem rechteckigen Bereich angebundenen Camera-Objekts beinhaltet, der durch den Shader erzeugt wird, sowie die Richtung der Ausgabe der gerenderten Textur an den Shader-Eingang. Auf diese Weise kann jeder Pixel, der während der Ausführung des Pixel-Shaders geschrieben wird, beim Verarbeiten des nächsten Frames gelesen werden.

Bei der Anwendung von Pixelschadern wird für jeden Pixel der Textur parallel eine separate Instanz des Shaders ausgeführt. Diese Eigenschaft kompliziert die Implementierung erheblich und erfordert eine eigene Koordination des Zustands des gesamten emulierten Systems sowie die Zuordnung der Position des bearbeiteten Pixels zu den im Pixel kodierten Zuständen der CPU oder dem Inhalt des RAM des emulierten Systems (jeder Pixel kann 128 Bit Information kodieren). Der Shader-Code erfordert dabei die Einbindung einer enormen Anzahl an Überprüfungen, für deren vereinfachte Umsetzung ein Perl-Präprozessor namens perlpp verwendet wurde.

Video abspielen


Quelle: opennet.ru
Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster