In RISC-V-emulator yn 'e foarm fan in pixel-shader wêrmei jo Linux kinne útfiere yn VRChat

De resultaten fan in eksperimint oer it organisearjen fan de lansearring fan Linux yn 'e firtuele 3D-romte fan it multiplayer online spultsje VRChat, wêrtroch 3D-modellen mei har eigen shaders laden kinne, binne publisearre. Om it betocht idee út te fieren, waard in emulator fan 'e RISC-V-arsjitektuer makke, útfierd oan' e GPU-kant yn 'e foarm fan in piksel (fragmint) shader (VRChat stipet gjin komputative shaders en UAV). De emulatorkoade wurdt publisearre ûnder de MIT-lisinsje.

De emulator is basearre op in ymplemintaasje yn 'e C-taal, wêrfan de skepping op syn beurt de ûntjouwings brûkte fan' e minimalistyske emulator riscv-rust, ûntwikkele yn 'e Rust-taal. De taret C-koade wurdt oerset yn in pixel shader yn HLSL, geskikt foar laden yn VRChat. De emulator jout folsleine stipe foar de rv32imasu ynstruksje set arsjitektuer, de SV32 ûnthâld behear ienheid, en in minimale set fan perifeare apparaten (UART en timer). De tariede mooglikheden binne genôch om de Linux kernel 5.13.5 en de basis BusyBox kommandorigelomjouwing te laden, wêrmei jo direkt kinne ynteraksje fan 'e VRChat firtuele wrâld.

In RISC-V-emulator yn 'e foarm fan in pixel-shader wêrmei jo Linux kinne útfiere yn VRChat
In RISC-V-emulator yn 'e foarm fan in pixel-shader wêrmei jo Linux kinne útfiere yn VRChat

De emulator wurdt ymplementearre yn 'e shader yn' e foarm fan in eigen dynamyske tekstuer (Unity Custom Render Texture), oanfolle troch Udon-skripts foarsjoen foar VRChat, brûkt om de emulator te kontrolearjen tidens syn útfiering. De ynhâld fan 'e RAM en de prosessorstatus fan it emulearre systeem wurde opslein yn' e foarm fan in tekstuer, 2048x2048 piksels yn grutte. De emulearre prosessor wurket op in frekwinsje fan 250 kHz. Neist Linux kin de emulator ek Micropython útfiere.

In RISC-V-emulator yn 'e foarm fan in pixel-shader wêrmei jo Linux kinne útfiere yn VRChat

Om oanhâldende gegevens opslach te meitsjen mei stipe foar lêzen en skriuwen, is in trúk in kamera-objekt bûn oan in rjochthoekich gebiet oanmakke troch de shader en rjochtsje de útfier fan 'e werjûn tekstuer nei de shader-ynput. Op dizze manier kin elke piksel dy't skreaun is tidens de útfiering fan pixel shader lêzen wurde as it folgjende frame wurdt ferwurke.

By it tapassen fan piksel-shaders wurdt in aparte shader-eksimplaar parallel lansearre foar elke tekstuerpiksel. Dizze funksje komplisearret de ymplemintaasje signifikant en fereasket aparte koördinaasje fan 'e steat fan it heule emulearre systeem en fergeliking fan' e posysje fan 'e ferwurke piksel mei de CPU-tastân dêryn kodearre as de ynhâld fan' e RAM fan it emulearre systeem (elke piksel kin 128 kodearje) stikjes ynformaasje). Shader-koade fereasket it opnimmen fan in grut oantal kontrôles, om de ymplemintaasje te ferienfâldigjen wêrfan de perl-preprocessor perlpp waard brûkt.



Boarne: opennet.ru

Add a comment