Un emulatore RISC-V in forma di pixel shader chì vi permette di eseguisce Linux in VRChat

I risultati di un esperimentu nantu à l'urganizazione di u lanciu di Linux in u spaziu virtuale 3D di u ghjocu multiplayer in linea VRChat, chì permette di carricà mudelli 3D cù i so ombre, sò stati publicati. Per implementà l'idea cuncipita, hè statu creatu un emulatore di l'architettura RISC-V, eseguitu nantu à u latu GPU in forma di un shader di pixel (fragment) (VRChat ùn sustene micca sfumaturi computazionali è UAV). U codice emulatore hè publicatu sottu a licenza MIT.

L'emulatore hè basatu annantu à una implementazione in a lingua C, a creazione di quale, à u turnu, hà utilizatu i sviluppi di l'emulatore minimalista riscv-rust, sviluppatu in a lingua Rust. U codice C preparatu hè traduttu in un pixel shader in HLSL, adattatu per carica in VRChat. L'emulatore furnisce un supportu tutale per l'architettura di l'istruzzioni rv32imasu, l'unità di gestione di memoria SV32, è un settore minimu di periferiche (UART è timer). E capacità preparate sò abbastanza per carricà u kernel Linux 5.13.5 è l'ambienti di basa di linea di cummanda BusyBox, cù quale pudete interagisce direttamente da u mondu virtuale VRChat.

Un emulatore RISC-V in forma di pixel shader chì vi permette di eseguisce Linux in VRChat
Un emulatore RISC-V in forma di pixel shader chì vi permette di eseguisce Linux in VRChat

L'emulatore hè implementatu in u shader in a forma di a so propria struttura dinamica (Unity Custom Render Texture), supplementata da scripts Udon furniti per VRChat, utilizatu per cuntrullà l'emulatore durante a so esicuzzioni. U cuntenutu di a RAM è u statu di u processatore di u sistema emulatu sò almacenati in a forma di una texture, 2048x2048 pixels in size. U processore emulatu opera à una frequenza di 250 kHz. In più di Linux, l'emulatore pò ancu eseguisce Micropython.

Un emulatore RISC-V in forma di pixel shader chì vi permette di eseguisce Linux in VRChat

Per creà un almacenamentu di dati persistente cù supportu per a lettura è a scrittura, un truccu hè di utilizà un oggettu di Camera ligatu à una zona rettangulare generata da u shader è diretta l'output di a texture rende à l'input shader. In questu modu, ogni pixel scrittu durante l'esekzione di pixel shader pò esse lettu quandu u prossimu quadru hè processatu.

Quandu si applicanu pixel shaders, una istanza di shader separata hè lanciata in parallelu per ogni pixel di texture. Questa funzione complica significativamente l'implementazione è esige una coordinazione separata di u statu di tuttu u sistema emulatu è a comparazione di a pusizione di u pixel processatu cù u statu di CPU codificatu in questu o u cuntenutu di a RAM di u sistema emulatu (ogni pixel pò codificà 128). pezzi d'infurmazione). U codice shader richiede l'inclusione di un gran numaru di cuntrolli, per simplificà l'implementazione di quale u preprocessore perl perlpp hè stata utilizata.



Source: opennet.ru

Add a comment