Një emulator RISC-V në formën e një shader pixel që ju lejon të ekzekutoni Linux në VRChat

Janë publikuar rezultatet e një eksperimenti për organizimin e lëshimit të Linux brenda hapësirës virtuale 3D të lojës online me shumë lojtarë VRChat, e cila lejon ngarkimin e modeleve 3D me shaderat e tyre. Për të zbatuar idenë e konceptuar, u krijua një emulator i arkitekturës RISC-V, i ekzekutuar në anën e GPU-së në formën e një shader piksel (fragmenti) (VRChat nuk mbështet shaders kompjuterike dhe UAV). Kodi i emulatorit publikohet nën licencën MIT.

Emulatori bazohet në një zbatim në gjuhën C, krijimi i të cilit, nga ana tjetër, përdori zhvillimet e emulatorit minimalist riscv-rust, të zhvilluar në gjuhën Rust. Kodi i përgatitur C përkthehet në një shader pikselësh në HLSL, i përshtatshëm për t'u ngarkuar në VRChat. Emulatori ofron mbështetje të plotë për arkitekturën e grupit të udhëzimeve rv32imasu, njësinë e menaxhimit të memories SV32 dhe një grup minimal pajisjesh periferike (UART dhe kohëmatës). Aftësitë e përgatitura janë të mjaftueshme për të ngarkuar kernelin Linux 5.13.5 dhe mjedisin bazë të linjës së komandës BusyBox, me të cilin mund të ndërveproni drejtpërdrejt nga bota virtuale VRChat.

Një emulator RISC-V në formën e një shader pixel që ju lejon të ekzekutoni Linux në VRChat
Një emulator RISC-V në formën e një shader pixel që ju lejon të ekzekutoni Linux në VRChat

Emulatori zbatohet në shader në formën e teksturës së tij dinamike (Unity Custom Render Texture), e plotësuar nga skriptet Udon të ofruara për VRChat, të përdorura për të kontrolluar emulatorin gjatë ekzekutimit të tij. Përmbajtja e RAM-it dhe gjendja e procesorit të sistemit të emuluar ruhen në formën e një teksture, me madhësi 2048x2048 piksele. Procesori i emuluar funksionon në një frekuencë prej 250 kHz. Përveç Linux-it, emulatori mund të ekzekutojë edhe Micropython.

Një emulator RISC-V në formën e një shader pixel që ju lejon të ekzekutoni Linux në VRChat

Për të krijuar ruajtje të vazhdueshme të të dhënave me mbështetje për lexim dhe shkrim, një mashtrim është të përdorni një objekt Kamera të lidhur në një zonë drejtkëndore të krijuar nga shader dhe të drejtoni daljen e teksturës së dhënë në hyrjen e shader. Në këtë mënyrë, çdo piksel i shkruar gjatë ekzekutimit të shaderit të pikselit mund të lexohet kur përpunohet kuadri tjetër.

Kur aplikoni shader pikselësh, një shembull i veçantë i hijezuesit hapet paralelisht për çdo piksel teksture. Kjo veçori e ndërlikon ndjeshëm zbatimin dhe kërkon një koordinim të veçantë të gjendjes së të gjithë sistemit të emuluar dhe krahasimin e pozicionit të pikselit të përpunuar me gjendjen e CPU të koduar në të ose përmbajtjen e RAM-it të sistemit të emuluar (çdo piksel mund të kodojë 128 copa informacioni). Kodi shader kërkon përfshirjen e një numri të madh kontrollesh, për të thjeshtuar zbatimin e të cilave u përdor paraprocesori perl perlpp.



Burimi: opennet.ru

Shto një koment