Usa ka RISC-V emulator sa porma sa usa ka pixel shader nga nagtugot kanimo sa pagpadagan sa Linux sa VRChat

Ang mga resulta sa usa ka eksperimento sa pag-organisar sa paglansad sa Linux sulod sa virtual 3D nga luna sa multiplayer online game VRChat, nga nagtugot sa pagkarga sa mga modelo sa 3D sa ilang kaugalingong mga shaders, gipatik. Aron ipatuman ang gipanamkon nga ideya, usa ka emulator sa RISC-V nga arkitektura ang gihimo, gipatuman sa kilid sa GPU sa porma sa pixel (fragment) shader (VRChat wala mosuporta sa computational shaders ug UAV). Ang emulator code gipatik ubos sa lisensya sa MIT.

Ang emulator gibase sa usa ka pagpatuman sa C nga pinulongan, ang paghimo niini, sa baylo, gigamit ang mga kalamboan sa minimalistic emulator riscv-rust, naugmad sa Rust nga pinulongan. Ang giandam nga C code gihubad ngadto sa pixel shader sa HLSL, nga angay alang sa pagkarga sa VRChat. Ang emulator naghatag og bug-os nga suporta alang sa rv32imasu instruction set architecture, ang SV32 memory management unit, ug gamay nga set sa peripheral (UART ug timer). Ang giandam nga mga kapabilidad igo na aron ma-load ang Linux kernel 5.13.5 ug ang sukaranan nga BusyBox command line environment, diin mahimo ka nga direktang makig-uban gikan sa virtual nga kalibutan sa VRChat.

Usa ka RISC-V emulator sa porma sa usa ka pixel shader nga nagtugot kanimo sa pagpadagan sa Linux sa VRChat
Usa ka RISC-V emulator sa porma sa usa ka pixel shader nga nagtugot kanimo sa pagpadagan sa Linux sa VRChat

Ang emulator gipatuman sa shader sa porma sa kaugalingon nga dinamikong texture (Unity Custom Render Texture), nga gidugangan sa mga script sa Udon nga gihatag alang sa VRChat, gigamit aron makontrol ang emulator sa panahon sa pagpatuman niini. Ang mga sulud sa RAM ug ang kahimtang sa processor sa gisundog nga sistema gitipigan sa porma sa usa ka texture, 2048x2048 nga mga piksel ang kadako. Ang gisunod nga processor naglihok sa frequency nga 250 kHz. Dugang sa Linux, ang emulator mahimo usab nga modagan sa Micropython.

Usa ka RISC-V emulator sa porma sa usa ka pixel shader nga nagtugot kanimo sa pagpadagan sa Linux sa VRChat

Aron makahimo og padayon nga pagtipig sa datos nga adunay suporta alang sa pagbasa ug pagsulat, ang usa ka lansis mao ang paggamit sa usa ka butang sa Camera nga gigapos sa usa ka rectangular area nga gihimo sa shader ug idirekta ang output sa gihubad nga texture ngadto sa shader input. Niining paagiha, ang bisan unsang pixel nga gisulat atol sa pixel shader execution mahimong mabasa kung ang sunod nga frame giproseso.

Kung nag-aplay sa mga pixel shader, usa ka bulag nga pananglitan sa shader ang gilansad nga managsama alang sa matag texture pixel. Ang kini nga bahin labi ka komplikado sa pagpatuman ug nanginahanglan lahi nga koordinasyon sa estado sa tibuuk nga sistema nga gisundog ug pagtandi sa posisyon sa giproseso nga pixel sa estado sa CPU nga gi-encode niini o ang sulud sa RAM sa gisundog nga sistema (ang matag pixel mahimong mag-encode sa 128 tipik sa impormasyon). Ang shader code nagkinahanglan sa paglakip sa usa ka dako nga gidaghanon sa mga tseke, aron pasimplehon ang pagpatuman diin ang perl preprocessor perlpp gigamit.



Source: opennet.ru

Idugang sa usa ka comment