Novica je bila objavljena pred kratkim predlagana je bila predhodna izvedba gonilnika drm-asahi za serijske grafične procesorje Apple AGX G13 in G14, uporabljena v čipih Apple M1 in M2 na poštnem seznamu razvijalcev jedra Linuxa.
Krmilnik je napisan v Rustu plus, vključuje nabor univerzalnih povezav o podsistemu DRM (Direct Rendering Manager), ki se lahko uporablja za razvoj drugih grafičnih gonilnikov v Rust.
Izdan komplet popravkov do zdaj je bil predlagan samo za razpravo s strani osrednjih razvijalcev (RFC), vendar je lahko sprejet v ožjo ekipo, ko je pregled zaključen in so ugotovljene pomanjkljivosti odstranjene.
To je moja prva različica abstrakcij Rust za DRM podsistem. Vključuje same abstrakcije, nekatere manjše predpogojne spremembe na strani C kot tudi gonilnik GPE drm-asahi (za referenco o tem, kako se uporabljajo abstrakcije, vendar ne nujno nameravajo pristati skupaj).
Ti popravki so nameščeni na vrhu drevesa v [1], ki temelji na 6.3-rc1 z veliko dodanih potrditev podpore za abstrakcijo/Rust nad. Večina teh ni predpogojev za abstrakcije DRM. sami, ampak samo od voznika.
Od decembra je krmilnik vključen v paket z jedrom za distribucijo Asahi Linux in so ga preizkusili uporabniki tega projekta.
Gonilnik je mogoče uporabiti v distribucijah Linuxa urediti grafično okolje v dNaprave Apple s SoC M1, M1 Pro, M1 Max, M1 Ultra in M2. Pri razvoju gonilnika smo poskušali ne samo povečati varnost z zmanjšanjem napak pri delu s pomnilnikom v kodi, ki se izvaja na strani CPU, ampak tudi delno zaščititi pred težavami, ki nastanejo pri interakciji z vdelano programsko opremo.
Še posebej gonilnik zagotavlja določene vezave za skupne pomnilniške strukture ni varen s kompleksnimi nizi kazalcev, ki se uporabljajo v vdelani programski opremi za interakcijo s krmilnikom. Predlagani gonilnik se uporablja v povezavi z gonilnikom asahi Mesa, ki zagotavlja podporo za OpenGL v uporabniškem prostoru in uspešno opravi testiranje združljivosti z OpenGL ES 2. in je skoraj pripravljen za podporo OpenGL ES 3.0.
Hkrati gonilnik, ki deluje na ravni jedra je prvotno razvit z mislijo na prihodnjo podporo za API Vulkan, programski vmesnik za interakcijo z uporabniškim prostorom pa je zasnovan ob upoštevanju UAPI, ki ga zagotavlja novi gonilnik Intel Xe.
Nad znane težave omenjeni so:
- Obstoječa integracija Rust trenutno ne podpira gradnje abstrakcij kot modulov, zato so abstrakcije Rust na voljo samo za vdelane komponente DRM.
- DRM se v veliki meri opira na vzorec "podrazredov" za objekte krmilnikov, kar pa Rustu ne ustreza.
- Trenutno je implementirano samo tisto, kar je potrebno za krmilnik (plus majhna količina
očitni dodatki, kjer je boljša integriteta API-ja smiselna). - drm::mm namesto tega zahteva mutex, vgrajen v abstrakcijo
da to prenese na uporabnika z običajnimi pravili spreminjanja Rust.
To je zato, ker lahko vozlišča kadar koli opustite in te operacije
mora biti sinhroniziran. - Na strani Mesa imate trenutno gonilnik Gallium, ki je večinoma že navzgor (biti UAPI večinoma manjkajo) in
opravi teste dEQP GLES2/EGL, pri čemer večina GLES3.0 opravi
Gornje veje dela v teku. To je obratni inženiring gonilnika skupnosti, zato je omenjeno, da je treba na tem področju še veliko narediti.
končno če si zanima več o tem, podrobnosti lahko preverite v naslednjo povezavo.