L'emulatore RISC-V sotto forma di shader pixel ha reso possibile l'esecuzione di Linux in VRChat.

Sono stati pubblicati i risultati di un esperimento volto a organizzare l'esecuzione di Linux all'interno di uno spazio 3D virtuale di un gioco online multiplayer, VRChat, che consente il caricamento di modelli 3D con shader personalizzati. Per realizzare l'idea, è stato creato un emulatore dell'architettura RISC-V, eseguito sul lato GPU sotto forma di shader pixel (fragment shader) (VRChat non supporta gli shader computazionali e UAV). Il codice dell'emulatore è stato pubblicato con licenza MIT.

L'emulatore si basa su un'implementazione in linguaggio C, che a sua volta utilizza i lavori di un emulatore minimalista riscv-rust, sviluppato in Rust. Il codice C preparato viene tradotto in uno shader pixel in HLSL, pronto per essere caricato in VRChat. L'emulatore offre un supporto completo per l'architettura del set di istruzioni rv32imasu, un'unità di controllo della memoria SV32 e un insieme minimo di dispositivi periferici (UART e timer). Le funzionalità preparate sono sufficienti per caricare il kernel Linux 5.13.5 e l'ambiente di comando di base BusyBox, con il quale è possibile interagire direttamente dal mondo virtuale di VRChat.

L'emulatore RISC-V sotto forma di shader pixel ha reso possibile l'esecuzione di Linux in VRChat.
L'emulatore RISC-V sotto forma di shader pixel ha reso possibile l'esecuzione di Linux in VRChat.

L'emulatore è realizzato in uno shader sotto forma di una texture dinamica personalizzata (Unity Custom Render Texture), arricchita con gli script Udon forniti per VRChat, utilizzati per controllare l'emulatore durante la sua esecuzione. Il contenuto della memoria RAM e lo stato del processore del sistema emulato vengono salvati sotto forma di texture, con dimensioni di 2048×2048 pixel. Il processore emulato funziona a una frequenza di 250 kHz. Oltre a Linux, nel l'emulatore può essere eseguito anche Micropython.

L'emulatore RISC-V sotto forma di shader pixel ha reso possibile l'esecuzione di Linux in VRChat.

Per organizzare un'archiviazione permanente dei dati con supporto per lettura e scrittura, viene utilizzato un trucco legato all'oggetto Camera, associato a un'area rettangolare generata dallo shader, e alla direzione di output della texture disegnata verso l'input dello shader. In questo modo, ogni pixel scritto durante l'esecuzione dello shader pixel può essere letto durante l'elaborazione del frame successivo.

Quando si utilizzano shader pixel, per ogni pixel della texture viene eseguito un'istanza separata dello shader in parallelo. Questa caratteristica complica notevolmente l'implementazione e richiede una coordinazione separata dello stato dell'intero sistema emulato e l'abbinamento della posizione del pixel elaborato con lo stato della CPU o il contenuto della RAM del sistema emulato codificati al suo interno (ogni pixel può codificare 128 bit di informazioni). Il codice dello shader richiede quindi l'inserimento di un numero enorme di controlli, per semplificare l'implementazione dei quali è stato utilizzato il pre-processore perlpp.

Riproduci video


Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster