Présentation de RADV
RADV est le pilote Vulkan open source Mesa pour les GPU AMD. Au fil des ans, il est devenu un élément clé de la pile graphique Linux. Il est maintenant devenu le pilote Vulkan de facto pour les matériels AMD sous Linux. AMD a même abandonné son alternative basée sur PAL (Platform Abstraction Library) pour se concentrer sur Mesa.
Portage de RADV sur Windows
Cependant, sous Windows, les utilisateurs AMD ne disposent que du pilote propriétaire. Pour y remédier, le portage de RADV sur Windows a été entrepris, apportant la même implémentation Vulkan open source qui a fait ses preuves sous Linux. Cela ouvre des possibilités telles qu'une base de code partagée entre les plateformes, un débogage et une expérimentation plus faciles, une résolution plus rapide des problèmes et une voie pour la communauté (par exemple, les développeurs de jeux) pour signaler des problèmes ou apporter des améliorations qui profitent à tous, quel que soit le système d'exploitation.
Architecture et fonctionnement
L'effort de portage s'appuie sur les travaux de Faith Ekstrand, qui a exploré la faisabilité de l'exécution de RADV sous Windows et a présenté ses résultats à la conférence XDC 2024. La prise en charge de WDDM2 (Windows Display Driver Model 2) est cruciale pour ce portage, car elle fournit une interface claire pour les interactions entre le pilote utilisateur (UMD) et le pilote noyau (KMD). Cependant, cette interface comporte des appels D3DKMT qui peuvent contenir des données privées de pilote, ce qui rend le processus de portage plus complexe.
wddm2-pdd-re
Un outil appelé wddm2-pdd-re a été créé pour logger les appels WDDM2 et les données privées, permettant ainsi de contourner ces limitations. Grâce à cela, il a été possible de rétro-ingénier suffisamment de l'interface privée pour exécuter des commandes et afficher un modèle 3D tournant à l'écran.
Implications et limites
Le portage de RADV sur Windows est toujours expérimental et nécessite davantage de travail pour atteindre la conformité et la stabilité. Les défis incluent la gestion des différences entre les générations de matériel, les problèmes de compilation avec MSVC et la gestion des données privées dans les appels D3DKMTEscape. Le plus grand défi pour rendre ce portage prêt pour la production est l'interface avec le pilote noyau propriétaire d'AMD, qui nécessite une connaissance approfondie des structures de données privées et peut changer sans préavis entre les versions de pilote.