Passer au contenu principal
PIX peut fournir des informations sur les facteurs qui influent sur les performances des nuanceurs, tels que la pression sur les GPR, le mappage des variables aux registres, la durée de vie des registres, le coût d’exécution des instructions, le rythme d’émission des instructions, etc. Itérez sur vos nuanceurs, générez des données de performances et validez les effets de vos modifications. Shader Explorer est disponible à partir de la XBOX Series X|S.

Créer un projet à partir d’un fichier de nuanceur ou d’un PDB

Un projet Shader Explorer peut être créé en ouvrant depuis PIX un fichier source de nuanceur (.hlsl) ou un fichier d’informations de débogage (.pdb). L’ouverture d’un fichier source de nuanceur importe le code source du nuanceur dans le projet, mais vous devez spécifier les arguments de compilation dans l’onglet Compiler Options de la vue Source. L’ouverture d’un fichier d’informations de débogage importe le code source du nuanceur et les arguments de compilation de la compilation d’origine. Ceux-ci peuvent être modifiés dans l’onglet Compiler Options de la vue Source. Vous pouvez enregistrer le projet obtenu en sélectionnant Home > Save. (Le raccourci clavier est Ctrl+S.)

Créer un projet à partir d’une GPU Capture

Un projet Shader Explorer peut être créé en exportant un nuanceur depuis la vue Pipeline d’une GPU Capture. Accédez au nuanceur qui vous intéresse et cliquez sur le bouton Export to Project dans la section Shader Explorer du panneau Commands de la vue Pipeline. L’exportation nécessite le chargement des informations de débogage du nuanceur (PDB), qui fournissent les sources du nuanceur. Vous pouvez enregistrer le projet obtenu en sélectionnant Home > Save. (Le raccourci clavier est Ctrl+S.)

Générer des données de performances

Une fois un projet Shader Explorer ouvert, l’étape suivante consiste à générer les données de performances. Cela nécessite une compilation du nuanceur (avec quelques indicateurs supplémentaires ajoutés automatiquement par PIX). Cliquez sur le bouton Compile de la vue Source. Capture d'écran de la vue Source indiquant l'emplacement du bouton Compile Si vous souhaitez utiliser un autre compilateur que celui fourni avec PIX, modifiez le champ Compilers Path de l’onglet Compiler Options de la vue Source. Capture d'écran de la vue Source indiquant où modifier le champ Compilers Path Une fois la compilation terminée, les vues complémentaires sont renseignées avec les données de la compilation. En cas d’erreurs de compilation, elles sont affichées dans le panneau Errors de la vue Source. Double-cliquez sur une erreur pour accéder à l’emplacement correspondant dans le code source. Capture d'écran de l'onglet Errors affichant plusieurs erreurs de compilation

Pression sur les registres

La pression sur les registres a un impact direct sur les performances, car elle constitue l’un des principaux facteurs limitant l’occupation (nombre de vagues de nuanceur en cours). Pour l’occupation et la pression sur les registres à l’exécution, consultez les chronologies Wave Occupancy et VGPR Occupancy des GPU Captures. Capture d'écran des chronologies Wave Occupancy et VGPR Occupancy dans les GPU Captures La visualisation de la pression sur les registres de Shader Explorer montre l’allocation des registres au niveau des blocs et au niveau des instructions. Les segments rouges des barres de pression indiquent une augmentation de l’utilisation à cette instruction. Survolez la visualisation de la pression pour afficher les valeurs d’utilisation d’une instruction. Capture d'écran du survol affichant les valeurs d'utilisation d'une instruction Utilisez le bouton bascule Register Types du panneau Options de la vue Block Disassembly pour configurer les types de registres affichés (SGPR, VGPR ou les deux). Capture d'écran de l'option de visualisation indiquant où configurer les types de registres

Durée de vie des registres

