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

Se han publicado los resultados de un experimento sobre cómo iniciar Linux dentro de un espacio 3D virtual en el juego multijugador online VRChat, que permite la carga de modelos 3D con sus propios shaders. Para implementar la idea concebida, se creó un emulador de arquitectura RISC-V, ejecutado en el lado de la GPU como un shader de píxeles. (VRChat no admite shaders de cómputo y UAV). El código del emulador se ha publicado bajo la licencia MIT.

La base del emulador está construida sobre una implementación en C, en la que, a su vez, se utilizaron los desarrollos de un emulador minimalista riscv-rust, desarrollado en Rust. El código en C preparado se traduce en un shader de píxeles en HLSL, adecuado para cargar en VRChat. El emulador proporciona soporte completo para la arquitectura del conjunto de instrucciones rv32imasu, el bloque de control de memoria SV32 y un conjunto mínimo de dispositivos periféricos (UART y temporizador). Las capacidades preparadas son suficientes para cargar el núcleo de Linux 5.13.5 y el entorno básico de línea de comandos BusyBox, que se puede interactuar directamente desde el mundo virtual de VRChat.

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

El emulador se implementa en un shader en forma de una textura dinámica personalizada (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 memoria RAM y el estado del procesador del sistema emulado se guarda en forma de textura, con un tamaño de 2048×2048 píxeles. El procesador emulado opera a una frecuencia de 250 kHz. Además de Linux, también se puede ejecutar Micropython en el emulador.

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

Para organizar un almacenamiento permanente de datos con soporte para lectura y escritura, se aplica un truco relacionado con el uso de un objeto Camera, vinculado a una área rectangular generada por el shader, y la dirección de salida de la textura renderizada hacia la entrada del shader. De esta manera, cualquier píxel escrito durante la ejecución del shader de píxeles puede ser leído al procesar el siguiente cuadro.

Al aplicar shaders de píxeles, se inicia una instancia separada del shader para cada píxel de la textura. Esta particularidad complica enormemente la implementación y requiere una coordinación distinta del estado de todo el sistema emulado y la correlación de la posición del píxel procesado con el estado codificado en el mismo, que puede ser el estado de la CPU o el contenido de la RAM del sistema emulado (cada píxel puede codificar 128 bits de información). El código del shader requiere incluir una gran cantidad de comprobaciones, para lo cual se utilizó el preprocesador perlpp.

Reproducir video


Fuente: opennet.ru
Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster