Émulateur RISC-V sous forme de shader pixel, permettant de faire fonctionner Linux dans VRChat

Les résultats de l'expérience concernant le lancement de Linux dans un espace 3D virtuel d'un jeu en ligne multijoueur VRChat, permettant le chargement de modèles 3D avec leurs propres shaders, ont été publiés. Pour réaliser cette idée, un émulateur de l'architecture RISC-V a été créé, exécuté sur le GPU sous la forme d'un shader pixel (fragment shader) (VRChat ne supporte pas les compute shaders et les UAV). Le code de l'émulateur est publié sous licence MIT.

L'émulateur est basé sur une implémentation en langage C, qui, à son tour, utilise les développements d'un émulateur minimaliste riscv-rust, développé en Rust. Le code C préparé est traduit en shader pixel en HLSL, adapté pour le chargement dans VRChat. L'émulateur offre un support complet de l'architecture de jeu d'instructions rv32imasu, du bloc de contrôle de mémoire SV32 et d'un ensemble minimal d'appareils périphériques (UART et timer). Les capacités fournies suffisent pour charger le noyau Linux 5.13.5 et un environnement de ligne de commande de base BusyBox, qui peut être interagi directement depuis le monde virtuel de VRChat.

Émulateur RISC-V sous forme de shader pixel, permettant de faire fonctionner Linux dans VRChat
Émulateur RISC-V sous forme de shader pixel, permettant de faire fonctionner Linux dans VRChat

L'émulateur est implémenté dans un shader sous la forme d'une texture dynamique personnalisée (Unity Custom Render Texture), complétée par des scripts Udon fournis pour VRChat, utilisés pour contrôler l'émulateur pendant son exécution. Le contenu de la mémoire vive et l'état du processeur du système émulé sont sauvegardés sous forme de texture, mesurant 2048×2048 pixels. Le processeur émulé fonctionne à une fréquence de 250 kHz. En plus de Linux, Micropython peut également être exécuté dans l'émulateur.

Émulateur RISC-V sous forme de shader pixel, permettant de faire fonctionner Linux dans VRChat

Pour assurer un stockage permanent des données avec prise en charge de la lecture et de l'écriture, un truc est utilisé, lié à l'utilisation d'un objet Camera, attaché à une zone rectangulaire générée par le shader, et à la direction de sortie de la texture dessinée vers l'entrée du shader. Ainsi, n'importe quel pixel enregistré pendant l'exécution du shader pixel peut être lu lors du traitement de la prochaine image.

Lorsque des shaders de pixels sont appliqués, une instance distincte du shader est lancée en parallèle pour chaque pixel de la texture. Cette caractéristique complique considérablement l'implémentation et nécessite une coordination distincte de l'état de tout le système émulé, ainsi qu'un appariement de la position du pixel traité avec les données CPU ou le contenu de la RAM du système émulé (chaque pixel peut coder 128 bits d'information). Le code du shader nécessite ainsi l'inclusion d'un grand nombre de vérifications, pour simplifier l'implémentation, un préprocesseur perl a été utilisé, appelé perlpp.

Lire la vidéo


Source : opennet.ru
Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster