Un emulador RISC-V en forma de sombreador de píxeles que permitía la Linux en VRChat

Los resultados del experimento de la organización de lanzamiento han sido publicados. Linux внутри виртуального 3D-пространства многопользовательской online-игры VRChat, допускающей загрузку 3D-моделей со своими шейдерами. Для реализации задуманной идеи был создан эмулятор архитектуры RISC-V, выполняемый на стороне GPU в виде пиксельного (фрагментного) шейдера (VRChat не поддерживает вычислительные шейдеры и UAV). Код эмулятора опубликован под лицензией MIT.

В основе эмулятора заложена реализация на языке Си, при создании которой, в свою очередь, использованы наработки минималистичного эмулятора riscv-rust, развиваемого на языке Rust. Подготовленный Си-код транслируется в пиксельный шейдер на языке HLSL, пригодный для загрузки в VRChat. В эмуляторе предоставляется полная поддержка архитектуры набора команд rv32imasu, блок управления памятью SV32 и минимальный набор периферийных устройств (UART и таймер). Подготовленных возможностей достаточно для загрузки ядра Linux 5.13.5 и базового окружения командной строки BusyBox, с которым можно взаимодействовать напрямую из виртуального мира VRChat.

Un emulador RISC-V en forma de sombreador de píxeles que permitía la Linux en VRChat
Un emulador RISC-V en forma de sombreador de píxeles que permitía la Linux en VRChat

Эмулятор реализован в шейдере в форме собственной динамической текстуры (Unity Custom Render Texture), дополненной предоставляемыми для VRChat скриптами Udon, задействованными для управления эмулятором во время его выполнения. Содержимое оперативной памяти и состояние процессора эмулируемой системы сохраняется в форме текстуры, размером 2048×2048 пикселей. Эмулируемый процессор работает с частотой 250 kHz. Помимо Linux в эмуялторе также может быть запущен Micropython.

Un emulador RISC-V en forma de sombreador de píxeles que permitía la 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.

Ver mas


Fuente: opennet.ru
Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster