Linux'u VRChat'te çalıştırmanıza olanak tanıyan piksel gölgelendirici biçiminde bir RISC-V emülatörü

3D modellerin kendi gölgelendiricileriyle yüklenmesine olanak tanıyan çok oyunculu çevrimiçi oyun VRChat'in sanal 3D alanı içinde Linux'un başlatılmasını organize etmeye yönelik bir deneyin sonuçları yayınlandı. Tasarlanan fikri uygulamak için, GPU tarafında bir piksel (parça) gölgelendirici (VRChat hesaplamalı gölgelendiricileri ve İHA'yı desteklemez) biçiminde yürütülen RISC-V mimarisinin bir emülatörü oluşturuldu. Emülatör kodu MIT lisansı altında yayınlanmaktadır.

Emülatör, C dilindeki bir uygulamaya dayanmaktadır ve bunun oluşturulmasında Rust dilinde geliştirilen minimalist emülatör riscv-rust'un geliştirmeleri kullanılmıştır. Hazırlanan C kodu, VRChat'e yüklenmeye uygun, HLSL'deki bir piksel gölgelendiriciye çevrilir. Emülatör, rv32imasu komut seti mimarisi, SV32 bellek yönetim birimi ve minimum sayıda çevre birimi seti (UART ve zamanlayıcı) için tam destek sağlar. Hazırlanan yetenekler, VRChat sanal dünyasından doğrudan etkileşim kurabileceğiniz Linux çekirdeği 5.13.5'i ve temel BusyBox komut satırı ortamını yüklemek için yeterlidir.

Linux'u VRChat'te çalıştırmanıza olanak tanıyan piksel gölgelendirici biçiminde bir RISC-V emülatörü
Linux'u VRChat'te çalıştırmanıza olanak tanıyan piksel gölgelendirici biçiminde bir RISC-V emülatörü

Emülatör, gölgelendiricide, VRChat için sağlanan Udon komut dosyalarıyla desteklenen ve çalıştırılması sırasında emülatörü kontrol etmek için kullanılan kendi dinamik dokusu (Unity Custom Render Texture) biçiminde uygulanır. Taklit edilen sistemin RAM içeriği ve işlemci durumu, 2048x2048 piksel boyutunda bir doku biçiminde depolanır. Öykünülmüş işlemci 250 kHz frekansında çalışır. Emülatör, Linux'un yanı sıra Micropython'u da çalıştırabilir.

Linux'u VRChat'te çalıştırmanıza olanak tanıyan piksel gölgelendirici biçiminde bir RISC-V emülatörü

Okuma ve yazma desteğiyle kalıcı veri depolaması oluşturmak için gölgelendirici tarafından oluşturulan dikdörtgen bir alana bağlı bir Kamera nesnesi kullanmak ve oluşturulan dokunun çıktısını gölgelendirici girişine yönlendirmektir. Bu şekilde, piksel gölgelendiricinin yürütülmesi sırasında yazılan herhangi bir piksel, bir sonraki kare işlendiğinde okunabilir.

Piksel gölgelendiricileri uygularken, her doku pikseli için paralel olarak ayrı bir gölgelendirici örneği başlatılır. Bu özellik, uygulamayı önemli ölçüde karmaşıklaştırır ve tüm öykünülmüş sistemin durumunun ayrı bir koordinasyonunu ve işlenen pikselin konumunun, içinde kodlanan CPU durumuyla veya öykünmüş sistemin RAM içeriğiyle karşılaştırılmasını gerektirir (her piksel 128'i kodlayabilir) biraz bilgi). Gölgelendirici kodu, perl ön işlemcisi perlpp'nin kullanıldığı uygulamayı basitleştirmek için çok sayıda kontrolün dahil edilmesini gerektirir.



Kaynak: opennet.ru

Yorum ekle