Trình mô phỏng RISC-V ở dạng trình đổ bóng pixel cho phép bạn chạy Linux trong VRChat

Kết quả thử nghiệm tổ chức ra mắt Linux bên trong không gian 3D ảo của trò chơi trực tuyến nhiều người chơi VRChat, cho phép tải các mô hình 3D bằng shader riêng, đã được công bố. Để thực hiện ý tưởng đã hình thành, một trình mô phỏng kiến ​​trúc RISC-V đã được tạo ra, thực thi ở phía GPU dưới dạng trình đổ bóng pixel (đoạn) (VRChat không hỗ trợ trình đổ bóng tính toán và UAV). Mã giả lập được xuất bản theo giấy phép MIT.

Trình mô phỏng dựa trên việc triển khai bằng ngôn ngữ C, việc tạo ra nó, lần lượt sử dụng các phát triển của trình mô phỏng tối giản riscv-rust, được phát triển bằng ngôn ngữ Rust. Mã C đã chuẩn bị sẽ được dịch sang trình đổ bóng pixel trong HLSL, phù hợp để tải vào VRChat. Trình mô phỏng cung cấp hỗ trợ đầy đủ cho kiến ​​trúc tập lệnh rv32imasu, bộ quản lý bộ nhớ SV32 và một bộ thiết bị ngoại vi tối thiểu (UART và bộ hẹn giờ). Các khả năng được chuẩn bị sẵn đủ để tải nhân Linux 5.13.5 và môi trường dòng lệnh BusyBox cơ bản mà bạn có thể tương tác trực tiếp từ thế giới ảo VRChat.

Trình mô phỏng RISC-V ở dạng trình đổ bóng pixel cho phép bạn chạy Linux trong VRChat
Trình mô phỏng RISC-V ở dạng trình đổ bóng pixel cho phép bạn chạy Linux trong VRChat

Trình mô phỏng được triển khai trong trình đổ bóng dưới dạng kết cấu động của riêng nó (Unity Custom RenderText), được bổ sung bởi các tập lệnh Udon được cung cấp cho VRChat, được sử dụng để điều khiển trình mô phỏng trong quá trình thực thi. Nội dung của RAM và trạng thái bộ xử lý của hệ thống mô phỏng được lưu trữ dưới dạng kết cấu, kích thước 2048x2048 pixel. Bộ xử lý mô phỏng hoạt động ở tần số 250 kHz. Ngoài Linux, trình giả lập cũng có thể chạy Micropython.

Trình mô phỏng RISC-V ở dạng trình đổ bóng pixel cho phép bạn chạy Linux trong VRChat

Để tạo bộ lưu trữ dữ liệu liên tục có hỗ trợ đọc và ghi, một mẹo nhỏ là sử dụng đối tượng Camera được liên kết với một khu vực hình chữ nhật do trình đổ bóng tạo ra và hướng đầu ra của kết cấu được hiển thị tới đầu vào của trình đổ bóng. Bằng cách này, bất kỳ pixel nào được ghi trong quá trình thực thi pixel shader đều có thể được đọc khi khung tiếp theo được xử lý.

Khi áp dụng trình đổ bóng pixel, một phiên bản trình đổ bóng riêng biệt sẽ được khởi chạy song song cho từng pixel kết cấu. Tính năng này làm phức tạp đáng kể việc triển khai và yêu cầu sự phối hợp riêng biệt về trạng thái của toàn bộ hệ thống được mô phỏng và so sánh vị trí của pixel được xử lý với trạng thái CPU được mã hóa trong đó hoặc nội dung RAM của hệ thống được mô phỏng (mỗi pixel có thể mã hóa 128 bit thông tin). Mã đổ bóng yêu cầu bao gồm một số lượng lớn các bước kiểm tra, để đơn giản hóa việc triển khai bộ tiền xử lý perlpp đã được sử dụng.



Nguồn: opennet.ru

Thêm một lời nhận xét