RISC-V emulator u obliku shadera piksela koji vam omogućuje pokretanje Linuxa u VRChatu

Objavljeni su rezultati eksperimenta organiziranja pokretanja Linuxa unutar virtualnog 3D prostora online igre za više igrača VRChat, koja omogućuje učitavanje 3D modela s vlastitim shaderima. Za provedbu zamišljene ideje stvoren je emulator RISC-V arhitekture, izveden na strani GPU-a u obliku shadera piksela (fragmenta) (VRChat ne podržava računalne shadere i UAV). Kod emulatora objavljen je pod licencom MIT-a.

Emulator se temelji na implementaciji u jeziku C, za čiju je izradu korišten razvoj minimalističkog emulatora riscv-rust, razvijenog u jeziku Rust. Pripremljeni C kod se prevodi u pixel shader u HLSL-u, prikladan za učitavanje u VRChat. Emulator pruža punu podršku za arhitekturu skupa instrukcija rv32imasu, jedinicu za upravljanje memorijom SV32 i minimalan skup perifernih uređaja (UART i mjerač vremena). Pripremljene mogućnosti dovoljne su za učitavanje Linux kernela 5.13.5 i osnovnog okruženja BusyBox naredbenog retka, s kojim možete komunicirati izravno iz VRChat virtualnog svijeta.

RISC-V emulator u obliku shadera piksela koji vam omogućuje pokretanje Linuxa u VRChatu
RISC-V emulator u obliku shadera piksela koji vam omogućuje pokretanje Linuxa u VRChatu

Emulator je implementiran u shaderu u obliku vlastite dinamičke teksture (Unity Custom Render Texture), dopunjene Udon skriptama predviđenim za VRChat, koje se koriste za kontrolu emulatora tijekom njegovog izvođenja. Sadržaj RAM-a i stanje procesora emuliranog sustava pohranjeni su u obliku teksture, veličine 2048x2048 piksela. Emulirani procesor radi na frekvenciji od 250 kHz. Osim Linuxa, emulator može pokrenuti i Micropython.

RISC-V emulator u obliku shadera piksela koji vam omogućuje pokretanje Linuxa u VRChatu

Za stvaranje trajne pohrane podataka s podrškom za čitanje i pisanje, trik je koristiti objekt Camera vezan za pravokutno područje koje generira shader i usmjeriti izlaz renderirane teksture na ulaz shadera. Na ovaj način, bilo koji piksel zapisan tijekom izvođenja sjenčanja piksela može se pročitati kada se obradi sljedeći okvir.

Kada se primjenjuju piksel shaderi, zasebna instanca shadera pokreće se paralelno za svaki piksel teksture. Ova značajka značajno komplicira implementaciju i zahtijeva zasebnu koordinaciju stanja cijelog emuliranog sustava i usporedbu položaja obrađenog piksela sa stanjem CPU-a kodiranim u njemu ili sadržajem RAM-a emuliranog sustava (svaki piksel može kodirati 128 bitovi informacija). Shader kod zahtijeva uključivanje ogromnog broja provjera, za čiju je implementaciju korišten perl predprocesor perlpp.



Izvor: opennet.ru

Dodajte komentar