On avaldatud katsetuste tulemused Linuxi kÀivitamisest kolmemÔÔtmelises mÀngus VRChat, mis vÔimaldab laadida 3D mudeleid oma shendidega. Tagamaks soovitud idee teostamine, loodi RISC-V arhitektuuri emulaator, mille kÀitus GPU poolt pikselite shendina (VRChat ei toeta arvutus shendeid ja UAV). Emulaatori kood on avaldatud MIT litsentsi alusel.
Emulaatori aluseks on C keeles rakendatud teostus, mille loomisel on samuti kasutatud minimalistliku riscv-rust emulaatori arengut, mis on arendatud Rust keeles. Valmistatud C-kood tÔlgitakse pikseli shendiks HLSL keeles, mis on VRChatis laadimiseks sobiv. Emulaator pakub toetust RV32IMASU kÀskude komplektile, SV32 mÀluhalduse blokkidele ja minimaalset komplekti perifeerseid seadmeid (UART ja taimer). Valmistatud vÔimalused on piisavad Linuxi 5.13.5 tuuma ja BusyBoxi pÔhikÀsurea keskuse laadimiseks, millega saab otse VRChati virtuaalsest maailmast suhelda.


Emulaator on teostatud shendina, millel on oma dĂŒnaamiline tekstuur (Unity Custom Render Texture), millele on lisatud VRChati jaoks antud Udon skripte, mis on kasutusel emulaatori haldamiseks selle toimimise ajal. Emuleeritava sĂŒsteemi RAM sisu ja protsessori olek salvestatakse tekstuurina, mille suurus on 2048Ă2048 pikslit. Emuleeritav protsessor töötab sagedusel 250 kHz. Lisaks Linuxile saab emulaatoris kĂ€ivitada ka Micropythonit.

PĂŒsivalt andmete salvestamiseks, mis toetab lugemist ja kirjutamist, kasutatakse trikki, mis on seotud objekti Camera kasutamisega, mis on seotud piklike aladega, mida shend genereerib, ja renderdatud tekstuuri vĂ€ljundi suunamisega shendi sisendi poole. Seega saab iga piksel, mis kirjutatakse pikseli shendi tĂ€itmise protsessis, lugeda jĂ€rgmise kaadri töötlemisel.
Pikselishaderite kasutamisel kĂ€ivitatakse iga tekstuuri piksliga paralleelselt eraldi shadeerika. See omadus teeb elluviimise oluliselt keerulisemaks ja nĂ”uab kogu emuleeritud sĂŒsteemi oleku eraldi koordineerimist ning töödeldava piksliga seotud CPU oleku vĂ”i emuleeritud sĂŒsteemi RAM-i sisu kodeeritud positsiooni vastavust (iga piksel vĂ”ib kodeerida 128 bitti teavet). Shadeerikood nĂ”uab samas hiiglasliku arvu kontrollide kaasamist, mille teostamise hĂ”lbustamiseks on kasutatud perl-eelseisundit perlpp.

Allikas: opennet.ru
