3D မော်ဒယ်များကို ၎င်းတို့၏ကိုယ်ပိုင် shaders များဖြင့် တင်ဆောင်ခွင့်ပြုသည့် multiplayer online game VRChat ၏ virtual 3D space အတွင်း Linux ကို လွှတ်တင်ရန် စီစဉ်ခြင်းဆိုင်ရာ စမ်းသပ်မှုရလဒ်များကို ထုတ်ပြန်လိုက်ပါပြီ။ စိတ်ကူးအကြံဉာဏ်ကို အကောင်အထည်ဖော်ရန်အတွက် RISC-V ဗိသုကာလက်ရာ၏ emulator တစ်ခုကို pixel (အပိုင်းပိုင်း) shader ပုံစံဖြင့် GPU ဘက်ခြမ်းတွင် လုပ်ဆောင်ခဲ့သည် (VRChat သည် တွက်ချက်မှုဆိုင်ရာ shaders နှင့် UAV ကို မပံ့ပိုးပါ)။ emulator ကုဒ်ကို MIT လိုင်စင်အောက်တွင် ထုတ်ဝေထားသည်။
emulator သည် C language တွင် အကောင်အထည်ဖော်မှုအပေါ် အခြေခံထားခြင်းဖြစ်ပြီး Rust ဘာသာစကားဖြင့် တီထွင်ထားသည့် minimalistic emulator riscv-rust ၏တိုးတက်မှုများကို အသုံးပြုထားသည့် ဖန်တီးမှုဖြစ်သည်။ ပြင်ဆင်ထားသော C ကုဒ်ကို HLSL ရှိ pixel shader သို့ ဘာသာပြန်ဆိုထားပြီး VRCChat တွင် တင်ရန် သင့်လျော်သည်။ emulator သည် rv32imasu ညွှန်ကြားချက်အစုံဗိသုကာ၊ SV32 မှတ်ဉာဏ်စီမံခန့်ခွဲမှုယူနစ်နှင့် အရံကိရိယာအစုံအလင် (UART နှင့် timer) အတွက် အပြည့်အဝပံ့ပိုးပေးပါသည်။ ပြင်ဆင်ထားသော စွမ်းရည်များသည် VRChat virtual world မှ တိုက်ရိုက် အပြန်အလှန် တုံ့ပြန်နိုင်သည့် အခြေခံ BusyBox command line ပတ်ဝန်းကျင်ကို တင်ရန် လုံလောက်ပါသည်။
emulator ကို ၎င်း၏ကွပ်မျက်စဉ်အတွင်း emulator ကို ထိန်းချုပ်ရန်အတွက် အသုံးပြုသည့် Udon scripts များဖြင့် ဖြည့်စွက်ထားသည့် ၎င်း၏ကိုယ်ပိုင် dynamic texture (Unity Custom Render Texture) ကို Shader တွင် အကောင်အထည်ဖော်ထားသည်။ RAM ၏ အကြောင်းအရာများနှင့် အတုယူစနစ်၏ ပရိုဆက်ဆာအခြေအနေတို့ကို အရွယ်အစား 2048x2048 ပစ်ဇယ်ပုံစံဖြင့် သိမ်းဆည်းထားသည်။ အတုယူထားသော ပရိုဆက်ဆာသည် ကြိမ်နှုန်း 250 kHz ဖြင့် လုပ်ဆောင်သည်။ Linux အပြင်၊ emulator သည် Micropython ကို run နိုင်သည်။
စာဖတ်ခြင်းနှင့် စာရေးခြင်းအတွက် ပံ့ပိုးမှုဖြင့် ဆက်တိုက်ဒေတာသိုလှောင်မှုကို ဖန်တီးရန်၊ လှည့်ကွက်တစ်ခုမှာ ကင်မရာအရာဝတ္ထုကို shader မှထုတ်ပေးသည့် စတုဂံဧရိယာနှင့် ချည်နှောင်ထားသော ကင်မရာကို အသုံးပြု၍ ပြန်ဆိုထားသော texture ၏ output ကို shader input သို့ ညွှန်ကြားခြင်းဖြစ်သည်။ ဤနည်းအားဖြင့်၊ pixel shader လုပ်ဆောင်မှုအတွင်း ရေးသားထားသည့် မည်သည့် pixel ကိုမဆို နောက်ဘောင်ကို လုပ်ဆောင်သောအခါတွင် ဖတ်နိုင်သည်။
pixel shaders ကိုအသုံးပြုသောအခါ၊ texture pixel တစ်ခုစီအတွက် သီးခြား shader instance ကို စတင်သည်။ ဤအင်္ဂါရပ်သည် အကောင်အထည်ဖော်မှုကို သိသာထင်ရှားစွာ ရှုပ်ထွေးစေပြီး အတုယူထားသော စနစ်တစ်ခုလုံး၏ အခြေအနေနှင့် သီးခြားပေါင်းစပ်ညှိနှိုင်းမှု လိုအပ်ပြီး ၎င်းတွင် ကုဒ်လုပ်ထားသော CPU အခြေအနေနှင့် လုပ်ဆောင်ပြီးသား pixel အနေအထားကို နှိုင်းယှဉ်ခြင်း သို့မဟုတ် အတုယူစနစ်၏ RAM ၏ အကြောင်းအရာများ (pixel တစ်ခုစီတွင် 128 ကုဒ်လုပ်နိုင်ပါသည်။ အချက်အလက်အနည်းငယ်)။ perl preprocessor perlpp ကို အသုံးပြုခဲ့သည့် အကောင်အထည်ဖော်မှုကို ရိုးရှင်းစေရန် Shader code သည် စစ်ဆေးမှုအများအပြားပါဝင်ရန်လိုအပ်ပါသည်။
source: opennet.ru