Un emulador RISC-V en forma de sombreador de píxeles que permite ejecutar Linux en VRChat

Se han publicado los resultados de un experimento sobre la organización del lanzamiento de Linux dentro del espacio virtual 3D del juego multijugador en línea VRChat, que permite cargar modelos 3D con sus propios sombreadores. Para implementar la idea concebida, se creó un emulador de la arquitectura RISC-V, ejecutado en el lado de la GPU en forma de un sombreador de píxeles (fragmento) (VRChat no admite sombreadores computacionales ni UAV). El código del emulador se publica bajo la licencia MIT.

El emulador se basa en una implementación en lenguaje C, cuya creación, a su vez, utilizó los desarrollos del emulador minimalista riscv-rust, desarrollado en lenguaje Rust. El código C preparado se traduce a un sombreador de píxeles en HLSL, adecuado para cargar en VRChat. El emulador proporciona soporte total para la arquitectura del conjunto de instrucciones rv32imasu, la unidad de administración de memoria SV32 y un conjunto mínimo de periféricos (UART y temporizador). Las capacidades preparadas son suficientes para cargar el kernel de Linux 5.13.5 y el entorno de línea de comandos básico BusyBox, con el que puede interactuar directamente desde el mundo virtual VRChat.

Un emulador RISC-V en forma de sombreador de píxeles que permite ejecutar Linux en VRChat
Un emulador RISC-V en forma de sombreador de píxeles que permite ejecutar Linux en VRChat

El emulador se implementa en el sombreador en forma de su propia textura dinámica (Unity Custom Render Texture), complementada con scripts Udon proporcionados para VRChat, que se utilizan para controlar el emulador durante su ejecución. El contenido de la RAM y el estado del procesador del sistema emulado se almacenan en forma de textura, de 2048x2048 píxeles de tamaño. El procesador emulado funciona a una frecuencia de 250 kHz. Además de Linux, el emulador también puede ejecutar Micropython.

Un emulador RISC-V en forma de sombreador de píxeles que permite ejecutar Linux en VRChat

Para crear un almacenamiento de datos persistente con soporte para lectura y escritura, un truco consiste en utilizar un objeto Cámara vinculado a un área rectangular generada por el sombreador y dirigir la salida de la textura renderizada a la entrada del sombreador. De esta manera, cualquier píxel escrito durante la ejecución del sombreador de píxeles se puede leer cuando se procesa el siguiente fotograma.

Al aplicar sombreadores de píxeles, se inicia una instancia de sombreador independiente en paralelo para cada píxel de textura. Esta característica complica significativamente la implementación y requiere una coordinación separada del estado de todo el sistema emulado y una comparación de la posición del píxel procesado con el estado de la CPU codificada en él o el contenido de la RAM del sistema emulado (cada píxel puede codifica 128 bits de información). El código del sombreador requiere la inclusión de una gran cantidad de comprobaciones, para simplificar su implementación se utilizó el preprocesador perlpp.



Fuente: opennet.ru

Añadir un comentario