Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit les améliorations de débogage TDR (détection et récupération du délai d’attente) disponibles à partir de Windows 11, version 24H2 (WDDM 3.2). Les développeurs de pilotes graphiques doivent être familiarisés avec la détection et la récupération du délai d'attente GPU dans Windows, comme décrit dans la détection et la récupération du délai d'attente et TDR dans Windows 8 et versions ultérieures.
Modifications DDI
DxgkddiCollectDbgInfo2
Pour faciliter l'analyse TDR, le système d'exploitation a historiquement appelé le rappel DxgkddiCollectDbgInfo du pilote en mode noyau (KMD) pour permettre au pilote d'inscrire sa propre charge utile dans le rapport TDR que le système télécharge à partir du machine client.
DxgkddiCollectDbgInfo2 est ajouté en tant qu’extension de débogage TDR. Ce rappel permet au système d’exploitation de transmettre des informations plus détaillées à KMD sur la cause racine du TDR. Le kmD peut ensuite enregistrer l’état pertinent pour la partie du GPU responsable du TDR.
DxgkddiCollectDbgInfo2 est un super-ensemble de DxgkddiCollectDbgInfo existant.
Un pilote WDDM 3.2 n’est pas nécessaire pour implémenter DxgkddiCollectDbgInfo2, auquel cas le système d’exploitation appelle DxgkddiCollectDbgInfo.
Si KMD implémente DxgkddiCollectDbgInfo2, le système d’exploitation l’appelle au lieu de DxgkddiCollectDbgInfo dans tous les cas.
La structure DRIVER_INITIALIZATION_DATA est étendue pour inclure un pointeur vers DxgkddiCollectDbgInfo2.
DXGKARG_COLLECTDBGINFO2
Le système d’exploitation transmet la structure DXGKARG_COLLECTDBGINFO2 ajoutée à DxgkddiCollectDbgInfo2.
La disposition de DXGKARG_COLLECTDBGINFO2 est rétrocompatible avec la structure DXGKARG_COLLECTDBGINFO existante pour permettre à l’implémentation DxgkDdiCollectDbgInfo2 de réutiliser les helpers DxgkDdiCollectDbgInfo existants en fonction des besoins. Pour cette raison, le raison, pBuffer, BufferSizeet champs pExtension ont la même sémantique.
Les autres champs suivants se trouvent dans DXGKARG_COLLECTDBGINFO2, mais pas dans DXGKARG_COLLECTDBGINFO.
- TdrType
- TdrPayloadSize
- TdrPayload
Pour certains types TDR, le système d’exploitation fournit des informations supplémentaires dans la mémoire tampon TdrPayload de TdrPayloadSize octets. Il peut s’agir de NULL et le pilote est censé gérer ce cas sans se bloquer.
Lorsque la charge utile n’est pas NULL, elle peut être convertie en structure qui correspond au type TDR. Le système d’exploitation peut augmenter ces structures de manière rétrocompatible, en ajoutant de nouveaux champs à la fin. Le pilote doit vérifier TdrPayloadSize avant d’accéder aux champs TdrPayload pour s'assurer que le système d’exploitation implémente la version de charge utile souhaitée ou une version ultérieure.
La mémoire à laquelle TdrPayload pointe n'est valable que pendant l'appel à DxgkddiCollectDbgInfo2. Le pilote ne doit pas stocker de pointeur vers TdrPayload après la fin de appel de DxgkddiCollectDbgInfo2.
À compter de WDDM 3.2, les structures de charge utile suivantes sont ajoutées comme charges utiles potentielles vers lesquelles TdrPayload peut pointer.
DXGK_TDR_PAYLOAD_ENGINE_TIMEOUT pour une charge utile de délai d’expiration du moteur (TdrType est égal à DXGK_TDR_TYPE_ENGINE_TIMEOUT).
DXGK_TDR_PAYLOAD_VSYNC_TIMEOUT pour une charge utile de délai d’expiration VSync (TdrType est égal à DXGK_TDR_TYPE_VSYNC_TIMEOUT).