Passer au contenu principal
Depuis le GDK de juin 2023, les nuanceurs qui lèvent des exceptions peuvent être détectés dans les GPU Captures. Cette fonctionnalité étend aux GPU Captures le débogage en direct des nuanceurs sur les exceptions. Elle détecte les nuanceurs qui lèvent des exceptions dans l’ensemble de la GPU Capture et présente le résultat sous forme de rapport récapitulatif. Une nouvelle vue Shader Exceptions est ajoutée à cet effet à la disposition GPU Capture de PIX. Les exceptions de nuanceur sont masquées par défaut sur XBOX Series X|S. Cette fonctionnalité vous permet de les démasquer afin de détecter et de déboguer les nuanceurs qui lèvent des exceptions dans l’ensemble de l’image. Les exceptions actuellement prises en charge sont : valeur non valide (y compris NaN), division flottante par zéro, division entière par zéro, dépassement de capacité positif et négatif.

Détecter les exceptions

La vue Shader Exceptions affiche un panneau Detect Exceptions. Ce panneau présente les types d’exceptions pris en charge parmi lesquels vous pouvez choisir. Tous les types d’exceptions sont sélectionnés par défaut. Le panneau affiche aussi la liste des étapes de nuanceur à prendre en compte pour la détection des exceptions. Toutes les étapes de nuanceur sont sélectionnées par défaut. Notez que l’analyse pixie est requise pour détecter les exceptions de nuanceur. Après avoir sélectionné les exceptions et les étapes de nuanceur souhaitées, appuyez sur le bouton Detect pour générer le rapport récapitulatif des exceptions. Panneau Detect Exceptions

Rapport récapitulatif des exceptions

Le rapport récapitulatif des exceptions affiche des entrées pour toutes les exceptions sélectionnées qui ont été déclenchées. Chaque entrée du journal d’exceptions indique l’adresse de l’instruction du nuanceur (PC), la liste des exceptions et le nombre d’occurrences. Notez que le PC pointe vers l’instruction qui suit celle qui lève une exception. Un nom de fonction est aussi affiché pour les nuanceurs de lancer de rayons. Le nom du fichier HLSL, la signature de la fonction et le numéro de ligne HLSL correspondant au PC sont affichés si les PDB sont résolus et si les mappages de lignes sont disponibles. Ces entrées d’exception sont affichées par étape de nuanceur sélectionnée et par Global ID. Un bouton Open in Debugger est présent pour chaque entrée du journal d’exceptions afin que vous puissiez déboguer le nuanceur et observer les exceptions en action. Rapport récapitulatif des exceptions Depuis le GDK d’octobre 2023, les valeurs d’ID de groupe sont répertoriées pour chaque entrée du journal d’exceptions, pour les nuanceurs de calcul uniquement. Le bouton Open in Debugger lance une session de débogage avec ces valeurs d’ID de groupe afin que vous puissiez reproduire l’exception répertoriée avec le débogueur de nuanceurs. Exceptions détaillées

Déboguer un nuanceur qui lève des exceptions

Les exceptions de nuanceur peuvent être étudiées en déboguant le nuanceur dans PIX. Pour ce faire, appuyez sur la flèche verte à côté du nuanceur à étudier. Le nuanceur s’ouvre alors dans le débogueur avec les exceptions démasquées. Vous pouvez déboguer le nuanceur de la même façon que dans un scénario sans exception, mais une notification concernant les exceptions déclenchées s’affiche lorsque le PC atteint l’instruction mentionnée dans l’entrée du journal. Le bouton « Run to Exception » permet d’accéder rapidement à la ligne qui déclenche les exceptions. Notez qu’il s’arrête à l’instruction qui suit celle qui lève une exception. Les bits d’exception du registre trapsts peuvent aussi être inspectés pour vérifier les exceptions déclenchées. Le retour en arrière pas à pas permet de trouver la source de l’exception. Notez que les exceptions ne sont démasquées que si la session de débogage a été lancée depuis la vue Shader Exceptions.
Le comportement numérique des nuanceurs est différent lorsque les exceptions numériques sont démasquées.
Notez que le nuanceur ouvert dans le débogueur utilise des paramètres par défaut. Il est possible que les exceptions mentionnées dans le journal ne soient pas déclenchées par cette vague de nuanceur en particulier. Il n’est actuellement pas possible de localiser la vague de nuanceur exacte qui lève les exceptions, mais nous prévoyons d’ajouter cette possibilité dans la prochaine version du GDK. En attendant, vous pouvez essayer de modifier les paramètres du nuanceur pour localiser la vague qui lève les exceptions qui vous intéressent.

Exceptions prises en charge

Les exceptions numériques suivantes peuvent actuellement être détectées dans les GPU Captures : valeur non valide (y compris NaN), division flottante par zéro, division entière par zéro, dépassement de capacité positif et négatif.

Exception de valeur non valide

Les exceptions de valeur non valide sont levées lorsqu’un opérande n’est pas valide pour l’opération. Le résultat est un QNaN. Ces exceptions peuvent se produire lorsqu’un opérande est un NaN, ou pour d’autres valeurs, par exemple : V_FRACT_F32 pour INF V_SIN_F32/V_COS_F32 pour INF V_MIN/MAX_F32 pour INF V_LOG_CLAMP_F32 pour une entrée négative V_LOG_LEGACY_F32 pour une entrée négative V_RSQ/RSQ_CLAMP/RSQ_LEGACY_F32 pour une entrée négative V_SQRT_F32 pour une entrée négative V_FREXP_EXP_I32_F32 et V_FREXP_MANT_F32 pour INF V_CVT_U32_F32 pour une valeur hors de la plage UINT V_CVT_I32_F32 pour des valeurs hors de la plage INT V_DIV_FIXUP_F32 pour 0/0 et INF/INF

Exception de division flottante par zéro

L’exception de division flottante par zéro est levée lorsqu’une valeur flottante est divisée par zéro. Le résultat est +/-INF.

Exception de division entière par zéro

L’exception de division entière par zéro est levée lorsqu’une valeur entière est divisée par zéro. Le résultat est indéfini.

Exception de dépassement de capacité positif

L’exception de dépassement de capacité positif est levée lorsque le résultat arrondi est supérieur à la valeur maximale UINT/INT/float. Le résultat est le nombre maximal signé ou INF.

Exception de dépassement de capacité négatif

L’exception de dépassement de capacité négatif est levée lorsque le résultat exact ou arrondi est inférieur au plus petit nombre normal (non dénormalisé) représentable. Le résultat est un nombre dénormalisé ou zéro.

Remarques

Le comportement numérique des nuanceurs est différent lorsque les exceptions numériques sont démasquées. Notez que le nuanceur ouvert dans le débogueur utilise des paramètres par défaut. Il est possible que les exceptions mentionnées dans le journal ne soient pas déclenchées par cette vague de nuanceur en particulier. Il n’est actuellement pas possible de localiser la vague de nuanceur exacte qui lève les exceptions, mais nous prévoyons d’ajouter cette possibilité dans la prochaine version du GDK. En attendant, vous pouvez essayer de modifier les paramètres du nuanceur pour localiser la vague qui lève les exceptions qui vous intéressent.

Voir aussi

Débogage en direct sur les exceptions de nuanceur Développement de jeux sur console XBOX (environnement et outils)
Dernière modification le 8 octobre 2026