Isang RISC-V emulator sa anyo ng isang pixel shader na nagbibigay-daan sa iyong patakbuhin ang Linux sa VRChat

Ang mga resulta ng isang eksperimento sa pag-aayos ng paglulunsad ng Linux sa loob ng virtual na 3D space ng multiplayer online game VRChat, na nagpapahintulot sa pag-load ng mga 3D na modelo gamit ang kanilang sariling mga shader, ay nai-publish. Upang ipatupad ang naisip na ideya, nilikha ang isang emulator ng arkitektura ng RISC-V, na isinagawa sa gilid ng GPU sa anyo ng isang pixel (fragment) shader (Hindi sinusuportahan ng VRChat ang mga computational shaders at UAV). Ang emulator code ay nai-publish sa ilalim ng lisensya ng MIT.

Ang emulator ay batay sa isang pagpapatupad sa wikang C, ang paglikha nito, sa turn, ay ginamit ang mga pagpapaunlad ng minimalistic emulator riscv-rust, na binuo sa wikang Rust. Ang inihandang C code ay isinalin sa isang pixel shader sa HLSL, na angkop para sa paglo-load sa VRChat. Ang emulator ay nagbibigay ng buong suporta para sa rv32imasu instruction set architecture, ang SV32 memory management unit, at isang minimal na set ng peripheral (UART at timer). Ang mga inihandang kakayahan ay sapat na upang mai-load ang Linux kernel 5.13.5 at ang pangunahing BusyBox command line environment, kung saan maaari kang direktang makipag-ugnayan mula sa virtual na mundo ng VRChat.

Isang RISC-V emulator sa anyo ng isang pixel shader na nagbibigay-daan sa iyong patakbuhin ang Linux sa VRChat
Isang RISC-V emulator sa anyo ng isang pixel shader na nagbibigay-daan sa iyong patakbuhin ang Linux sa VRChat

Ang emulator ay ipinatupad sa shader sa anyo ng sarili nitong dynamic na texture (Unity Custom Render Texture), na dinagdagan ng mga script ng Udon na ibinigay para sa VRChat, na ginagamit upang kontrolin ang emulator sa panahon ng pagpapatupad nito. Ang mga nilalaman ng RAM at ang estado ng processor ng emulated system ay naka-imbak sa anyo ng isang texture, 2048x2048 pixels ang laki. Ang emulated processor ay gumagana sa dalas ng 250 kHz. Bilang karagdagan sa Linux, ang emulator ay maaari ding magpatakbo ng Micropython.

Isang RISC-V emulator sa anyo ng isang pixel shader na nagbibigay-daan sa iyong patakbuhin ang Linux sa VRChat

Upang lumikha ng paulit-ulit na pag-iimbak ng data na may suporta para sa pagbabasa at pagsusulat, ang isang trick ay ang paggamit ng object ng Camera na nakatali sa isang rectangular area na nabuo ng shader at idirekta ang output ng na-render na texture sa shader input. Sa ganitong paraan, mababasa ang anumang pixel na nakasulat sa panahon ng pixel shader execution kapag naproseso ang susunod na frame.

Kapag nag-aaplay ng mga pixel shader, ang isang hiwalay na instance ng shader ay inilulunsad nang magkatulad para sa bawat texture pixel. Ang tampok na ito ay makabuluhang kumplikado sa pagpapatupad at nangangailangan ng hiwalay na koordinasyon ng estado ng buong emulated system at paghahambing ng posisyon ng naprosesong pixel sa estado ng CPU na naka-encode dito o ang mga nilalaman ng RAM ng emulated system (bawat pixel ay maaaring mag-encode ng 128 mga piraso ng impormasyon). Ang shader code ay nangangailangan ng pagsasama ng isang malaking bilang ng mga tseke, upang gawing simple ang pagpapatupad kung saan ginamit ang perl preprocessor perlpp.



Pinagmulan: opennet.ru

Magdagdag ng komento