Un emulador RISC-V en forma de pixel shader que che permite executar Linux en VRChat

Publicáronse os resultados dun experimento para organizar o lanzamento de Linux dentro do espazo virtual 3D do xogo multixogador en liña VRChat, que permite cargar modelos 3D cos seus propios sombreadores. Para implementar a idea concibida, creouse un emulador da arquitectura RISC-V, executado no lado da GPU en forma de sombreador de píxeles (fragmento) (VRChat non admite sombreadores computacionais e UAV). O código do emulador publícase baixo a licenza MIT.

O emulador baséase nunha implementación na linguaxe C, cuxa creación, á súa vez, utilizou os desenvolvementos do emulador minimalista riscv-rust, desenvolvido na linguaxe Rust. O código C preparado tradúcese nun sombreador de píxeles en HLSL, axeitado para cargalo en VRChat. O emulador ofrece soporte completo para a arquitectura do conxunto de instrucións rv32imasu, a unidade de xestión de memoria SV32 e un conxunto mínimo de periféricos (UART e temporizador). As capacidades preparadas son suficientes para cargar o núcleo Linux 5.13.5 e o contorno básico de liña de comandos BusyBox, co que pode interactuar directamente desde o mundo virtual VRChat.

Un emulador RISC-V en forma de pixel shader que che permite executar Linux en VRChat
Un emulador RISC-V en forma de pixel shader que che permite executar Linux en VRChat

O emulador está implementado no sombreador en forma da súa propia textura dinámica (Unity Custom Render Texture), complementada por scripts Udon proporcionados para VRChat, utilizados para controlar o emulador durante a súa execución. O contido da memoria RAM e o estado do procesador do sistema emulado almacénanse en forma de textura, de 2048x2048 píxeles de tamaño. O procesador emulado funciona a unha frecuencia de 250 kHz. Ademais de Linux, o emulador tamén pode executar Micropython.

Un emulador RISC-V en forma de pixel shader que che permite executar Linux en VRChat

Para crear un almacenamento de datos persistente con soporte para ler e escribir, un truco consiste en usar un obxecto Cámara ligado a unha área rectangular xerada polo sombreador e dirixir a saída da textura renderizada á entrada do sombreador. Deste xeito, calquera píxel escrito durante a execución do pixel shader pódese ler cando se procese o seguinte cadro.

Ao aplicar sombreadores de píxeles, lánzase unha instancia de sombreado separada en paralelo para cada píxel de textura. Esta característica complica significativamente a implementación e require unha coordinación separada do estado de todo o sistema emulado e a comparación da posición do píxel procesado co estado da CPU codificado nel ou o contido da RAM do sistema emulado (cada píxel pode codificar 128). bits de información). O código shader require a inclusión dunha gran cantidade de comprobacións, para simplificar a implementación da cal se utilizou o preprocesador perl perlpp.



Fonte: opennet.ru

Engadir un comentario