Daniel Almeida, som arbetar med videokodekar pÄ Collabora, publicerade en initial implementation av drivrutinen Tyr för GPU ARM Mali, dÀr teknologin CSF (Command Stream Frontend) anvÀnds, för modeller som Mali G310, G510 och G710. Drivrutinens kod Àr skriven i Rust och omfattar lite mer Àn 600 rader kod. Arbetet med drivrutinen Tyr pÄgÄr i samarbete mellan medarbetare frÄn Collabora, Arm och Google.
Som grund för den nya drivrutinen har komponenter frÄn den abstrakta drivrutinen rust_platform_driver och drivrutinen Nova, som utvecklas för NVIDIA GPU, anvÀnts, vilken Àr skriven i Rust och delvis tillagd i kÀrnan 6.15. Funktionaliteten för interaktion med GPU Mali har portats frÄn den befintliga DRM-drivrutinen Panthor (Direct Rendering Manager), som Àr skriven i C. uAPI för drivrutinen Tyr Àr identiskt med uAPI för drivrutinen Panthor, vilket gör att befintliga komponenter för anvÀndarrummet kan anvÀndas.
CSF-teknologin, som anvÀnds med GPU Mali i 10:e generationen och framÄt, Àr anmÀrkningsvÀrd för att vissa drivrutinsfunktioner har flyttats till firmware-sidan och för att en ny modell för arbetsutförande pÄ GPU har involverats. Med GPU:er med CSF-grÀnssnitt anvÀnds en modell baserad pÄ kommandoström istÀllet för en modell baserad pÄ att skicka arbetskedjor. För att organisera schemalÀggarens funktion har en separat mikrocontroller, Cortex-M7, integrerats i GPU:n och en speciell krets för kommandogenomförande (Command Execution Unit) har avsatts för utförande av CSF-instruktioner.
Funktionaliteten hos Tyr ligger för nÀrvarande efter drivrutinen Panthor, men utvecklarna avser att successivt minska avstÄndet tills paritet i drivrutinsfunktioner uppnÄs. De saknade funktionerna krÀver integrering av ytterligare abstraktioner i kÀrnan för att skapa drivrutiner i Rust, varför utvecklingen av drivrutinen Tyr kommer att synkroniseras med tillÀgg av dessa abstraktioner i kÀrnan. Till exempel saknas möjligheter för minnesmappning i Rust-drivrutiner för GPU, som utvecklas i en Ànnu inte antagen uppsÀttning patchar för GPUVM.
KĂ€lla: opennet.ru
