RISC-V эмулятору, VRChat ичинде Linuxту иштетүүгө мүмкүндүк берген пикселдик шейдер түрүндөгү

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

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

RISC-V эмулятору, VRChat ичинде Linuxту иштетүүгө мүмкүндүк берген пикселдик шейдер түрүндөгү
RISC-V эмулятору, VRChat ичинде Linuxту иштетүүгө мүмкүндүк берген пикселдик шейдер түрүндөгү

Эмулятор шэйдерде өзүнүн динамикалык текстурасы (Unity Custom Render Texture) түрүндө ишке ашырылат, VRChat үчүн берилген Udon скрипттери менен толукталган, эмуляторду аткаруу учурунда башкаруу үчүн колдонулат. RAMдын мазмуну жана эмуляцияланган системанын процессорунун абалы текстура түрүндө, 2048x2048 пиксел өлчөмүндө сакталат. Эмуляцияланган процессор 250 кГц жыштыкта ​​иштейт. Linuxтан тышкары эмулятор Micropython да иштете алат.

RISC-V эмулятору, VRChat ичинде Linuxту иштетүүгө мүмкүндүк берген пикселдик шейдер түрүндөгү

Окуу жана жазууну колдогон туруктуу маалымат сактагычын түзүү үчүн, шэйдер тарабынан түзүлгөн тик бурчтуу аймакка байланган Камера объектисин колдонуу жана көрсөтүлгөн текстуранын чыгышын шейдердин киргизүүсүнө багыттоо. Ошентип, пиксел шейдеринин аткарылышы учурунда жазылган каалаган пикселди кийинки кадр иштетилгенде окууга болот.

Пикселдик шейдерлерди колдонууда ар бир текстура пиксели үчүн параллелдүү өзүнчө шейдер инстанциясы ишке киргизилет. Бул өзгөчөлүк ишке ашырууну кыйла татаалдантат жана бүт эмуляцияланган системанын абалын өзүнчө координациялоону жана иштетилген пикселдин абалын андагы коддолгон CPU абалы менен же эмуляцияланган системанын оперативдүү эс тутумунун мазмунун салыштырууну талап кылат (ар бир пиксел 128 коддой алат) маалымат бит). Шейдер коду көптөгөн текшерүүлөрдү киргизүүнү талап кылат, аны ишке ашырууну жөнөкөйлөтүү үчүн perl preprocessor perlpp колдонулган.



Source: opennet.ru

Комментарий кошуу