Nyheten ble nylig utgitt den en foreløpig implementering av drm-asahi-driveren er foreslått for serie-GPUer Apple AGX G13 og G14 brukt i Apple M1- og M2-brikkene på e-postlisten for Linux-kjerneutviklere.
Kontrolleren er skrevet i Rust i tillegg til, inkluderer et sett med universelle lenker om DRM-delsystemet (Direct Rendering Manager) som kan brukes til å utvikle andre grafikkdrivere i Rust.
Det utgitte patchsettet inntil nå er bare foreslått for diskusjon av kjerneutviklerne (RFC), men kan bli akseptert i kjerneteamet etter at gjennomgangen er fullført og identifiserte mangler er fjernet.
Dette er min første versjon av Rustabstraksjonene for DRM delsystem. Inkluderer selve abstraksjonene, noen mindre forutsetningsendringer på C-siden samt drm-asahi GPU-driveren (for referanse om hvordan abstraksjoner brukes, men ikke nødvendigvis tenkt å lande sammen).
Disse lappene påføres på toppen av treet i [1], som er basert på 6.3-rc1 med mye abstraksjon/ruststøtte-commits lagt til ovenfor. De fleste av disse er ikke forutsetninger for DRM-abstraksjoner. seg selv, men bare fra sjåføren.
Siden desember er kontrolleren inkludert i pakken med kjernen for Asahi Linux-distribusjonen og har blitt testet av brukerne av dette prosjektet.
Driveren kan brukes på Linux-distribusjoner til organisere det grafiske miljøet i dApple-enheter med SoC M1, M1 Pro, M1 Max, M1 Ultra og M2. Ved utvikling av driveren ble det forsøkt ikke bare å øke sikkerheten ved å minimere feil ved arbeid med minne i kode utført på CPU-siden, men også å delvis beskytte mot problemer som oppstår ved interaksjon med fastvare.
Spesielt driveren gir visse bindinger for delte minnestrukturer utrygt med komplekse pekerestrenger som brukes i fastvaren for å samhandle med kontrolleren. Den foreslåtte driveren brukes sammen med asahi Mesa-driveren, som gir brukerplass OpenGL-støtte og består OpenGL ES 2-kompatibilitetstesting. og er nesten klar til å støtte OpenGL ES 3.0.
Samtidig driveren som fungerer på kjernenivå er opprinnelig utviklet med fremtidig støtte for Vulkan API i tankene, og programmeringsgrensesnittet for samhandling med brukerområdet er designet med UAPI levert av den nye Intel Xe-driveren i tankene.
Over kjente problemer følgende er nevnt:
- Den eksisterende Rust-integrasjonen støtter foreløpig ikke bygningsabstraksjoner som moduler, så Rustabstraksjoner er kun tilgjengelig for innebygde DRM-komponenter.
- DRM er sterkt avhengig av "subclassing"-mønsteret for kontrollerobjekter, og dette passer dårlig med Rust.
- For øyeblikket er bare det som er nødvendig for kontrolleren implementert (pluss en liten mengde
åpenbare tillegg der bedre API-integritet gir mening). - drm::mm ender opp med å kreve en mutex innebygd i abstraksjonen, i stedet
å delegere det til brukeren med de vanlige Rust-mutabilitetsreglene.
Dette er fordi noder kan droppes når som helst og disse operasjonene
den må være synkronisert. - På Mesa-siden har du for øyeblikket Gallium-driveren som stort sett allerede er oppstrøms (UAPI-biter mangler stort sett) og
består dEQP GLES2/EGL-testene, og det meste av GLES3.0 består
Oppstrøms grener av arbeid som pågår. Dette er en community driver reverse engineering, så det nevnes at det fortsatt er mye å gjøre i dette aspektet.
endelig hvis du er det interessert i å vite mer om det, kan du sjekke detaljene i følgende lenke.