RISC-V-emulator in de vorm van een pixelshader, die het mogelijk maakte om Linux in VRChat te draaien

De resultaten van het experiment naar het opzetten van Linux binnen een virtuele 3D-ruimte van de multiplayer online game VRChat, die het uploaden van 3D-modellen met eigen shaders toestaat, zijn gepubliceerd. Voor de realisatie van het beoogde idee is een emulator van de RISC-V architectuur gemaakt, uitgevoerd aan de GPU-kant in de vorm van een pixel- (fragment) shader (VRChat ondersteunt geen compute shaders en UAV). De code van de emulator is gepubliceerd onder de MIT-licentie.

De emulator is gebaseerd op een implementatie in de programmeertaal C, waarbij gebruik is gemaakt van de ideeƫn van de minimalistische emulator riscv-rust, ontwikkeld in de programmeertaal Rust. De voorbereide C-code wordt omgezet naar een pixel shader in HLSL, die geschikt is voor upload naar VRChat. De emulator biedt volledige ondersteuning voor de rv32imasu instructieset-architectuur, het geheugensysteem SV32 en een minimale set randapparaten (UART en timer). Deze mogelijkheden zijn voldoende voor het uploaden van de Linux kernel 5.13.5 en een basis command line omgeving BusyBox, waarmee rechtstreeks vanuit de virtuele wereld van VRChat kan worden gecommuniceerd.

RISC-V-emulator in de vorm van een pixelshader, die het mogelijk maakte om Linux in VRChat te draaien
RISC-V-emulator in de vorm van een pixelshader, die het mogelijk maakte om Linux in VRChat te draaien

De emulator is geĆÆmplementeerd in de shader in de vorm van een eigen dynamische textuur (Unity Custom Render Texture), aangevuld met scripts voor VRChat, genaamd Udon, die worden gebruikt voor het beheren van de emulator tijdens de uitvoering. De inhoud van het werkgeheugen en de status van de processor van het emuleerde systeem worden opgeslagen in de vorm van een textuur, met een afmeting van 2048Ɨ2048 pixels. De geĆ«muleerde processor draait op een frequentie van 250 kHz. Naast Linux kan ook Micropython in de emulator worden uitgevoerd.

RISC-V-emulator in de vorm van een pixelshader, die het mogelijk maakte om Linux in VRChat te draaien

Voor de organisatie van permanente gegevensopslag met lees- en schrijfbescherming wordt een truc gebruikt, waarbij een Camera-object is gekoppeld aan een rechthoekig gebied dat wordt gegenereerd door de shader, en de uitvoer van de getekende textuur naar de invoer van de shader wordt gestuurd. Op deze manier kan elke pixel die tijdens de uitvoering van de pixel shader wordt geschreven, worden gelezen bij de verwerking van het volgende frame.

Bij het gebruik van pixelshaders wordt voor elk pixel van de textuur een afzonderlijk exemplaar van de shader parallel uitgevoerd. Deze eigenschap maakt de implementatie aanzienlijk complexer en vereist aparte coƶrdinatie van de toestand van het gehele nagebootste systeem, evenals het afstemmen van de positie van de verwerkte pixel met de in deze pixel gecodeerde toestand van de CPU of de inhoud van het RAM van het nagebootste systeem (elke pixel kan 128 bit informatie coderen). De shadercode vereist daarnaast het inschakelen van een enorm aantal controles, waarvoor een perl-preprocessor, perlpp, is ingeschakeld om de implementatie te vereenvoudigen.

Video afspelen


Bron: opennet.ru
Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster