Emulador RISC-V na forma de um shader em pixels, que permitiu rodar Linux no VRChat

Foram publicados os resultados de um experimento sobre a implementação do Linux em um espaço 3D virtual dentro do jogo online multiplayer VRChat, que permite o upload de modelos 3D com seus próprios shaders. Para realizar a ideia proposta, foi criado um emulador da arquitetura RISC-V, executado do lado da GPU na forma de um shader de pixel (fragment shader) (o VRChat não suporta shaders de computação e UAV). O código do emulador foi publicado sob a licença MIT.

A base do emulador é uma implementação na linguagem C, a partir da qual foram utilizadas, por sua vez, as contribuições de um emulador minimalista riscv-rust, desenvolvido na linguagem Rust. O código em C preparado é traduzido em um shader de pixel na linguagem HLSL, apto para upload no VRChat. O emulador oferece suporte completo à arquitetura do conjunto de instruções rv32imasu, bloco de controle de memória SV32 e um conjunto mínimo de dispositivos periféricos (UART e timer). Os recursos disponíveis são suficientes para carregar o kernel do Linux 5.13.5 e um ambiente básico de linha de comando BusyBox, com o qual é possível interagir diretamente do mundo virtual do VRChat.

Emulador RISC-V na forma de um shader em pixels, que permitiu rodar Linux no VRChat
Emulador RISC-V na forma de um shader em pixels, que permitiu rodar Linux no VRChat

O emulador é implementado no shader na forma de uma textura dinâmica própria (Unity Custom Render Texture), complementada por scripts Udon fornecidos para o VRChat, utilizados para controlar o emulador durante sua execução. O conteúdo da memória RAM e o estado do processador do sistema emulado são salvos na forma de uma textura de 2048×2048 pixels. O processador emulado opera a uma frequência de 250 kHz. Além do Linux, o emulador também pode executar Micropython.

Emulador RISC-V na forma de um shader em pixels, que permitiu rodar Linux no VRChat

Para organizar o armazenamento permanente de dados com suporte de leitura e gravação, é utilizada uma técnica relacionada ao uso de um objeto Camera, vinculado a uma área retangular gerada pelo shader, e a direção de saída da textura renderizada para a entrada do shader. Dessa forma, qualquer pixel gravado durante a execução do shader de pixel pode ser lido no processamento do próximo quadro.

Ao aplicar shaders de pixel, uma instância separada do shader é executada em paralelo para cada pixel da textura. Essa característica torna a implementação significativamente mais complexa e exige uma coordenação cuidadosa do estado de todo o sistema emulado e a associação da posição do pixel processado ao estado da CPU codificado nele ou ao conteúdo da RAM do sistema emulado (cada pixel pode codificar 128 bits de informação). O código do shader requer a inclusão de um grande número de verificações, para as quais foi utilizado o pré-processador Perl perlpp para simplificar a implementação.

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?


Fonte: opennet.ru
Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster