像素著色器形式的 RISC-V 模擬器,可讓您在 VRChat 中運行 Linux

在多人線上遊戲 VRChat 的虛擬 3D 空間內組織 Linux 啟動的實驗結果已經發布,該遊戲允許使用自己的著色器載入 3D 模型。 為了實現設想的想法,創建了 RISC-V 架構的模擬器,以像素(片段)著色器的形式在 GPU 端執行(VRChat 不支援計算著色器和無人機)。 模擬器程式碼根據 MIT 許可證發布。

該模擬器基於 C 語言的實現,其創建又使用了以 Rust 語言開發的簡約模擬器 riscv-rust 的開發成果。 準備好的C程式碼翻譯成HLSL中的像素著色器,適合載入到VRChat中。 此模擬器全面支援 rv32imasu 指令集架構、SV32 記憶體管理單元和最少的周邊集(UART 和定時器)。 準備好的功能足以載入Linux核心5.13.5和基本的BusyBox命令列環境,您可以直接從VRChat虛擬世界進行互動。

像素著色器形式的 RISC-V 模擬器,可讓您在 VRChat 中運行 Linux
像素著色器形式的 RISC-V 模擬器,可讓您在 VRChat 中運行 Linux

模擬器在著色器中以自己的動態紋理(Unity自訂渲染紋理)的形式實現,並輔以為VRChat提供的Udon腳本,用於在模擬器執行過程中控制模擬器。 RAM 的內容和模擬系統的處理器狀態以紋理的形式存儲,大小為 2048x2048 像素。 模擬處理器的運作頻率為 250 kHz。 除了Linux之外,模擬器還可以運行Micropython。

像素著色器形式的 RISC-V 模擬器,可讓您在 VRChat 中運行 Linux

要建立支援讀寫的持久性資料存儲,一個技巧是使用綁定到著色器生成的矩形區域的 Camera 對象,並將渲染紋理的輸出定向到著色器輸入。 這樣,在處理下一幀時,可以讀取在像素著色器執行期間寫入的任何像素。

應用像素著色器時,將為每個紋理像素並行啟動一個單獨的著色器實例。 此功能使實現變得非常複雜,並且需要單獨協調整個仿真係統的狀態,並將處理的像素的位置與編碼在其中的 CPU 狀態或仿真係統的 RAM 的內容進行比較(每個像素可以編碼 128信息位元). 著色器程式碼需要包含大量檢查,以簡化使用 perl 預處理器 perlpp 的實作。



來源: opennet.ru

添加評論