'n RISC-V-emulator in die vorm van 'n pixel shader wat jou toelaat om Linux in VRChat te laat loop

Die resultate van 'n eksperiment oor die organisering van die bekendstelling van Linux binne die virtuele 3D-ruimte van die multispeler-aanlynspeletjie VRChat, wat dit moontlik maak om 3D-modelle met hul eie shaders te laai, is gepubliseer. Om die ontwerpte idee te implementeer, is 'n emulator van die RISC-V-argitektuur geskep, wat aan die GPU-kant uitgevoer is in die vorm van 'n pixel (fragment) shader (VRChat ondersteun nie rekenaarskadu's en UAV nie). Die emulatorkode word onder die MIT-lisensie gepubliseer.

Die emulator is gebaseer op 'n implementering in die C-taal, waarvan die skepping op sy beurt die ontwikkelings van die minimalistiese emulator riscv-rust, ontwikkel in die Rust-taal, gebruik het. Die voorbereide C-kode word vertaal in 'n pixel shader in HLSL, geskik vir laai in VRChat. Die emulator bied volle ondersteuning vir die rv32imasu-instruksiestel-argitektuur, die SV32-geheuebestuurseenheid en 'n minimale stel randapparatuur (UART en timer). Die voorbereide vermoëns is genoeg om die Linux-kern 5.13.5 en die basiese BusyBox-opdragreëlomgewing te laai, waarmee u direk vanaf die virtuele VRChat-wêreld kan kommunikeer.

'n RISC-V-emulator in die vorm van 'n pixel shader wat jou toelaat om Linux in VRChat te laat loop
'n RISC-V-emulator in die vorm van 'n pixel shader wat jou toelaat om Linux in VRChat te laat loop

Die emulator word in die skakering geïmplementeer in die vorm van sy eie dinamiese tekstuur (Unity Custom Render Texture), aangevul deur Udon-skrifte wat vir VRChat verskaf word, wat gebruik word om die emulator tydens die uitvoering daarvan te beheer. Die inhoud van die RAM en die verwerkerstatus van die nagebootste stelsel word gestoor in die vorm van 'n tekstuur, 2048x2048 pixels groot. Die nagebootste verwerker werk teen 'n frekwensie van 250 kHz. Benewens Linux, kan die emulator ook Micropython laat loop.

'n RISC-V-emulator in die vorm van 'n pixel shader wat jou toelaat om Linux in VRChat te laat loop

Om aanhoudende databerging te skep met ondersteuning vir lees en skryf, is 'n truuk om 'n kamera-voorwerp te gebruik wat gebind is aan 'n reghoekige area wat deur die skakering gegenereer word en die uitset van die gelewerde tekstuur na die skadu-invoer te rig. Op hierdie manier kan enige pixel wat geskryf is tydens pixel shader uitvoering gelees word wanneer die volgende raam verwerk word.

Wanneer pixel shaders toegepas word, word 'n aparte shader-instansie parallel vir elke tekstuurpiksel geloods. Hierdie kenmerk bemoeilik die implementering aansienlik en vereis afsonderlike koördinasie van die toestand van die hele geëmuleerde stelsel en vergelyking van die posisie van die verwerkte pixel met die SVE-toestand wat daarin geënkodeer is of die inhoud van die RAM van die geëmuleerde stelsel (elke pixel kan 128 kodeer). stukkies inligting). Die shader-kode vereis die insluiting van 'n groot aantal tjeks, om die implementering waarvan die perl-voorverwerker perlpp gebruik is, te vereenvoudig.



Bron: opennet.ru

Voeg 'n opmerking