RISC-V emulátor pixel shader formájában, amely lehetővé teszi a Linux futtatását VRChatban

Megjelentek annak a kísérletnek az eredményei, amely a VRChat többjátékos online játék virtuális 3D-s terében szervezi meg a Linux elindítását, amely lehetővé teszi a 3D modellek saját shaderekkel való betöltését. Az elgondolt ötlet megvalósítására a RISC-V architektúra emulátora készült, amelyet a GPU oldalon pixel (fragment) shader formájában hajtottak végre (a VRChat nem támogatja a számítási shadereket és az UAV-t). Az emulátor kódját az MIT licence alatt teszik közzé.

Az emulátor egy C nyelvű implementáción alapul, amelynek létrehozásához a Rust nyelven kifejlesztett minimalista riscv-rust emulátor fejlesztéseit használták fel. Az elkészített C kódot HLSL-ben pixel shader-be fordítjuk, amely alkalmas a VRChat-ba való betöltésre. Az emulátor teljes mértékben támogatja az rv32imasu utasításkészlet architektúrát, az SV32 memóriakezelő egységet és a perifériák minimális készletét (UART és időzítő). Az előkészített képességek elegendőek az 5.13.5-ös Linux kernel és az alapvető BusyBox parancssori környezet betöltéséhez, amellyel közvetlenül a VRChat virtuális világból tud kommunikálni.

RISC-V emulátor pixel shader formájában, amely lehetővé teszi a Linux futtatását VRChatban
RISC-V emulátor pixel shader formájában, amely lehetővé teszi a Linux futtatását VRChatban

Az emulátor a shaderben saját dinamikus textúra (Unity Custom Render Texture) formájában valósul meg, kiegészítve a VRChat számára biztosított Udon szkriptekkel, amelyek az emulátor vezérlésére szolgálnak a végrehajtás során. A RAM tartalma és az emulált rendszer processzorállapota textúra formájában, 2048x2048 pixel méretben kerül tárolásra. Az emulált processzor 250 kHz-es frekvencián működik. A Linux mellett az emulátor a Micropython futtatására is képes.

RISC-V emulátor pixel shader formájában, amely lehetővé teszi a Linux futtatását VRChatban

Az olvasást és írást támogató állandó adattárolás létrehozásához egy trükk az árnyékoló által generált téglalap alakú területhez kötött Kamera objektum használata, és a renderelt textúra kimenetét a shader bemenetére irányítja. Így a pixel shader végrehajtása során írt bármely képpont kiolvasható a következő képkocka feldolgozása során.

A pixel-shaderek alkalmazásakor minden textúrapixelhez párhuzamosan egy külön árnyékolópéldány indul. Ez a funkció jelentősen megnehezíti a megvalósítást, és megköveteli a teljes emulált rendszer állapotának külön koordinálását, valamint a feldolgozott pixel helyzetének összehasonlítását a benne kódolt CPU állapottal vagy az emulált rendszer RAM-jának tartalmával (minden pixel 128 kódolható információ bitek). A shader kód hatalmas számú ellenőrzést igényel, amelyek végrehajtásának egyszerűsítése érdekében a perl-előfeldolgozót perlpp használták.



Forrás: opennet.ru

Hozzászólás