Contexte et objectifs

Le projet décrit la mise au point d’un pilote graphique compatible OpenGL ES 3.0 pour les appareils Apple M4, notamment le Mac Mini et le MacBook Neo. L’équipe, composée de deux développeurs, a atteint cet objectif en environ quatre semaines, alors que la création d’un tel pilote nécessite habituellement plusieurs années. Le pilote fonctionne sous Linux, permet l’affichage WebGL dans Chrome et Firefox, et atteint 200 fps dans Minecraft, ce qui prouve une performance suffisante pour des charges graphiques lourdes.

Reverse engineering de l’ABI du firmware AGX

Apple ne fournit aucun document public sur l’interface du firmware AGX. Les auteurs ont donc exploité un hyperviseur préexistant pour intercepter les traces d’exécution du GPU. En observant les « kicks » du firmware, ils ont capturé l’état complet de la mémoire du GPU, puis l’ont réinjecté après redémarrage afin de reproduire les effets de chaque appel. Cette méthode a permis de reconstruire les structures partagées entre le noyau et le firmware, qui s’avèrent deux fois plus nombreuses et 1,5 fois plus complexes que sur les générations M1/M2. Les champs marqués « firmware owned » doivent rester intacts, ce qui impose une discipline stricte lors de la génération des buffers.

Architecture du pilote

Le pilote se compose de deux parties distinctes, comme dans les architectures modernes :

Espace noyau : un module Linux communique exclusivement avec le firmware via le RTKit, un RTOS propriétaire. Le module alloue les buffers, gère la planification et transmet les structures de commande pré‑remplies. Aucun accès direct au matériel n’est réalisé ; toutes les interactions passent par l’ABI décodée.

Espace utilisateur : un driver utilisateur implémente un compilateur IR personnalisé, traduit les shaders OpenGL ES 3.0 en micro‑code AGX, et construit les flux de commandes. Le compilateur a été développé à partir de zéro, sans utilisation de blobs Apple, en s’appuyant uniquement sur les shaders générés par les tests (ex. WebGL). La séparation entre le compilateur et le gestionnaire de flux permet de tester indépendamment chaque composant.

Performances, limites et perspectives

Les benchmarks indiquent que le pilote supporte le rendu 3D en temps réel avec un taux de rafraîchissement de 200 fps dans Minecraft, démontrant que le chemin de rendu est suffisamment optimisé pour des charges de travail classiques. Cependant, le support Vulkan reste à implémenter, et le pilote n’est pas encore destiné à un usage grand public : il manque des mécanismes de gestion d’erreurs robustes et une validation exhaustive du firmware ABI. Le code source a été publié dans deux dépôts « agx‑re », offrant la possibilité à la communauté de vérifier la provenance et d’étendre les fonctionnalités.