RISC-V emulator u obliku pixel shadera koji vam omogućava pokretanje Linuxa u VRChat-u

Objavljeni su rezultati eksperimenta organiziranja lansiranja Linuxa unutar virtualnog 3D prostora online igre za više igrača VRChat, koja omogućava učitavanje 3D modela vlastitim shaderima. Za realizaciju zamišljene ideje kreiran je emulator RISC-V arhitekture, koji se izvodi na strani GPU-a u obliku pikselnog (fragmentnog) shadera (VRChat ne podržava računarske shadere i UAV). Kod emulatora je objavljen pod MIT licencom.

Emulator je baziran na implementaciji u jeziku C, za čije je kreiranje, zauzvrat, korišten razvoj minimalističkog emulatora riscv-rust, razvijenog u jeziku Rust. Pripremljeni C kod se prevodi u piksel shader u HLSL-u, pogodan za učitavanje u VRChat. Emulator pruža punu podršku za arhitekturu skupa instrukcija rv32imasu, jedinicu za upravljanje memorijom SV32 i minimalni skup perifernih uređaja (UART i tajmer). Pripremljene mogućnosti su dovoljne za učitavanje Linux kernela 5.13.5 i osnovnog okruženja komandne linije BusyBox, sa kojim možete komunicirati direktno iz VRChat virtuelnog sveta.

RISC-V emulator u obliku pixel shadera koji vam omogućava pokretanje Linuxa u VRChat-u
RISC-V emulator u obliku pixel shadera koji vam omogućava pokretanje Linuxa u VRChat-u

Emulator je implementiran u shaderu u obliku sopstvene dinamičke teksture (Unity Custom Render Texture), dopunjene Udon skriptama obezbeđenim za VRChat, koje se koriste za kontrolu emulatora tokom njegovog izvršavanja. Sadržaj RAM-a i stanje procesora emuliranog sistema 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 pixel shadera koji vam omogućava pokretanje Linuxa u VRChat-u

Za kreiranje trajnog skladištenja podataka s podrškom za čitanje i pisanje, trik je u korištenju objekta Camera koji je vezan za pravokutnu površinu koju generiše shader i usmjerava izlaz renderirane teksture na ulaz shadera. Na ovaj način, svaki piksel napisan tokom izvršavanja pixel shadera može se pročitati kada se obradi sljedeći okvir.

Prilikom primjene pikselskih shadera, odvojena instanca shadera se pokreće paralelno za svaki piksel teksture. Ova karakteristika značajno otežava implementaciju i zahtijeva odvojenu koordinaciju stanja cijelog emuliranog sistema i poređenje položaja obrađenog piksela sa stanjem CPU-a koji je kodiran u njemu ili sadržajem RAM-a emuliranog sistema (svaki piksel može kodirati 128 bitova informacija). Shader kod zahtijeva uključivanje ogromnog broja provjera, da bi se pojednostavila implementacija kojih je korišten perl predprocesor perlpp.



izvor: opennet.ru

Dodajte komentar