La durée de vie des registres indique les parties d’un nuanceur où un registre est utilisé. Lorsque des registres sont utilisés et qu’une instruction nécessite des registres supplémentaires, davantage de registres doivent être alloués, ce qui augmente la pression sur les registres et peut réduire l’occupation. La visualisation de la durée de vie des registres de Shader Explorer montre la durée de vie de chaque registre dans le nuanceur. Survolez les barres de durée de vie pour voir comment un registre est utilisé dans un bloc donné. Les barres de durée de vie sont colorées selon le type de registre (SGPR ou VGPR), et une couleur distincte est utilisée pour les registres qui ne couvrent pas entièrement le bloc. Les registres qui ne couvrent pas entièrement le bloc, selon la formule (!LiveIn OR !Live Out) AND IsRead, sont des registres potentiels à cibler pour réduire la pression sur les registres. Capture d'écran de la visualisation de la durée de vie des registres Utilisez le bouton bascule Register Types du panneau Options de la vue Block Disassembly pour configurer les types de registres affichés (SGPR, VGPR ou les deux). Capture d'écran de l'option de visualisation indiquant où configurer les types de registres

Dépendances des instructions

Cliquez sur un opérande d’instruction pour mettre en surbrillance toutes les utilisations des registres utilisés par cet opérande. Cliquez sur le nom d’une instruction pour mettre en surbrillance toutes les utilisations des registres utilisés par tous les opérandes de l’instruction. Capture d'écran de registres mis en surbrillance

Flux de contrôle

Un bloc, également appelé bloc de base ou bloc de flux de contrôle, sert à diviser le flux de contrôle en sections plus petites qui peuvent être optimisées indépendamment. Le désassemblage de Shader Explorer est affiché sous forme de sections de blocs qui peuvent être réduites ou développées individuellement. Cliquez sur le lien [-] ou [+] pour réduire ou développer un bloc, ou cliquez avec le bouton droit sur le désassemblage pour accéder à l’option permettant de réduire ou de développer tous les blocs. Chaque bloc est lié à ses successeurs, qui sont affichés après le nom du bloc. Survolez un successeur pour afficher le type de flux de contrôle, ou cliquez dessus pour y accéder. Capture d'écran du survol affichant le type de flux de contrôle d'un successeur

Couleurs des instructions

Par défaut, les instructions de nuanceur sont colorées selon leur catégorie (VALU, SALU, etc.). Utilisez le bouton bascule Instruction Colors du panneau Options de la vue Block Disassembly pour configurer le mode de couleur. L’option de couleur Rate permet d’identifier rapidement les instructions émises à un rythme différent du rythme par défaut (1 instruction par cycle sur XBOX Series X|S). Parmi celles-ci figurent les opérations mathématiques compactées, les VALU F64 et les VALU transcendantes. Capture d'écran d'instructions codées par couleur selon leur rythme

VALU transcendantes (XBOX Series X|S)

L’unité VALU comporte deux pipelines mathématiques internes : normal et transcendant. Le pipeline normal émet les instructions en 1 cycle d’horloge et le pipeline transcendant émet les instructions 32 bits en 4 cycles d’horloge. Les instructions 64 bits utilisent les deux pipelines et sont émises en 16 cycles d’horloge. Le matériel peut émettre une instruction VALU par cycle vers l’un ou l’autre des pipelines, mais pas vers les deux en même temps. Comme l’émission des instructions transcendantes prend plusieurs cycles, l’exécution des instructions normales et transcendantes peut se chevaucher. Lorsque le code source en ligne est activé (via le panneau Options de la vue Block Disassembly), des commentaires indiquant les emplacements correspondants dans le code source sont insérés dans le désassemblage. Capture d'écran de l'activation du code source en ligne dans le panneau Options Capture d'écran des commentaires insérés dans le désassemblage avec des liens vers la vue Source Cliquez sur le nom d’une instruction dans la vue Block Disassembly, ou sur le lien [src] au-dessus de l’instruction, pour accéder à l’emplacement correspondant dans la vue Source. Le lien [src] représente le niveau le plus profond de la pile d’appels et chaque lien [inl] successif représente un emplacement inline à un niveau supérieur de la pile d’appels. Survolez ces liens pour afficher rapidement le code source correspondant, ou cliquez dessus pour accéder à l’emplacement correspondant dans la vue Source. Capture d'écran de l'aperçu de la vue Source affiché en cliquant sur le lien src dans les commentaires du désassemblage

Statistiques du nuanceur

Le panneau Details de la vue Block Disassembly fournit des statistiques sur le nuanceur compilé. Shader Details : statistiques générales sur le nuanceur. Block Details : statistiques sur l’utilisation des registres du bloc sélectionné. Cliquez sur une instruction dans la vue Block Disassembly pour sélectionner le bloc qui la contient. Compiler Stats : sortie complète de DxcXboxShaderStatisticsV2 issue de DXCompiler. Capture d'écran du panneau de détails Compiler Stats

Variables et registres

Le panneau Variables de la vue Block Disassembly affiche le mappage des variables aux registres pour l’instruction sélectionnée. Cliquez sur une instruction dans la vue Block Disassembly pour la sélectionner. Capture d'écran du panneau Variables avec Registers sélectionné Par défaut, cette vue affiche les registres utilisés par les opérandes d’entrée de l’instruction. Pour afficher tous les registres actifs au décalage de l’instruction sélectionnée, basculez de « Inputs » à « Live ». Pour un affichage centré sur les variables du code source, basculez de « Registers » à « Variables ». Capture d'écran du panneau Variables avec Variables sélectionné Cliquez sur le nom de la variable source correspondante pour accéder à la déclaration de la variable, ou cliquez sur les liens Live Start et Live End pour accéder à l’endroit où la variable entre dans la portée ou en sort.

Requêtes de données

Le panneau Query de la vue Block Disassembly permet d’écrire des requêtes sur les données contenues dans le projet. Des exemples de requêtes sont fournis à titre de référence. Les requêtes personnalisées peuvent être enregistrées et utilisées dans plusieurs projets Shader Explorer. Capture d'écran du panneau Query dans la vue Block Disassembly

Révisions

Le panneau Revisions de la vue Source permet d’itérer sur plusieurs versions d’un nuanceur. Cliquez sur le bouton Create New pour créer une copie de la révision actuellement sélectionnée. Capture d'écran de la vue Source indiquant l'emplacement du panneau Revisions Pour comparer les modifications entre les révisions, cliquez avec le bouton droit sur le texte de la vue Block Disassembly et sélectionnez Compare to Revision. Si vous n’avez pas configuré d’outil de comparaison de texte dans les paramètres de PIX, vous serez invité à le faire. Indiquez le chemin de votre outil de comparaison de texte préféré et les éventuels arguments supplémentaires ; PIX fournira deux fichiers comme deux premiers arguments. Capture d'écran de l'option de menu Compare to Revision dans la vue Block Disassembly

Coût des instructions à l’exécution

Les fonctionnalités de Shader Explorer peuvent être étendues en intégrant des données de coût des instructions à l’exécution. Ces données sont produites par Shader Trace dans les GPU Captures.

Shader Trace

Dans une GPU Capture, identifiez un dessin ou une distribution intéressant et sélectionnez-le dans la vue Events. Ouvrez la vue Shader Trace, assurez-vous que l’analyse est en cours, puis cliquez sur le bouton Generate Trace. Capture d'écran d'une trace générée dans la vue Shader Trace Une fois la trace terminée, cliquez sur une vague de nuanceur correspondant au nuanceur qui vous intéresse. Les vagues sont colorées selon leur étape matérielle. Le panneau Shader Stats s’ouvre et calcule le coût d’exécution de chaque instruction, en moyenne sur chaque vague du nuanceur. Capture d'écran du panneau Shader Stats Une fois les Shader Stats chargées, le bouton Export to Project est activé dans le panneau Options. Cliquez sur ce bouton pour ouvrir le nuanceur et les données de coût des instructions à l’exécution dans un projet Shader Explorer. Ils peuvent être ouverts dans un nouveau projet ou en tant que nouvelle révision dans un projet ouvert. L’exportation nécessite le chargement des informations de débogage du nuanceur (PDB), qui fournissent les sources du nuanceur et les arguments de compilation. Capture d'écran de la boîte de dialogue qui s'ouvre lorsque vous cliquez sur le bouton Export to Project Si la vague se compose de plusieurs nuanceurs, par exemple ES+GS, LS+HS ou DXR, vous pouvez sélectionner l’étape de nuanceur à exporter. Shader Explorer ne prend actuellement en charge le profilage que d’une seule étape de nuanceur à la fois. Vous pouvez enregistrer le projet obtenu en sélectionnant Home > Save. (Le raccourci clavier est Ctrl+S.)

Performances au niveau des instructions

Le coût des instructions est affiché à côté de chaque instruction lorsque des données de coût des instructions à l’exécution sont disponibles. Capture d'écran du graphique en secteurs du coût des instructions Capture d'écran de la vue détaillée du coût d'une instruction Utilisez le bouton bascule Instruction Cost Mode du panneau Options pour configurer le type de coût affiché (Percent of Longest, Percent of Total, Clocks, Percent Waves Visited, etc.). Survolez le coût d’une instruction pour afficher la répartition détaillée des données. Capture d'écran de l'option de menu permettant de modifier le mode de coût des instructions

Performances au niveau du code source

Le coût des instructions est agrégé pour le code source lorsque des données de coût des instructions à l’exécution sont disponibles. Survolez le coût d’une ligne de code source pour afficher la répartition détaillée des instructions qui y contribuent. Capture d'écran de la répartition des instructions contribuant au coût d'exécution d'une ligne de code source Utilisez le panneau Performance de la vue Source pour configurer les visualisations au niveau du code source. Lorsque le mode Aggregate est sélectionné, le coût du code source est l’agrégat de toutes les instructions associées à la ligne de code source, quel que soit le nombre de fois où elle a été appelée ou l’endroit d’où elle a été appelée. Cela fournit un coût total sur l’ensemble du nuanceur. Dans ce mode, le panneau Performance affiche le code source trié par coût. Capture d'écran de la vue du coût agrégé des performances au niveau du code source Lorsque le mode Callstacks est sélectionné, le coût du code source est affiché par rapport à sa pile d’appels. Cela permet de comprendre le coût du code source dans son contexte d’exécution. Dans ce mode, le panneau Performance affiche le code source dans une disposition appelant/appelé qui permet de parcourir les piles d’appels en cliquant sur le code source lié. Capture d'écran du coût du code source affiché par rapport à sa pile d'appels Lorsque le mode VALU-only est sélectionné, le coût du code source n’est affiché que pour les instructions VALU. Cela permet de se concentrer sur le code source qui contribue à l’utilisation des VALU.

Les données de coût des instructions sont disponibles mais ne correspondent pas

Pour utiliser les données de coût des instructions à l’exécution, le hachage du nuanceur dont proviennent les données de coût doit correspondre au hachage du nuanceur compilé pour produire les données de Shader Explorer. Si les hachages ne correspondent pas, le message suivant s’affiche. Capture d'écran du message indiquant que des données de coût des instructions sont disponibles mais ne correspondent pas au nuanceur compilé pour cette révision. Pour résoudre cette incohérence, vous devez compiler dans Shader Explorer avec le compilateur correspondant aux données de coût des instructions à l’exécution. Cliquez sur le lien pour localiser le compilateur correspondant. La version du compilateur requise est affichée dans la boîte de dialogue Open Folder. En général, le compilateur provient d’une installation du GDK (C:\Program Files (x86)\Microsoft GDK<version>\GXDK\bin<platform>). Une fois le compilateur localisé, son chemin est renseigné dans l’onglet Compiler Options de la vue Source et le nuanceur est recompilé avec le compilateur correspondant.

