Vue d’ensemble de Visual Studio Graphics DiagnosticsOverview of Visual Studio Graphics Diagnostics

Visual Studio Graphics Diagnostics est un ensemble d’outils pour l’enregistrement, puis en analysant les problèmes de rendu et de performances dans les applications Direct3D.Visual Studio Graphics Diagnostics is a set of tools for recording and then analyzing rendering and performance problems in Direct3D apps. Graphics Diagnostics peut être utilisé sur les applications qui sont exécutent localement sur votre PC Windows ou sur un PC ou un périphérique distant.Graphics Diagnostics can be used on apps that are running locally on your Windows PC or on a remote PC or device.

Utilisation de Graphics Diagnostics pour déboguer les problèmes de renduUsing Graphics Diagnostics to debug rendering problems

Le débogage des problèmes de rendu dans une application riche en graphiques n'est pas aussi simple que de démarrer dans un débogueur et d'exécuter du code pas-à-pas.Debugging rendering problems in a graphically-rich app is not as straight-forward as starting a debugger and stepping through some code. Dans chaque frame, des centaines de milliers de pixels uniques sont produits (chacun dépend d'un jeu complexe d'état, de données, de paramètres, et de code), il est possible que seuls quelques pixels présentent le problème que vous essayez de diagnostiquer.In each frame, hundreds of thousands of unique pixels are produced, each according to a complex set of state, data, parameters, and code—of these, perhaps only a few pixels will exhibit the problem you are trying to diagnose. Pour compliquer encore plus les choses, le code qui génère chaque pixel est exécuté sur du matériel spécialisé qui traite des centaines de pixels en parallèle.To complicate matters even further, the code that generates each pixel is executed on specialized hardware that processes hundreds of pixels in parallel. Les outils et les techniques de débogage classiques (qui sont difficiles à exploiter même dans du code de thread léger) sont inefficaces face à autant de données.Traditional debugging tools and techniques—which are difficult to leverage in even lightly-threaded code—are ineffective when faced with so much data.

Les outils Graphics Diagnostics de Visual StudioVisual Studio sont conçus pour vous aider à identifier les problèmes de rendu en commençant par les artefacts visuels qui indiquent le problème, puis en remontant à la source du problème en se concentrant uniquement sur le code de nuanceur associé, les étapes de canalisation, les appels de dessin, les ressources et l'état du périphérique dans le code source de l'application.The Graphics Diagnostics tools in Visual StudioVisual Studio are designed to help you locate rendering problems by starting with the visual artifacts that indicate the problem and then tracing back to the source of the problem by focusing only on relevant shader code, pipeline stages, draw calls, resources, and device state—in the app's own source code.

Compatibilité des versions DirectXDirectX version compatibility

Graphics Diagnostics prend en charge les applications qui utilisent Direct3D 10 ou supérieure et fournit la prise en charge limitée pour les applications qui utilisent Direct2D.Graphics Diagnostics supports apps that use Direct3D 10 or greater, and provides limited support for apps that use Direct2D. Il ne prend pas en charge les applications qui utilisent des versions antérieures de Direct3D, DirectDraw ou d'autres API graphiques.It does not support apps that use earlier versions of Direct3D, DirectDraw, or other graphics APIs.

Windows 10 et Direct3D 12Windows 10 and Direct3D 12

Windows 10 introduit Direct3D 12, qui diffère sensiblement de Direct3D 10 et Direct3D 11.Windows 10 introduced Direct3D 12, which is substantially different from Direct3D 10 and Direct3D 11. Ces différences permettent à DirectX d'être en phase avec le matériel graphique moderne et d'exploiter tout son potentiel. En outre, elles apportent également d'importants changements en matière d'API et octroient une plus grande responsabilité au programmeur qui doit gérer les problèmes de contention et de durée de vie des ressources.These differences bring DirectX back into alignment with modern graphics hardware and unleashing its full potential, but they also bring big API changes and place greater responsibility on the programmer to manage resource lifetimes and contention. Malgré les différences, Graphics Diagnostics avec Direct3D 12 assure la parité de fonctionnalités à Graphics Diagnostics avec Direct3D 11.2.Despite the differences, Graphics Diagnostics with Direct3D 12 maintains feature-parity with Graphics Diagnostics with Direct3D 11.2.

