Nedavno je objavljena vijest o tome predložena je preliminarna implementacija drm-asahi drajvera za serijske GPU-ove Apple AGX G13 i G14 korišteni u Apple M1 i M2 čipovima na mailing listi za programere Linux kernela.
Kontroler je napisan u Rustu plus, uključuje skup univerzalnih veza o DRM podsistemu (Direct Rendering Manager) koji se može koristiti za razvoj drugih grafičkih drajvera u Rustu.
Objavljeni set zakrpa do sada predložen je samo za raspravu od strane osnovnih programera (RFC), ali mogu biti primljeni u glavni tim nakon što se pregled završi i popravljeni identifikovani nedostaci.
Ovo je moja prva verzija Rust apstrakcija za DRM podsistema. Uključuje same apstrakcije, neke manje preduvjetne promjene na C strani kao i drm-asahi GPU drajver (za referencu o tome kako se apstrakcije koriste, ali ne nužno nameravali da slete zajedno).
Ove zakrpe su primijenjene na vrhu stabla u [1], koji se zasniva na 6.3-rc1 sa dosta urezivanja za apstrakciju/Rust podršku gore. Većina njih nisu preduvjeti za DRM apstrakcije. sami, ali samo od vozača.
Od decembra, kontrolor je uključen u paket sa kernelom za Asahi Linux distribuciju i testiran je od strane korisnika ovog projekta.
Drajver se može koristiti na Linux distribucijama za organizirati grafičko okruženje u dApple uređaji sa SoC M1, M1 Pro, M1 Max, M1 Ultra i M2. Prilikom razvoja drajvera pokušano je ne samo da se poveća sigurnost minimiziranjem grešaka pri radu s memorijom u kodu koji se izvršava na strani CPU-a, već i da se djelimično zaštiti od problema koji nastaju prilikom interakcije sa firmverom.
Posebno drajver obezbjeđuje određene veze za dijeljene memorijske strukture nesigurno sa složenim nizovima pokazivača koji se koriste u firmveru za interakciju s kontrolerom. Predloženi drajver se koristi zajedno sa asahi Mesa drajverom, koji pruža podršku za OpenGL u korisničkom prostoru i prolazi testiranje kompatibilnosti sa OpenGL ES 2. i skoro je spreman za podršku OpenGL ES 3.0.
Istovremeno, drajver koji radi na nivou kernela je inicijalno razvijen imajući na umu buduću podršku za Vulkan API, a programsko sučelje za interakciju sa korisničkim prostorom dizajnirano je s UAPI-jem koji nudi novi Intel Xe drajver.
Iznad poznati problemi spominju se:
- Postojeća Rust integracija trenutno ne podržava izgradnju apstrakcija kao modula, tako da su Rust apstrakcije dostupne samo za ugrađene DRM komponente.
- DRM se u velikoj meri oslanja na obrazac "podklasiranja" za objekte kontrolera, a to se ne uklapa u Rust.
- Trenutno je implementirano samo ono što je potrebno za kontroler (plus mala količina
očigledni dodaci gdje bolji integritet API-ja ima smisla). - drm::mm na kraju zahtijeva mutex ugrađen u apstrakciju, umjesto toga
da to delegira korisniku uz uobičajena Rust pravila promjenjivosti.
To je zato što čvorovi mogu biti ispušteni u bilo koje vrijeme i te operacije
mora biti sinhronizovano. - Na strani Mesa trenutno imate Gallium drajver koji je uglavnom već uzvodno (UAPI bitovi uglavnom nedostaju) i
prolazi dEQP GLES2/EGL testove, pri čemu većina GLES3.0 prolazi
Uzvodne grane radova u toku. Ovo je obrnuti inženjering za upravljačke programe zajednice, pa se spominje da u ovom aspektu ima još dosta toga da se uradi.
konačno ako jesi zainteresovani da saznaju više o tome, detalje možete provjeriti u sljedeći link.