他們設法在 VRChat 上的 RISC-V 模擬器上運行 Linux

幾天前 實驗結果公佈 基於啟動的組織 3D 虛擬空間中的 Linux 內核 的在線多人遊戲。

這個實驗 它是在 VRChat 上完成的,它允許使用自己的著色器加載 3D 模型. 為了實現構想的想法,創建了一個基於 RISC-V 架構的模擬器,它以像素著色器的形式在 GPU 端執行。

關於該項目

模擬器是基於C語言實現的, 反過來,他的創作使用了極簡主義 riscv-rust 模擬器的開發,而後者又是用 Rust 語言開發的。 準備好的C代碼被翻譯成HLSL語言的像素著色器,適合加載到VRChat中。

模擬器 為 rv32imasu 指令集架構提供全面支持, SV32 內存控制單元 和最少的外圍設備 (UART 和定時器)。 準備好的功能足以加載 Linux 內核 5.13.5 和 BusyBox 基本命令行環境,您可以直接從 VRChat 虛擬世界與之交互。

2021 年 250 月左右,我決定編寫一個能夠在 VRChat 中運行完整 Linux 內核的模擬器。 由於該平台的固有限制,所選工具必須是著色器。 經過幾個月的工作,我現在很自豪地在 HLSL 像素著色器中推出世界上第一個 RISC-V CPU / SoC 仿真器(我知道),能夠運行高達 2080 kHz(在 5.13.5 Ti 上)和使用 MMU 支持啟動 Linux XNUMX。

模擬器在著色器中以自己的動態紋理(Unity Custom Render Texture)的形式實現,輔以VRChat提供的Udon腳本,用於在運行時控制模擬器。

仿真係統的主存內容和處理器狀態保存為大小為2048×2048像素的紋理,從而使仿真處理器以250kHz的頻率運行。 除了 Linux,Micropython 也可以在模擬器上運行。

要運行 Linux,我認為我們至少需要 32 MiB 的主內存 (RAM),但讓我們安全一點,讓 64 - 性能差異不會很大,並且應該有足夠的 VRAM。

起初,主要的性能問題是時鐘速度。 即一幀能執行多少個CPU週期。

組織數據存儲 堅持閱讀和寫作的支持, 使用與使用鏈接到矩形區域的 Camera 對象相關的技巧 由著色器生成並將渲染紋理的輸出定向到著色器的輸入。 所以, 在像素著色器執行期間寫入的任何像素都可以通過處理下一幀來讀取。

應用像素著色器時,會為紋理中的每個像素並行觸發單獨的著色器實例。

此功能使實現顯著複雜化,並且需要單獨協調整個仿真係統的狀態,並將處理像素的位置與其中編碼的仿真係統的 CPU 或 RAM 內容的狀態進行比較(每個像素可以編碼 128 位的信息)。

在這種情況下,著色器代碼需要包含大量檢查,以簡化使用 perl 預處理器 perlpp 的實現。

對於那些 對規格感興趣 提到:

  • 代碼在 GitHub 上
  • 64 MiB 的 RAM 減去 CPU 狀態存儲在 2048 × 2048 像素 (128 bpp) 整數格式紋理中
  • 帶有緩衝區交換的 Unity 自定義渲染紋理允許幀之間的編碼/解碼狀態
  • 像素著色器用於仿真,因為 VRChat 不支持計算和無人機著色器

終於 如果您有興趣了解更多信息,您可以查看詳細信息 在下面的鏈接中。


成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。