Emulator RISC-V v obliki senčila slikovnih pik, ki omogoča zagon Linuxa v VRChatu

Objavljeni so rezultati poskusa organiziranja zagona Linuxa znotraj virtualnega 3D prostora večigralske spletne igre VRChat, ki omogoča nalaganje 3D modelov z lastnimi shaderji. Za uresničitev zamišljene ideje je bil ustvarjen emulator arhitekture RISC-V, ki je bil izveden na strani GPU v obliki senčila pikslov (fragmentov) (VRChat ne podpira računalniških senčil in UAV). Koda emulatorja je objavljena pod licenco MIT.

Emulator temelji na implementaciji v jeziku C, pri ustvarjanju katerega je bil uporabljen razvoj minimalističnega emulatorja riscv-rust, razvitega v jeziku Rust. Pripravljena koda C je prevedena v senčnik slikovnih pik v HLSL, primeren za nalaganje v VRChat. Emulator zagotavlja popolno podporo za arhitekturo nabora ukazov rv32imasu, enoto za upravljanje pomnilnika SV32 in minimalen nabor perifernih naprav (UART in časovnik). Pripravljene zmogljivosti zadostujejo za nalaganje jedra Linuxa 5.13.5 in osnovnega okolja ukazne vrstice BusyBox, s katerim lahko komunicirate neposredno iz virtualnega sveta VRChat.

Emulator RISC-V v obliki senčila slikovnih pik, ki omogoča zagon Linuxa v VRChatu
Emulator RISC-V v obliki senčila slikovnih pik, ki omogoča zagon Linuxa v VRChatu

Emulator je implementiran v senčniku v obliki lastne dinamične teksture (Unity Custom Render Texture), dopolnjene s skripti Udon, ki so na voljo za VRChat in se uporabljajo za nadzor emulatorja med njegovim izvajanjem. Vsebina RAM-a in stanje procesorja emuliranega sistema sta shranjena v obliki teksture velikosti 2048x2048 slikovnih pik. Emulirani procesor deluje pri frekvenci 250 kHz. Poleg Linuxa lahko emulator poganja tudi Micropython.

Emulator RISC-V v obliki senčila slikovnih pik, ki omogoča zagon Linuxa v VRChatu

Za ustvarjanje obstojnega pomnilnika podatkov s podporo za branje in pisanje je trik uporaba predmeta Camera, vezanega na pravokotno območje, ki ga ustvari senčnik, in usmeritev izhoda upodobljene teksture na vhod senčila. Na ta način je mogoče prebrati katero koli slikovno piko, zapisano med izvajanjem senčila slikovnih pik, ko se obdela naslednji okvir.

Pri uporabi senčil slikovnih pik se za vsako slikovno piko teksture vzporedno zažene ločen primerek senčila. Ta lastnost bistveno oteži implementacijo in zahteva ločeno usklajevanje stanja celotnega emuliranega sistema in primerjavo položaja obdelanega piksla s stanjem CPU, ki je v njem kodiran, ali vsebino RAM-a emuliranega sistema (vsak piksel lahko kodirajo 128 bitov informacij). Koda shaderja zahteva vključitev ogromnega števila preverjanj, za poenostavitev izvajanja katerih je bil uporabljen predprocesor perl perlpp.



Vir: opennet.ru

Dodaj komentar