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

Публикувани са резултатите от експеримента за организация на стартиране на Linux вътре в виртуалното 3D пространство на многопотребителската онлайн игра VRChat, позволяваща зареждане на 3D модели със собствени шейдъри. За реализиране на замислената идея беше създаден емулатор на архитектурата RISC-V, изпълняван на страната на GPU под формата на пикселен (фрагментен) шейдър (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, които се използват за управление на емулатора по време на неговото изпълнение. Съдържанието на оперативната памет и състоянието на процесора на емулираната система се запазват под формата на текстура с размер 2048×2048 пиксела. Емулираният процесор работи с честота 250 kHz. Освен Linux, в емулатора също може да бъде стартиран Micropython.

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

За организация на постоянното съхранение на данни с поддръжка на четене и запис се прилага трик, свързан с използването на обект Camera, свързан с правоъгълната област, генерирана от шейдъра, и посоката на извеждане на рисуваната текстура на входа на шейдъра. По този начин всеки пиксел, записан по време на изпълнението на пикселния шейдър, може да бъде прочетен при обработката на следващия кадър.

При прилагане на пикселни шейдъри за всеки пиксел на текстурата паралелно се стартира отделен екземпляр на шейдъра. Тази характеристика значително усложнява реализацията и изисква отделна координация на състоянието на цялата емулирана система и съпоставяне на позицията на обработвания пиксел с кодираното в него състояние на CPU или съдържанието на RAM на емулираната система (всеки пиксел може да кодира 128 бита информация). Кодът на шейдъра в този случай изисква включването на огромен брой проверки, за опростяването на реализацията на които е бил използван perl-препроцесор perlpp.

Пуснете видеото


Източник: opennet.ru
Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster