VRChat-da Linuxni ishga tushirish imkonini beruvchi piksel shader ko'rinishidagi RISC-V emulyatori

3D modellarni o‘z shaderlari bilan yuklashga imkon beruvchi VRChat multiplayer onlayn o‘yinining virtual 3D maydonida Linuxni ishga tushirishni tashkil etish bo‘yicha tajriba natijalari e’lon qilindi. O'ylab topilgan g'oyani amalga oshirish uchun RISC-V arxitekturasining emulyatori yaratildi, u GPU tomonida piksel (fragment) shader ko'rinishida bajarildi (VRChat hisoblash shaderlari va UAVni qo'llab-quvvatlamaydi). Emulyator kodi MIT litsenziyasi ostida nashr etilgan.

Emulator C tilidagi dasturga asoslangan bo'lib, uni yaratishda o'z navbatida Rust tilida ishlab chiqilgan minimalistik riscv-rust emulyatorining ishlanmalaridan foydalanilgan. Tayyorlangan C kodi VRChat-ga yuklash uchun mos bo'lgan HLSL-da piksel shaderiga tarjima qilingan. Emulyator rv32imasu ko'rsatmalar to'plami arxitekturasini, SV32 xotira boshqaruv blokini va minimal tashqi qurilmalar to'plamini (UART va taymer) to'liq qo'llab-quvvatlaydi. Tayyorlangan imkoniyatlar Linux yadrosi 5.13.5 va asosiy BusyBox buyruq qatori muhitini yuklash uchun etarli bo'lib, u bilan VRChat virtual dunyosidan to'g'ridan-to'g'ri muloqot qilishingiz mumkin.

VRChat-da Linuxni ishga tushirish imkonini beruvchi piksel shader ko'rinishidagi RISC-V emulyatori
VRChat-da Linuxni ishga tushirish imkonini beruvchi piksel shader ko'rinishidagi RISC-V emulyatori

Emulyator shaderda o'zining dinamik teksturasi (Unity Custom Render Texture) ko'rinishida amalga oshiriladi, u VRChat uchun taqdim etilgan Udon skriptlari bilan to'ldiriladi va uni bajarish paytida emulyatorni boshqarish uchun ishlatiladi. Operativ xotira tarkibi va emulyatsiya qilingan tizimning protsessor holati 2048x2048 piksel o'lchamdagi tekstura shaklida saqlanadi. Emulyatsiya qilingan protsessor 250 kHz chastotada ishlaydi. Linuxdan tashqari, emulyator Micropython-ni ham ishga tushirishi mumkin.

VRChat-da Linuxni ishga tushirish imkonini beruvchi piksel shader ko'rinishidagi RISC-V emulyatori

O'qish va yozishni qo'llab-quvvatlaydigan doimiy ma'lumotlarni saqlashni yaratish uchun hiyla - bu shader tomonidan yaratilgan to'rtburchaklar maydonga bog'langan Kamera ob'ektidan foydalanish va ko'rsatilgan teksturaning chiqishini shader kiritishiga yo'naltirish. Shunday qilib, piksel shaderini bajarish paytida yozilgan har qanday piksel keyingi kadrga ishlov berilganda o'qilishi mumkin.

Piksel shaderlarini qo'llashda har bir tekstura pikseli uchun parallel ravishda alohida shader misoli ishga tushiriladi. Bu xususiyat amalga oshirishni sezilarli darajada murakkablashtiradi va butun emulyatsiya qilingan tizimning holatini alohida muvofiqlashtirishni va qayta ishlangan piksel o'rnini unda kodlangan CPU holati yoki emulyatsiya qilingan tizimning RAM tarkibi bilan taqqoslashni talab qiladi (har bir piksel 128 kodlashi mumkin). ma'lumotlarning bir qismi). Shader kodi juda ko'p sonli tekshiruvlarni kiritishni talab qiladi, ularni amalga oshirishni soddalashtirish uchun perl preprotsessoridan foydalanilgan.



Manba: opennet.ru

a Izoh qo'shish