RISC-V-emulaattori pikselivarjostimen muodossa, jonka avulla voit käyttää Linuxia VRChatissa

Tulokset on julkaistu kokeesta Linuxin käynnistämisen organisoimiseksi moninpelin VRChatin virtuaalisessa 3D-tilassa, joka mahdollistaa 3D-mallien lataamisen omilla varjostimillaan. Suunnitellun idean toteuttamiseksi luotiin RISC-V-arkkitehtuurin emulaattori, joka suoritettiin GPU-puolella pikselin (fragmentin) varjostimen muodossa (VRChat ei tue laskennallisia varjostimia ja UAV:ta). Emulaattorikoodi on julkaistu MIT-lisenssillä.

Emulaattori perustuu C-kielen toteutukseen, jonka luomisessa puolestaan ​​käytettiin Rust-kielellä kehitetyn minimalistisen emulaattorin riscv-rust kehitystä. Valmistettu C-koodi käännetään HLSL:n pikselivarjostimeksi, joka sopii ladattavaksi VRChatiin. Emulaattori tarjoaa täyden tuen rv32imasu-käskysarjan arkkitehtuurille, SV32-muistinhallintayksikölle ja minimijoukolle oheislaitteita (UART ja ajastin). Valmistetut ominaisuudet riittävät lataamaan Linux-ytimen 5.13.5 ja perusbusyBox-komentoriviympäristön, jonka kanssa voi olla vuorovaikutuksessa suoraan VRChat-virtuaalimaailmasta.

RISC-V-emulaattori pikselivarjostimen muodossa, jonka avulla voit käyttää Linuxia VRChatissa
RISC-V-emulaattori pikselivarjostimen muodossa, jonka avulla voit käyttää Linuxia VRChatissa

Emulaattori on toteutettu Shaderissa oman dynaamisen tekstuurin (Unity Custom Render Texture) muodossa, jota on täydennetty VRChatille tarjotuilla Udon-skripteillä, joita käytetään emulaattorin ohjaamiseen sen suorituksen aikana. Emuloidun järjestelmän RAM-muistin sisältö ja prosessorin tila tallennetaan tekstuurin muodossa, kooltaan 2048x2048 pikseliä. Emuloitu prosessori toimii 250 kHz:n taajuudella. Linuxin lisäksi emulaattori voi ajaa myös Micropythonia.

RISC-V-emulaattori pikselivarjostimen muodossa, jonka avulla voit käyttää Linuxia VRChatissa

Pysyvän tietojen tallennuksen luomiseksi lukemista ja kirjoittamista tukevalla temppulla käytetään varjostimen luomaan suorakaiteen muotoiseen alueeseen sidottua kameraobjektia ja ohjaa renderoidun tekstuurin tulos shader-tuloon. Tällä tavalla kaikki pikselivarjostimen suorittamisen aikana kirjoitetut pikselit voidaan lukea, kun seuraava kehys käsitellään.

Pikselivarjostimia käytettäessä erillinen varjostimen esiintymä käynnistetään rinnakkain kullekin pintakuviopikselille. Tämä ominaisuus vaikeuttaa merkittävästi toteutusta ja vaatii erillistä koko emuloidun järjestelmän tilan koordinointia ja prosessoidun pikselin sijainnin vertailua siihen koodatun CPU:n tilaan tai emuloidun järjestelmän RAM-muistin sisältöön (jokainen pikseli voi koodata 128 informaatiota). Shader-koodi vaatii valtavan määrän tarkistuksia, joiden toteutuksen yksinkertaistamiseksi käytettiin perl-esikäsittelyohjelmaa perlpp.



Lähde: opennet.ru

Lisää kommentti