Windows 10 assure également la prise en charge des versions précédentes de Direct3D, ainsi que des jeux et applications qui reposent sur ces dernières.Windows 10 also maintains support for previous versions of Direct3D and the games and applications that rely on them. Graphics Diagnostics dans Visual Studio prend toujours en charge Direct3D 10 et Direct3D 11 sur Windows 10.Graphics Diagnostics in Visual Studio continues to support Direct3D 10 and Direct3D 11 on Windows 10.

Prise en charge limitée de Direct2DLimited Direct2D support

Étant donné que Direct2D est une API en mode utilisateur qui s’appuie sur Direct3D, vous pouvez utiliser Graphics Diagnostics pour déboguer les problèmes de rendu dans les applications qui utilisent Direct2D.Because Direct2D is a user-mode API that's built on top of Direct3D, you can use Graphics Diagnostics to help debug rendering problems in apps that use Direct2D. Toutefois, étant donné que seuls les événements de Direct3D sous-jacents sont stockés à la place des événements de niveau supérieur de Direct2D, les événements de Direct2D n'apparaîtront pas dans la liste des événements graphiques.However, because only the underlying Direct3D events are recorded instead of the higher-level Direct2D events, Direct2D events won't appear in the Graphics Event List. En outre, comme les relations entre les événements de Direct2D et les événements de Direct3D qui en résultent ne sont pas toujours claires, le fait d'utiliser Graphics Diagnostics pour déboguer les problèmes de rendu dans des applications qui utilisent Direct2D n'est pas simple.Also, because the relationship between Direct2D events and the resulting Direct3D events are not always clear, using Graphics Diagnostics to debug rendering problems in apps that use Direct2D is not straight forward. Vous pouvez toujours utiliser Graphics Diagnostics pour obtenir des informations sur les problèmes de bas niveau de rendu dans les applications qui utilisent Direct2D.Still, you can use Graphics Diagnostics to get information about low-level rendering problems in apps that use Direct2D.

Fonctionnalités Graphics Diagnostics dans Visual StudioGraphics Diagnostics features in Visual Studio

Graphics Diagnostics possède une interface dédiée : la fenêtre Graphics Analyzer - pour diagnostiquer les problèmes de rendu, mais il ajoute également certains outils à l’interface de Visual Studio.Graphics Diagnostics has a dedicated interface - the Graphics Analyzer window - for diagnosing rendering problems, but it also adds some tools to the Visual Studio interface.

Barre d'outils Graphics (Visual Studio)The graphics toolbar (Visual Studio)

La barre d’outils Graphics fournit un accès rapide aux commandes Graphics Diagnostics.The Graphics toolbar provides quick access to Graphics Diagnostics commands.

Le démarrer les Diagnostics bouton exécute l’application dans Graphics Diagnostics.The Start Diagnostics button runs the app under Graphics Diagnostics. Lorsqu’une application s’exécute dans Graphics Diagnostics, le capturer le frame rendu suivant bouton est activé.When an app is running under Graphics Diagnostics, the Capture the next rendered frame button is enabled.

Interface de capture de DiagnosticsDiagnostics capture interface

Quand vous exécutez votre application dans Graphics Diagnostics, Visual Studio affiche une interface de session de diagnostic que vous pouvez utiliser pour capturer des frames, et qui affiche également la charge actuelle de l'UC et du GPU.When you run your app under Graphics Diagnostics, Visual Studio displays a diagnostics session interface that you can use to capture frames and which also displays the current CPU and GPU load. La charge de l'UC et du GPU s'affiche pour vous aider à identifier les frames que vous souhaitez peut-être capturer en raison de leurs caractéristiques de performances, plutôt que les erreurs de rendu.The CPU and GPU load is displayed to help you identify frames you might want to capture due to their performance characteristics, rather than rendering errors.

Toutefois, ce n'est pas le seul moyen de capturer des frames.This isn't the only way to capture frames though. Vous pouvez également capturer des frames à l'aide de l'interface de capture par programmation, ou à l'aide du programme de capture en ligne de commande, dxcap.exe.You can also capture frames by using the programmatic capture interface, or by using the command-line capture program, dxcap.exe.

Consultez capture d’informations graphiques pour plus d’informations.See Capturing Graphics Information for more information.

Utilisation du GPUGPU Usage

