Emulator RISC-V u obliku piksel shadera, koji omogućuje pokretanje Linuxa u VRChat

Objavljeni su rezultati eksperimenta o organizaciji pokretanja Linuxa unutar virtualnog 3D prostora multijužnih online igara VRChat, koji dopušta učitavanje 3D modela sa svojim shaderima. Za realizaciju zamišljene ideje stvoren je emulator RISC-V arhitekture, koji se izvodi na strani GPU-a u obliku pikselnog (fragmentnog) shadera (VRChat ne podržava računske shadere i UAV). Kod emulatora objavljen je pod MIT licencom.

Osnova emulatora je implementacija u jeziku C, pri čemu su korištena dostignuća minimalističkog emulatora riscv-rust, razvijenog na jeziku Rust. Pripremljeni C kod se prevodi u pikselni shader na jeziku HLSL, prikladan za upload u VRChat. Emulator pruža punu podršku za arhitekturu skupa instrukcija rv32imasu, blok upravljanja memorijom SV32 i minimalni skup perifernih uređaja (UART i tajmer). Pripremljene mogućnosti su dovoljne za učitavanje Linux jezgre 5.13.5 i osnovnog okruženja naredbenog retka BusyBox, s kojim se može izravno komunicirati iz virtualnog svijeta VRChat.

Emulator RISC-V u obliku piksel shadera, koji omogućuje pokretanje Linuxa u VRChat
Emulator RISC-V u obliku piksel shadera, koji omogućuje pokretanje Linuxa u VRChat

Emulator je implementiran u shaderu u obliku vlastite dinamičke teksture (Unity Custom Render Texture), dodatno obogaćene skriptama Udon pruženim za VRChat, koje se koriste za upravljanje emulatorom tijekom njegovog izvođenja. Sadržaj operativne memorije i stanje procesora emuliranog sustava sprema se u obliku teksture dimenzije 2048×2048 piksela. Emulirani procesor radi na frekvenciji od 250 kHz. Osim Linuxa, u emulatoru se također može pokrenuti Micropython.

Emulator RISC-V u obliku piksel shadera, koji omogućuje pokretanje Linuxa u VRChat

Za organizaciju trajnog pohranjivanja podataka s podrškom za čitanje i pisanje koristi se trik povezan s korištenjem objekta Camera, povezanog s pravokutnom područjem generiranim shaderom, i smjerom izlaza renderirane teksture u ulaz shadera. Na taj način, svaki piksel zapisan tijekom izvođenja pikselnog shadera može se pročitati prilikom obrade sljedećeg okvira.

Prilikom primjene pikselnih šejdera za svaku točku teksture paralelno se pokreće zaseban primjerak šejdera. Ova karakteristika znatno komplicira implementaciju i zahtijeva posebnu koordinaciju stanja cijelog emulatora te usklađivanje položaja obrađene točke s podacima koje sadrži ili sadržajem RAM-a emulatora (svaka točka može kodirati 128 bita informacija). Kod šejdera pritom zahtijeva uključivanje ogromnog broja provjera, a za pojednostavljenje implementacije koristio se Perl-preprocesor perlpp.

Pogledajte video


Izvor: opennet.ru
Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster