VRChat жүйесінде Linux жүйесін іске қосуға мүмкіндік беретін пиксельдік шейдер түріндегі RISC-V эмуляторы

Өз шейдерлері бар 3D модельдерін жүктеуге мүмкіндік беретін VRChat мультиплеер онлайн ойынының виртуалды 3D кеңістігінде Linux-ті іске қосуды ұйымдастыру экспериментінің нәтижелері жарияланды. Ойланған идеяны жүзеге асыру үшін GPU жағында пиксельдік (фрагменттік) шейдер түрінде орындалатын RISC-V архитектурасының эмуляторы жасалды (VRChat есептеу шейдерлері мен UAV-ны қолдамайды). Эмулятор коды MIT лицензиясы бойынша жарияланған.

Эмулятор Си тіліндегі іске асыруға негізделген, оны құру өз кезегінде Rust тілінде әзірленген riscv-rust минималистік эмуляторының әзірлемелерін пайдаланды. Дайындалған C коды VRChat-қа жүктеуге жарамды HLSL-де пиксельдік шейдерге аударылады. Эмулятор rv32imasu нұсқаулар жинағы архитектурасына, SV32 жадты басқару блогына және перифериялық құрылғылардың ең аз жиынтығына (UART және таймер) толық қолдау көрсетеді. Дайындалған мүмкіндіктер Linux ядросының 5.13.5 және VRChat виртуалды әлемінен тікелей әрекеттесе алатын негізгі BusyBox пәрмен жолы ортасын жүктеуге жеткілікті.

VRChat жүйесінде Linux жүйесін іске қосуға мүмкіндік беретін пиксельдік шейдер түріндегі RISC-V эмуляторы
VRChat жүйесінде Linux жүйесін іске қосуға мүмкіндік беретін пиксельдік шейдер түріндегі RISC-V эмуляторы

Эмулятор шэйдерде өзінің динамикалық құрылымы (Unity Custom Render Texture) түрінде жүзеге асырылады, VRChat үшін берілген Udon сценарийлерімен толықтырылған, оны орындау кезінде эмуляторды басқару үшін пайдаланылады. ЖЖҚ мазмұны және эмуляцияланған жүйенің процессор күйі 2048x2048 пиксель өлшемімен текстура түрінде сақталады. Эмуляцияланған процессор 250 кГц жиілікте жұмыс істейді. Linux-тен басқа эмулятор Micropython-ды да іске қоса алады.

VRChat жүйесінде Linux жүйесін іске қосуға мүмкіндік беретін пиксельдік шейдер түріндегі RISC-V эмуляторы

Оқу мен жазуды қолдайтын тұрақты деректер қоймасын жасау үшін, шэйдер жасаған тікбұрышты аймаққа байланыстырылған Камера нысанын пайдалану және көрсетілген текстураның шығысын шейдер кірісіне бағыттау. Осылайша, пиксель шейдерін орындау кезінде жазылған кез келген пикселді келесі кадр өңделген кезде оқуға болады.

Пиксельдік шейдерлерді қолданған кезде әрбір текстура пикселі үшін жеке шейдер данасы параллельді түрде іске қосылады. Бұл мүмкіндік іске асыруды айтарлықтай қиындатады және бүкіл эмуляцияланған жүйенің күйін бөлек үйлестіруді және өңделген пикселдің орнын онда кодталған орталық процессордың күйімен немесе эмуляцияланған жүйенің жедел жадының мазмұнымен салыстыруды талап етеді (әр пиксель 128 бит ақпаратты кодтау). Шейдер коды іске асыруды жеңілдету үшін Perl препроцессоры perlpp пайдаланылған көптеген тексерулерді қосуды талап етеді.



Ақпарат көзі: opennet.ru

пікір қалдыру