Graphics Diagnostics peut également profiler les performances de votre application Direct3D.Graphics Diagnostics can also profile the performance of your Direct3D app. Comme le profilage des données est altéré par l'enregistrement des détails relatifs aux événements graphiques, cette opération est distincte de la capture de frame à examiner à l'aide de Graphics Analyzer.Because profiling data would be skewed by recording details of graphics events, this is separate from capturing frames to be used examined with the Graphics Analyzer.

Consultez utilisation du GPU pour plus d’informations.See GPU Usage for more information.

Panneau de configuration DirectXDirectX control panel

Le panneau de configuration DirectX est un composant DirectX que vous pouvez utiliser pour modifier la manière dont DirectX se comporte (par exemple, vous pouvez activer la version de débogage des composants d'exécution DirectX, sélectionner le type de messages de débogage qui sont stockés, et désactiver certaines fonctionnalités du matériel graphique utilisées pour émuler le matériel ayant des capacités moindres).The DirectX control panel is a component of DirectX that you can use to change the way that DirectX behaves—for example, you can enable the debug version of the DirectX runtime components, select the kind of debug messages that are reported, and disallow certain graphics hardware capabilities from being used to emulate less-capable hardware. Ce niveau de contrôle sur DirectX peut vous aider à déboguer et à tester votre application DirectX.This level of control over DirectX can help you debug and test your DirectX app. Vous pouvez accéder au panneau de configuration DirectX à partir de Visual Studio.You can access the DirectX control panel from Visual Studio.

Pour ouvrir le panneau de configuration DirectXTo open the DirectX control panel

  • Dans la barre de menus, choisissez déboguer, Graphics, le panneau de configuration DirectX.On the menu bar, choose Debug, Graphics, DirectX Control Panel.

Graphics AnalyzerGraphics Analyzer

Visual Studio Graphics Analyzer est une interface dédiée pour l'examen des problèmes de rendu et de performances dans les frames que vous avez capturés.The Visual Studio Graphics Analyzer is a dedicated interface for examining rendering and performance problems in frames you've already captured. Dans Graphics Analyzer, vous trouverez plusieurs outils qui vous aideront à explorer et comprendre le comportement de rendu de votre application.Inside Graphics Analyzer, you'll find several tools to help you explore and understand the rendering behavior of your app. Chaque outil expose des informations d'un genre distinct concernant le frame inspecté. Par ailleurs, les outils sont conçus pour être utilisés conjointement afin d'identifier intuitivement la source d'un problème de rendu, à partir du moment où il est apparu dans le tampon de trame.Each tool exposes a different kind of information about the frame that's being inspected, and the tools are designed to be used in concert to intuitively narrow-in on the source of a rendering problem, starting from the its appearance in the framebuffer.

Cette illustration montre une disposition typique des outils dans Graphics Analyzer.This illustration shows a typical layout of tools in the Graphics Analyzer.

Tous les graphiques du débogueur windowsAll of the graphics debugger windows

Barre d'outils Graphics (Graphics Analyzer)The graphics toolbar (Graphics Analyzer)

La barre d'outils Graphics fournit un accès rapide aux fenêtres d'outils Graphics Analyzer.The Graphics toolbar provides quick access to Graphics Analyzer tool windows.

La barre d’outils Graphics en mode de diagnostics graphiquesThe Graphics toolbar in graphics diagnostics mode

Document journal de graphismeGraphics log document

Dans Graphics Analyzer, le document journal de graphisme est la fenêtre d'outil la plus importante.Inside the Graphics Analyzer, the graphics log document is the most prominent tool window. Cette fenêtre représente tous les frames capturés durant l'exécution de votre application dans Graphics Diagnostics.This window represents all of the frames you captured by running your app under Graphics Diagnostics. À ce stade, vous pouvez sélectionner un autre frame pour examiner ou choisir un pixel spécifique à analyser avec l'outil Historique des pixels.From here, you can select a different frame to examine or select a specific pixel that you want to examine with the Pixel History tool. L'image de tampon de trame affichée dans ce document change pour refléter l'événement actuellement sélectionné, ce qui vous permet de voir la façon dont le tampon de trame est affecté au fil du temps.The framebuffer image displayed in this document changes to reflect the currently selected Event so that you can see how the framebuffer is affected over time.

Le Document journal de graphisme est également le point d’entrée pour l’outil d’analyse des frames, ce qui vous aide à comprendre les performances d’une image en modifiant la façon dont certains aspects du rendu sont configurés et en fournissant des résultats de benchmark à comparer avec la version d’origine.The Graphics Log Document is also the entry point to the Frame Analysis tool, which helps you understand the performance of a frame by changing the way certain aspects of rendering are configured and providing benchmark results to compare with the original.

Liste des événementsEvent list

Les événements graphiques marquent chaque appel d'API Direct3D et chaque événement défini par l'utilisateur.Graphic events mark each Direct3D API call and user-defined event.

Le liste des événements montre tous les événements graphiques enregistrés durant le frame que vous examinez.The Event List shows all of the graphics events that were recorded during the frame you're examining. Pour identifier plus facilement ce qui est important, vous pouvez visualiser la liste des événements hiérarchiquement, en fonction des dernières modifications d'état relatives à l'appel de dessin, ou sous forme de chronologie.To help you find what's important, the event list can be viewed hierarchically—with recent state-changes underneath the subsequent draw call—or as a timeline. En outre, les événements sont des événements à code de couleurs selon la file d'attente à laquelle ils appartiennent. Vous pouvez filtrer la liste pour inclure uniquement les événements qui vous intéressent.Additionally, events are color-coded based on the queue they belong to and you can filter the list to only include the events you're interested in.

Quand vous sélectionnez un événement dans la liste, le reste des outils Graphics Analysis reflètent l'état du frame au moment de l'événement.When you select an event in the list, the rest of the Graphics Analysis tools reflect the state of the frame at the time of that event. De cette façon, vous pouvez voir l'effet d'un événement sur le GPU.In this way, you can see the effect of any event on the GPU. Par exemple, vous pouvez voir l'effet immédiat d'un appel de dessin sur le tampon de trame, même s'il est masqué par d'autres appels de dessin.For example, you can see the immediate effect of any draw call on the framebuffer, even if it becomes obscured by subsequent draw calls. Certains événements ont également des liens hypertexte que vous pouvez suivre pour plus d'informations sur leurs paramètres ou les objets de ressource associés.Some events also have hyperlinks you can follow to see more details about its parameters or related resource objects.

Étapes de canalisationPipeline stages

Chaque appel de dessin dans votre application passe par la canalisation graphique fournie par Direct3D.Each draw call in your app goes through the graphics pipeline provided by Direct3D. À chaque étape de canalisation, la sortie de l'étape précédente est transformée par un petit programme appelé nuanceur. Elle est ensuite transmise à l'étape suivante, jusqu'à son rendu final à l'écran.At each stage in the pipeline, output from the previous stage is transformed by a small program, called a shader, and then passed to the next stage until it is finally rendered to the screen. De nombreuses erreurs de rendu se produisent à la frontière entre les étapes de canalisation quand le format de sortie est différent de ce qui est attendu à l'étape suivante, ou quand une étape produit simplement des résultats incorrects.Many rendering errors occur at the boundary between pipeline stages when the output format is different than the next stage expects, or when any one stage simply produces incorrect results. Normalement, vous obtenez uniquement le résultat final visible sur votre écran. Vous ne pouvez pas distinguer facilement où l'erreur est survenue durant la canalisation.Normally, you only get the final results as you would see on your screen and you can't easily tell where in the pipeline the error occurred.

Le canalisation fenêtre affiche le résultat de chaque étape indépendamment, afin que vous puissiez déterminer plus facilement étape à laquelle un problème de rendu apparaît en premier.The Pipeline Stages window visualizes the result of each stage independently, so that you can more easily determine which stage a rendering problem first appears in. Une fois que vous avez identifié l'étape, vous pouvez démarrer le débogage de son nuanceur directement à partir de la fenêtre Étapes de canalisation.Once you've determined which stage that is, you can start debugging its shader right from the Pipeline Stages window.

État graphiqueGraphics State

Les opérations de rendu dépendent beaucoup de l'état de plusieurs objets.Rendering operations depend on a lot of state that's typically spread across multiple objects. Des problèmes de rendu de toutes sortes sont provoqués par un état mal configuré.Many kinds of rendering problems are caused by misconfigured state.

Le état fenêtre collecte les informations d’état relatives à chaque appel de dessin dans un seul emplacement afin qu’il est plus facile à trouver, et également met en évidence les modifications d’état qui se sont produites depuis le dernier appel de dessin.The State window collects the state information relevant to each draw call together in one place so that it's easier to find, and also highlights the state changes that have occurred since the previous draw call.

Historique des pixelsPixel history

Dans les scènes complexes, il n'est pas rare qu'un pixel soit ombré plusieurs fois dans un seul frame.In complex scenes, it's not uncommon for a pixel to be shaded multiple times in a single frame. La couleur précédente est parfois simplement remplacée, mais il arrive également que les couleurs soient combinées pour obtenir des effets tels que la transparence.Sometimes the earlier color is just overwritten, but other times the colors are combined together to achieve effects such as transparency. Quand le résultat de la combinaison n'a pas l'apparence souhaitée, vous ne pouvez pas déterminer facilement si cela est dû au fait qu'une des couleurs est incorrecte, ou s'il s'agit d'un problème de combinaison.When the result of combining them together doesn't have the right appearance you can't easily tell if it's because one of the colors was incorrect, or if there's a problem with the way they were combined. Parfois, un objet peut être absent, car sa contribution au pixel a été rejetée pour une raison quelconque.Other times, an object might appear to be missing because its contribution to the pixel was rejected for some reason.

Le historique des pixels fenêtre affiche l’historique complet du nuanceur de chaque pixel de l’image, y compris les contributions rejetées.The Pixel History window visualizes the complete shader history of every pixel in the frame, including rejected contributions. Pour les contributions qui n'ont pas été rejetées, elle affiche les résultats bruts du nuanceur et montre comment chaque nouvelle couleur a été combinée à la précédente.For contributions that weren't rejected, it displays the raw shader results and how each new color was combined with the previous one. Avec ces informations, il est beaucoup plus facile de localiser la source des erreurs dans les pixels qui fusionnent les résultats du nuanceur, ou quand un objet rendu est manquant, car sa contribution au pixel a été rejetée de façon incorrecte.With this information, it's much easier to locate the source of errors in pixels that blend shader results, or when a rendered object is missing because its contribution to the pixel was incorrectly rejected.

Pile des appels des événementsEvent call stack

Le code du nuanceur n'est pas la seule source des problèmes de rendu dans une application Direct3D. Parfois, le code source de votre application passe un paramètre incorrect ou ne configure pas correctement Direct3D.Shader code isn't the only source of rendering problems in a Direct3D app, sometimes your app's source code passes the wrong parameter or doesn't configure Direct3D quite right. Il existe un type d'erreur que la fonctionnalité décrite précédemment, Historique des pixels, peut vous aider à identifier. Il s'agit de l'erreur liée à l'absence d'un objet rendu, en raison du rejet de tous ses pixels.One kind of error that the previously discussed feature, Pixel History, can help you find is when a rendered object is missing because all its pixels have been rejected. Ce genre d'erreur se produit généralement quand vous avez configuré un paramètre de manière incorrecte, par exemple le paramètre qui contrôle la façon dont le test de profondeur est effectué. En principe, vous trouverez votre erreur quelque part dans la pile des appels de l'appel de dessin de l'objet manquant.This kind of error usually happens when you misconfigured a setting, such as the one that controls how the depth test is performed, and you can usually find your mistake somewhere in the call stack of the missing object's draw call.

Le pile des appels des événements fenêtre affiche la pile des appels complète de chaque événement graphique dans la liste des événements, et permet même d’atteindre de votre application du code source si les informations de débogage ne sont disponible.The Event Call Stack window displays the complete call stack of every graphics event in the Event List, and even lets you jump to your app's source code if debugging information is available. Il s'agit d'un outil puissant qui vous permet de suivre une erreur depuis sa première apparition, dans le GPU, jusqu'à son origine dans le code source de votre application.This is a powerful tool for following an error from where it first appears, on the GPU, back to where it originated in your app's source code.

Table des objetsObject table

Chaque frame rendu par votre application s'appuie probablement sur des centaines, voire des milliers d'objets de ressource.Every frame your app renders is probably backed by hundreds or even thousands of resource objects. Cela peut inclure les mémoires tampons d’arrière-plan, les cibles de rendu, les textures, les mémoires tampons de vertex, les mémoires tampons d’index, les mémoires tampons générales, quasiment tout ce dont Direct3D se souvient en tant qu’objet.These can include back buffers and render targets, textures, vertex buffers, index buffers, general buffers—almost everything Direct3D remembers is an object.

Le objet Table affiche tous les objets qui existent au moment de l’événement graphique sélectionné dans la liste des événements.The Object Table displays all the objects that exist at the time of the graphics event selected in the event list. Dans la mesure où la plupart des objets d'une application classique sont des textures, la liste des événements est optimisée pour montrer rapidement les détails pertinents relatifs aux images.Since most objects in a typical app are textures, the event list is optimized to show details relevant to images at a glance. La colonne Type vous indique le type d'objet présent dans chaque ligne, alors que la colonne Format indique le sous-type ou la version de l'objet.The Type column tells you what kind of object is in each row, and the Format column further shows the sub-type or version of the object. D'autres informations sont également affichées.Other details are also shown. Certains objets possèdent également des liens hypertexte que vous pouvez suivre pour afficher l'objet avec une visionneuse plus spécialisée. C'est le cas, par exemple, pour les textures (vous pouvez afficher la texture en tant qu'image) ou les mémoires tampons (vous pouvez choisir la façon dont la visionneuse de mémoire tampon analyse et affiche les octets bruts de mémoire tampon en définissant le format de la mémoire tampon).Some objects also have hyperlinks you can follow to view the object with a more specialized viewer, such as textures (you can view the texture as an image), or buffers (you can choose how the buffer viewer parses and displays the raw buffer bytes by defining the buffer format).

Analyse des framesFrame analysis

Graphiques de votre application ne doivent seulement être corrects, ils doivent être rapides.Your app's graphics don't just need to be correct - they need to be fast, too. Cela doit aussi se vérifier sur les appareils moins puissants, tels que les ordinateurs portables avec des cartes graphiques intégrées ou les téléphones mobiles.Even on less-powerful devices like laptops with integrated graphics or mobile phones. Enfin, les graphiques doivent être esthétiquement parfaits.And they still need to look great too.

Le analyse des frames outil explore les optimisations de performances potentielles en changeant automatiquement la manière dont l’application utilise Direct3D et fournit les résultats de test d’évaluation pour la comparaison.The Frame Analysis tool explores potential performance optimizations by automatically changing the way the app uses Direct3D and providing benchmark results for comparison. Par exemple, l'analyse des frames peut activer le mappage MIP (ou MIP mapping) sur chaque texture, ce qui permet de révéler les textures susceptibles de tirer parti du mappage MIP mais pour lesquelles il n'est pas actuellement activé.For example, Frame Analysis can enable mip-mapping on every texture, which might reveal textures that could benefit from mip-mapping but don't currently have it enabled. Sur le matériel compatible, l’analyse des frames présente également des informations collectées à partir des compteurs de performances du GPU. Ce genre d’informations permet d’identifier les problèmes de performances au niveau du matériel, par exemple un nombre élevé de blocages de récupération de texture ou de pertes dans le cache.On hardware that supports it, Frame Analysis also presents information collected from the GPU's performance counters—this level of information can identify hardware-level performance issues, such as high numbers of texture fetch stalls or cache misses.

Mais l’analyse des frames ne va pas seulement une affaire rapide, c’est à prendre les meilleures performances, que tout en donnant le moins de qualité visuelle.But Frame Analysis isn't just about going fast - it's about gaining the most performance you can while giving up the least amount of visual quality. Parfois, un effet impressionnant sur un affichage de grande taille n'a pas le même impact sur le petit écran d'un téléphone, où un effet plus simple peut s'avérer tout aussi réussi sans épuiser la batterie.Sometimes an expensive effect that looks great on a large display doesn't make the same impact when viewed on the small screen of a phone, where a simpler effect might look just as good without draining the battery. Les modifications automatiques et les tests d’évaluation par Graphics Analysis peuvent vous aider à trouver l’équilibre qui convient à votre application sur une gamme de périphériques.The automatic changes and benchmarks that Graphics Analysis provides can help you find the balance that's right for your app across a range of devices.

Voir aussiSee Also

Outil de ligne de commande de Capture Command-Line Capture Tool
Débogueur HLSLHLSL Debugger