Les données de coût des instructions sont disponibles mais le code source a été modifié

Pour utiliser les données de coût des instructions à l’exécution au niveau du code source, les fichiers sources doivent correspondre à ceux de la compilation d’origine. Une fois les fichiers sources modifiés, les visualisations des performances au niveau du code source sont masquées et le message suivant s’affiche. Capture d'écran du message indiquant que des données de coût des instructions sont disponibles mais que les fichiers sources ont été modifiés, ce qui invalide les données de coût au niveau du code source. Pour résoudre ce problème, importez le projet dans une GPU Capture, exécutez à nouveau Shader Trace et exportez la trace dans votre projet Shader Explorer en tant que nouvelle révision avec des données de coût des instructions à l’exécution mises à jour.

Réimporter un nuanceur dans une GPU Capture

Une révision de projet Shader Explorer peut être importée dans une GPU Capture depuis la vue Pipeline de la GPU Capture. Accédez au nuanceur qui vous intéresse et cliquez sur le bouton Import from Project dans la section Shader Explorer du panneau Commands de la vue Pipeline. Capture d'écran de l'emplacement du bouton Import from Project dans la section Shader Explorer du panneau Commands. Sélectionnez ensuite le projet Shader Explorer à partir duquel effectuer l’importation (il doit être ouvert dans PIX) et la révision à importer. L’importation nécessite que les sources du nuanceur correspondent entre la révision Shader Explorer et la GPU Capture. Capture d'écran de la boîte de dialogue d'importation d'un nuanceur, avec les listes déroulantes de sélection du projet et de la révision. Une fois un nuanceur importé dans une GPU Capture, la modification peut être appliquée via Edit-and-Continue, qui intègre le nuanceur à la relecture. Une fois la modification appliquée, de nouvelles données de coût des instructions à l’exécution peuvent être générées avec Shader Trace pour être réexportées dans le projet Shader Explorer en vue d’une analyse plus approfondie. Capture d'écran du bouton Edit permettant d'appliquer la modification du nuanceur importé.

Procédures

Identifier la pression maximale sur les registres

Utilisez les boutons Go to Max du panneau Options de la vue Block Disassembly pour accéder au point unique de pression maximale. Capture d'écran du menu des options de Block Disassembly présentant les options Go to Max Cost, Max SGPRs et Max VGPRs. Utilisez la vue Block Graph pour parcourir les blocs du nuanceur sous forme de graphe. Effectuez un zoom arrière pour voir les blocs dimensionnés et colorés selon leur pression sur les registres. Les blocs ayant la pression la plus élevée sont les plus grands et les plus foncés.

Identifier les instructions à rythme réduit

Utilisez le bouton bascule Instruction Colors du panneau Options de la vue Block Disassembly pour configurer le mode de couleur. Pour plus d’informations, consultez Couleurs des instructions.

Identifier les registres à cibler pour réduire la pression

Utilisez la visualisation de la durée de vie des registres pour comprendre l’allocation et la durée de vie des registres. Les registres qui ne couvrent pas entièrement un bloc, selon la formule (!LiveIn OR !Live Out) AND IsRead, sont des registres potentiels à cibler pour réduire la pression sur les registres. Une couleur distincte leur est attribuée pour les identifier rapidement. Capture d'écran de la visualisation de la durée de vie des registres, avec deux couleurs distinctes pour différencier les registres qui couvrent un bloc et ceux qui ne le couvrent pas.

Masquer les visualisations pour gagner de l’espace à l’écran

Utilisez les boutons bascules Visualization Placement du panneau Options de la vue Block Disassembly pour déplacer ou masquer les visualisations. Capture d'écran de l'option de menu Visualizations dans la vue Block Disassembly.
Dernière modification le 8 octobre 2026