Il s'agit d'un pilote assez complet pour les GPU des séries Apple AGX G13 et G14.
Le contrôleur d'aujourd'hui est compatible avec les SoC
Il a été récemment annoncé qu'une implémentation préliminaire du pilote drm-asahi pour les GPU Apple AGX séries G13 et G14 utilisés dans les puces Apple M1 et M2 a été proposée sur la liste de diffusion des développeurs du noyau Linux.
Le pilote est écrit en Rust et comprend également un ensemble de liens universels concernant le sous-système DRM (Direct Rendering Manager) qui peuvent être utilisés pour développer d'autres pilotes graphiques en Rust.
L'ensemble de correctifs publié jusqu'à présent a été proposé uniquement pour discussion par les développeurs principaux (RFC), mais pourrait être accepté par l'équipe principale une fois l'examen terminé et les lacunes identifiées corrigées.
Voici ma première version des abstractions Rust pour le sous-système DRM. Elle comprend les abstractions elles-mêmes, quelques modifications mineures des prérequis côté C, ainsi que le pilote GPU drm-asahi (à titre de référence pour l'utilisation des abstractions, mais leur utilisation conjointe n'est pas nécessairement prévue).
Ces correctifs sont appliqués en haut de l'arbre dans [1], qui est basé sur la version 6.3-rc1 avec un grand nombre de compromis concernant l'abstraction et la prise en charge de Rust ajoutés en amont. La plupart de ces correctifs ne sont pas des prérequis pour les abstractions DRM elles-mêmes, mais uniquement pour le pilote.
Depuis décembre, le pilote est inclus dans le paquetage du noyau de la distribution Asahi Linux et a été testé par les utilisateurs de ce projet.
Ce pilote permet, sous Linux, de gérer l'environnement graphique des appareils Apple équipés de SoC M1, M1 Pro, M1 Max, M1 Ultra et M2. Lors de son développement, des efforts ont été déployés pour renforcer la sécurité en minimisant les erreurs lors de la manipulation de la mémoire par le code côté processeur, et pour assurer une protection partielle contre les problèmes liés aux interactions avec le firmware.
Plus précisément, le pilote fournit des liaisons spécifiques pour les structures de mémoire partagée non sécurisées, comportant des chaînes de pointeurs complexes utilisées par le firmware pour interagir avec lui. Ce pilote est utilisé conjointement avec le pilote Asahi Mesa, qui assure la prise en charge d'OpenGL en espace utilisateur, a passé avec succès les tests de compatibilité OpenGL ES 2 et est presque prêt pour la prise en charge d'OpenGL ES 3.0.
Dans le même temps, le pilote au niveau du noyau est initialement développé en tenant compte de la prise en charge future de l'API Vulkan , et l'interface de programmation pour interagir avec l'espace utilisateur est conçue en tenant compte de l'UAPI fournie par le nouveau pilote Intel Xe.
Voici quelques-uns des problèmes connus :
- L'intégration Rust existante ne prend actuellement pas en charge la création d'abstractions en tant que modules, de sorte que les abstractions Rust ne sont disponibles que pour les composants DRM intégrés.
- DRM s'appuie fortement sur le modèle de "sous-classement" pour les objets de contrôleur, et cela ne convient pas à Rust.
- Actuellement, seul ce qui est nécessaire pour le contrôleur est implémenté (plus une petite quantité de
extras évidents où une meilleure intégrité de l'API a du sens). - drm :: mm finit par nécessiter un mutex intégré à l'abstraction, à la place
pour déléguer cela à l'utilisateur avec les règles de mutabilité habituelles de Rust.
En effet, les nœuds peuvent être supprimés à tout moment et ces opérations
il doit être synchronisé. - Du côté de Mesa, vous avez actuellement le pilote Gallium qui est pour la plupart déjà en amont (les bits UAPI manquent pour la plupart) et
passe les tests dEQP GLES2/EGL, la plupart des tests GLES3.0 réussissant
Branches amont des travaux en cours. Il s'agit d'une ingénierie inverse de pilote communautaire, il est donc mentionné qu'il reste encore beaucoup à faire dans cet aspect.
Enfin, si vous souhaitez en savoir plus à ce sujet , vous trouverez les détails en suivant ce lien.