Un emulador RISC-V en forma de pixel shader que us permet executar Linux a VRChat

S'han publicat els resultats d'un experiment per organitzar el llançament de Linux dins de l'espai virtual 3D del joc multijugador en línia VRChat, que permet carregar models 3D amb els seus propis shaders. Per implementar la idea concebuda, es va crear un emulador de l'arquitectura RISC-V, executat al costat de la GPU en forma d'un shader de píxels (fragment) (VRChat no admet shaders computacionals i UAV). El codi de l'emulador es publica sota la llicència MIT.

L'emulador es basa en una implementació en llenguatge C, la creació de la qual, al seu torn, va utilitzar els desenvolupaments de l'emulador minimalista riscv-rust, desenvolupat en el llenguatge Rust. El codi C preparat es tradueix a un sombreador de píxels en HLSL, adequat per carregar-lo a VRChat. L'emulador proporciona suport complet per a l'arquitectura del conjunt d'instruccions rv32imasu, la unitat de gestió de memòria SV32 i un conjunt mínim de perifèrics (UART i temporitzador). Les capacitats preparades són suficients per carregar el nucli Linux 5.13.5 i l'entorn bàsic de línia d'ordres BusyBox, amb el qual podeu interactuar directament des del món virtual VRChat.

Un emulador RISC-V en forma de pixel shader que us permet executar Linux a VRChat
Un emulador RISC-V en forma de pixel shader que us permet executar Linux a VRChat

L'emulador s'implementa al shader en forma de textura dinàmica pròpia (Unity Custom Render Texture), complementada amb scripts Udon proporcionats per a VRChat, utilitzats per controlar l'emulador durant la seva execució. El contingut de la memòria RAM i l'estat del processador del sistema emulat s'emmagatzemen en forma de textura, de 2048x2048 píxels de mida. El processador emulat funciona a una freqüència de 250 kHz. A més de Linux, l'emulador també pot executar Micropython.

Un emulador RISC-V en forma de pixel shader que us permet executar Linux a VRChat

Per crear un emmagatzematge de dades persistent amb suport de lectura/escriptura, un truc és utilitzar un objecte de càmera lligat a una àrea rectangular generada pel shader i dirigir la sortida de la textura renderitzada a l'entrada del shader. D'aquesta manera, qualsevol píxel escrit durant l'execució del sombreador de píxels es pot llegir quan es processa el següent fotograma.

Quan s'apliquen ombrejats de píxels, s'inicia una instància d'ombrejat independent en paral·lel per a cada píxel de textura. Aquesta característica complica significativament la implementació i requereix una coordinació separada de l'estat de tot el sistema emulat i la comparació de la posició del píxel processat amb l'estat de la CPU codificat en ell o el contingut de la memòria RAM del sistema emulat (cada píxel pot codificar 128). fragments d'informació). El codi shader requereix la inclusió d'un gran nombre de comprovacions, per simplificar la implementació de la qual es va utilitzar el preprocessador perl perlpp.



Font: opennet.ru

Afegeix comentari