Emulátor RISC-V vo forme pixel shadera, ktorý vám umožňuje spustiť Linux vo VRChat

Boli zverejnené výsledky experimentu s organizáciou spustenia Linuxu vo virtuálnom 3D priestore multiplayerovej online hry VRChat, ktorá umožňuje načítanie 3D modelov s vlastnými shadermi. Na realizáciu koncipovaného nápadu bol vytvorený emulátor architektúry RISC-V vykonávaný na strane GPU vo forme pixelového (fragmentového) shadera (VRChat nepodporuje výpočtové shadery a UAV). Kód emulátora je zverejnený pod licenciou MIT.

Emulátor je založený na implementácii v jazyku C, pri tvorbe ktorého sa zasa využil vývoj minimalistického emulátora riscv-rust vyvinutého v jazyku Rust. Pripravený C kód je preložený do pixel shadera v HLSL, vhodného na načítanie do VRChat. Emulátor poskytuje plnú podporu pre architektúru inštrukčnej sady rv32imasu, jednotku správy pamäte SV32 a minimálnu sadu periférií (UART a časovač). Pripravené schopnosti stačia na načítanie linuxového jadra 5.13.5 a základného prostredia príkazového riadku BusyBox, s ktorým môžete interagovať priamo z virtuálneho sveta VRChat.

Emulátor RISC-V vo forme pixel shadera, ktorý vám umožňuje spustiť Linux vo VRChat
Emulátor RISC-V vo forme pixel shadera, ktorý vám umožňuje spustiť Linux vo VRChat

Emulátor je v shaderi implementovaný vo forme vlastnej dynamickej textúry (Unity Custom Render Texture), doplnenej o skripty Udon poskytované pre VRChat, slúžiace na ovládanie emulátora pri jeho vykonávaní. Obsah pamäte RAM a stav procesora emulovaného systému sú uložené vo forme textúry s veľkosťou 2048 x 2048 pixelov. Emulovaný procesor pracuje na frekvencii 250 kHz. Okrem Linuxu dokáže emulátor spustiť aj Micropython.

Emulátor RISC-V vo forme pixel shadera, ktorý vám umožňuje spustiť Linux vo VRChat

Na vytvorenie trvalého úložiska dát s podporou čítania a zápisu je trikom použiť objekt Camera naviazaný na obdĺžnikovú oblasť vygenerovanú shaderom a nasmerovať výstup vykreslenej textúry na vstup shadera. Týmto spôsobom je možné prečítať každý pixel zapísaný počas vykonávania pixel shader pri spracovaní ďalšej snímky.

Pri aplikácii pixel shaderov sa paralelne spustí samostatná inštancia shadera pre každý pixel textúry. Táto vlastnosť výrazne komplikuje implementáciu a vyžaduje samostatnú koordináciu stavu celého emulovaného systému a porovnanie polohy spracovávaného pixelu so stavom CPU v ňom zakódovaného alebo obsahom RAM emulovaného systému (každý pixel môže kódovať 128 kúsky informácií). Shader kód vyžaduje zahrnutie obrovského množstva kontrol, na zjednodušenie implementácie ktorých bol použitý perl preprocesor perlpp.



Zdroj: opennet.ru

Pridať komentár