Эмулятар RISC-V у форме піксельнага шэйдара, які дазволіў запусціць Linux у VRChat

Апублікаваныя вынікі эксперыменту па арганізацыі запуску Linux усярэдзіне віртуальнай 3D-прасторы шматкарыстальніцкай online-гульні VRChat, якая дапускае загрузку 3D-мадэляў са сваімі шэйдарамі. Для рэалізацыі задуманай ідэі быў створаны эмулятар архітэктуры RISC-V, які выконваецца на баку GPU у выглядзе піксельнага (фрагментнага) шэйдара (VRChat не падтрымлівае вылічальныя шэйдары і UAV). Код эмулятара апублікаваны пад ліцэнзіяй MIT.

У аснове эмулятара закладзена рэалізацыя на мове Сі, пры стварэнні якой, у сваю чаргу, скарыстаны напрацоўкі мінімалістычнага эмулятара riscv-rust, які развіваецца на мове Rust. Падрыхтаваны Сі-код транслюецца ў піксельны шэйдар на мове HLSL, прыдатны для загрузкі ў VRChat. У эмулятары падаецца поўная падтрымка архітэктуры набору каманд rv32imasu, блок кіравання памяццю SV32 і мінімальны набор перыферыйных прылад (UART і таймер). Падрыхтаваных магчымасцяў дастаткова для загрузкі ядра Linux 5.13.5 і базавага асяроддзя каманднага радка BusyBox, з якім можна ўзаемадзейнічаць напрамую з віртуальнага свету VRChat.

Эмулятар RISC-V у форме піксельнага шэйдара, які дазволіў запусціць Linux у VRChat
Эмулятар RISC-V у форме піксельнага шэйдара, які дазволіў запусціць Linux у VRChat

Эмулятар рэалізаваны ў шэйдары ў форме ўласнай дынамічнай тэкстуры (Unity Custom Render Texture), дапоўненай якія прадстаўляюцца для VRChat скрыптамі Udon, задзейнічанымі для кіравання эмулятарам падчас яго выканання. Змесціва аператыўнай памяці і стан працэсара эмуляванай сістэмы захоўваецца ў форме тэкстуры, памерам 2048×2048 пікселяў. Эмуляваны працэсар працуе з частатой 250 kHz. Акрамя Linux у эмуялтары таксама можа быць запушчаны Micropython.

Эмулятар RISC-V у форме піксельнага шэйдара, які дазволіў запусціць Linux у VRChat

Для арганізацыі сталага захоўвання дадзеных з падтрымкай чытання і запісы ўжываецца трук, злучаны з выкарыстаннем аб'екта Camera, прывязанага да прастакутнай вобласці, генераванай шэйдарам, і кірункам высновы отрисовываемой тэкстуры на ўваход шэйдара. Такім чынам любы піксель, запісаны падчас выкананні піксельнага шэйдара, можа быць прачытаны пры апрацоўцы наступнага кадра.

Пры ўжыванні піксельных шэйдараў для кожнага пікселя тэкстуры паралельна запускаецца асобны асобнік шэйдара. Дадзеная асаблівасць істотна ўскладняе рэалізацыю і патрабуе асобнай каардынацыі стану ўсёй эмуляванай сістэмы і супастаўленні пазіцыі апрацоўванага пікселя з закадаванымі ў ім станам CPU або змесцівам АЗП эмуляванай сістэмы (кожны піксель можа кадзіраваць 128 біт інфармацыі). Код шэйдара пры гэтым патрабуе ўключэння вялікай колькасці праверак, для спрашчэння рэалізацыі якіх быў задзейнічаны perl-препроцессор perlpp.



Крыніца: opennet.ru

Дадаць каментар