Емулатор RISC-V во форма на шејдер за пиксели што ви овозможува да стартувате Linux во VRChat

Објавени се резултатите од експериментот за организирање лансирање на Linux во виртуелниот 3D простор на мултиплеер онлајн играта VRChat, кој овозможува вчитување на 3D модели со сопствени шејдери. За имплементација на замислената идеја, создаден е емулатор на архитектурата RISC-V, извршен на страната на графичкиот процесор во форма на шејдер за пиксели (фрагмент) (VRChat не поддржува пресметковни шејдери и UAV). Кодот на емулаторот е објавен под лиценцата MIT.

Емулаторот се заснова на имплементација на јазикот C, за чие создавање, пак, се користеше развојот на минималистичкиот емулатор riscv-rust, развиен во јазикот Rust. Подготвениот C код е преведен во шејдер за пиксели во HLSL, погоден за вчитување во VRChat. Емулаторот обезбедува целосна поддршка за архитектурата на сет на инструкции rv32imasu, единицата за управување со меморијата SV32 и минимален сет на периферни уреди (UART и тајмер). Подготвените можности се доволни за да се вчита кернелот на Linux 5.13.5 и основната околина на командната линија BusyBox, со која можете директно да комуницирате од виртуелниот свет VRChat.

Емулатор RISC-V во форма на шејдер за пиксели што ви овозможува да стартувате Linux во VRChat
Емулатор RISC-V во форма на шејдер за пиксели што ви овозможува да стартувате Linux во VRChat

Емулаторот е имплементиран во шејдер во форма на сопствена динамична текстура (Unity Custom Render Texture), дополнета со Udon скрипти обезбедени за VRChat, кои се користат за контрола на емулаторот за време на неговото извршување. Содржината на RAM меморијата и состојбата на процесорот на емулираниот систем се чуваат во форма на текстура со големина 2048x2048 пиксели. Емулираниот процесор работи на фреквенција од 250 kHz. Покрај Linux, емулаторот може да работи и Micropython.

Емулатор RISC-V во форма на шејдер за пиксели што ви овозможува да стартувате Linux во VRChat

За да создадете постојано складирање на податоци со поддршка за читање и пишување, трик е да користите објект на Камера врзан за правоаголна област генерирана од шејдерот и да го насочите излезот од рендерираната текстура кон влезот на шејдерот. На овој начин, секој пиксел напишан за време на извршувањето на шејдерот на пиксели може да се прочита кога ќе се обработи следната рамка.

При примена на шејдери на пиксели, паралелно се активира посебен примерок на шејдер за секој пиксел на текстура. Оваа карактеристика значително ја отежнува имплементацијата и бара посебна координација на состојбата на целиот емулиран систем и споредба на положбата на обработениот пиксел со состојбата на процесорот кодирана во него или содржината на RAM меморијата на емулираниот систем (секој пиксел може да шифрира 128 делови од информации). Шејдер-кодот бара вклучување на огромен број проверки, за да се поедностави чија имплементација беше користен perl preprocessor perlpp.



Извор: opennet.ru

Додадете коментар