Debuggen von DirectX-Grafiken

Visual Studio enthält Diagnosetools, die Ihnen dabei helfen können, Renderprobleme in DirectX-basierten Spielen und Apps zu beheben.

Debugging von DirectX-Grafiken in Visual Studio

Zum Debuggen von Renderproblemen in einem Spiel oder einer App genügt normalerweise nicht, einfach einen Debugger zu starten und den Code schrittweise zu untersuchen.Die Diagnose von Renderproblemen bei Grafiken umfasst mehrere besondere Herausforderungen.Beispielsweise können in einem bestimmten Frame Hunderttausende oder sogar Millionen von Pixeln als Ausgabe erzeugt werden, und manchmal sind es noch mehr, die aber nicht dargestellt werden. Und von diesen weisen möglicherweise nur einige auf das Problem hin, das Sie untersuchen.Darüber hinaus umgeben möglicherweise mehrere Gigabyte Daten jeden gerenderten Frame, und um alles noch komplizierter zu machen, werden alle diese Daten auf dedizierter Hardware verarbeitet, welche die Arbeit auf Hunderte oder Tausende spezielle Verarbeitungseinheiten aufteilt, die nicht der unmittelbaren Beobachtung durch den Zentralprozessor (CPU) unterliegen.Herkömmliche Debugger sind nicht für diese Arten von Herausforderungen konzipiert.

Die Grafikdiagnose-Tools Visual Studio wurden entworfen, um Ihnen helfen, die Quelle von Renderproblemen zu suchen. Sie beginnen mit den visuellen Artefakten, die auf das Problem hinweisen, und untersuchen dann schrittweise rückwärts den zugehörigen Shadercode, die Grafikpipeline, die Draw-Aufrufe, die Ressourcen, den Gerätezustand und sogar den Quellcode der App.

Im Folgenden sind einige Arten von Renderproblemen aufgeführt, bei denen Visual Studio Ihnen helfen kann.

Hh315751.collapse_all(de-de,VS.110).gifGerätezustand

Die richtige Konfiguration des grafischen Gerätes ist wichtig, weil damit die Erwartungen festgelegt werden, denen die Modell- und Texturdaten in der gesamten App entsprechen müssen.Wenn beispielsweise der Gerätezustand die Drehrichtung im Uhrzeigersinn vorgibt, wird kein Modell, das Vertices entgegen dem Uhrzeigersinn festlegt, ordnungsgemäß gerendert. Oder wenn die Funktion für den Tiefentest auf größer-als festgelegt wurde, werden weiter entfernte Objekte über die Objekte gezeichnet, die näher liegen.Auf dem Gerätezustand beruhende Probleme können schwer zu diagnostizieren sein, weil die Wurzel des Problems im Quellcode häufig weit entfernt von den betroffenen Objekten ist.

Die Grafikdiagnose kann Ihnen helfen, die Daten und den Gerätezustand hinter den betroffenen Pixeln zu überprüfen, damit Sie Gerätezustandsprobleme eingrenzen können.

Hh315751.collapse_all(de-de,VS.110).gifShaderfehler

Dass sich in den App-Code Fehler einschleichen, ist fast unvermeidlich, unabhängig davon, ob der Code in C++ oder High-Level Shader Language (HLSL) erstellt wurde.HLSL-Code war bisher nur schwer zu debuggen, weil dafür nicht die umfassende Debugunterstützung zur Verfügung stand, die C++ und andere Sprachen nutzen können.

Die Grafikdiagnose kann Ihnen helfen, Shaderfehler zu finden und zu beheben, weil sie es ermöglicht, HLSL-Code zu debuggen.Unter Verwendung der Informationen aus einem Grafikprotokoll kann der HLSL-Debugger Draw-Ereignisse auf Shaderebene "wiederholen". Sie können die Ausführung somit schrittweise nachvollziehen, Haltepunkte festlegen und den Inhalt von temporären Variablen, Parametern und von Konstantenpuffern überprüfen.Damit Sie sich mit dem HLSL-Debugger auf die problematischen Bereiche konzentrieren können, stellt die Grafikdiagnose Einstiegspunkte für Draw-Ereignisse (durch Grafikpipelinestufen Fenster) und für einzelne Pixel (durch Grafikpixelverlauf) bereit.

Hh315751.collapse_all(de-de,VS.110).gifNicht initialisierte oder falsche Parameter und Konstanten

Grafik-Apps verwenden Parameter- und Konstantenpuffer, um Informationen effizient für die Grafikpipeline bereitzustellen, damit verschiedene Objekte durch benutzerdefinierten Shadercode unterschiedlich transformiert und gerendert werden können.Wenn ein konstanter Puffer oder ein Parameter nicht initialisiert wurde oder wenn nicht den gewünschten Wert enthält, wird das entsprechende Objekt möglicherweise falsch oder überhaupt nicht gerendert.Probleme mit einem konstanten Puffer oder Parameter kann schwierig sein, um zu bestimmen, da es nicht immer, ob der Fehler durch ein Problem mit einem konstanten Puffer oder Parameter verursacht wird, oder durch einen Fehler im Shadercode deaktiviert ist, und wenn ein Shaderfehler ist, der Shader darauf entsprechen.

Die Grafikdiagnose kann Ihnen helfen, die Shader zu identifizieren, die den Fehler verursachen, und den HLSL-Debugger zu verwenden, um den Shadercode zu überprüfen, damit Sie Fehler in Parameter- und Konstantenpuffern eingrenzen können.Wenn Sie der Meinung sind, dass der Shadercode korrekt ist, können Sie den HLSL-Debugger verwenden, um verdächtige Parameter oder Konstanten zu identifizieren. Navigieren Sie dazu mithilfe der Aufrufliste des Grafikereignisses zu dem App-Code, der das betroffene Objekt rendert, und ermitteln Sie dann, wo der Inhalt des Parameter- oder der Konstantenpuffers zuletzt festgelegt wurde.

DirectX-Versionskompatibilität

Die Grafikdiagnose unterstützt Apps, die Direct3D 10, Direct3D 10.1, Direct3D 11 oder Direct3D 11.1 verwenden, und bietet eingeschränkte Unterstützung für Apps, die Direct2D verwenden.Sie unterstützt keine Apps, die frühere Versionen von Direct3D und DirectDraw verwenden oder andere Grafik-APIs.

Hh315751.collapse_all(de-de,VS.110).gifBegrenzte Direct2D-Unterstützung

Da die Direct2D-API die Direct3D-API für viele eigene Funktionen verwendet, kann die Grafikdiagnose eingesetzt werden, um beim Debuggen von Apps helfen, die Direct2D verwenden.Da sich die Grafikdiagnose jedoch in die zugrunde liegenden Direct3D-Ereignisse einklinkt und nicht in die übergeordneten Direct2D-Ereignisse, kann sie von Direct2D-Ereignissen, die Direct3D nicht verwenden, keine Details aufzeichnen.Und weil die Beziehungen zwischen Direct2D-API-Aufrufen und den resultierenden Direct3D-API-Aufrufen nicht immer nachvollziehbar sind, kann die Verwendung der Grafikdiagnose bei Direct2D-Apps zu Ergebnissen führen, die ebenfalls nicht eindeutig sind.Sie können die Grafik-Diagnose aber verwenden, um Informationen zu Problemen abzurufen, die in Direct2D-Apps beim Rendern auf unterster Ebene auftreten.

Betriebssystem- und SDK-Anforderungen

Windows 8 installiert die Laufzeitkomponenten, die von den in diesem Dokument beschriebenen Grafikdebuggingfunktionen benötigt werden.Um diese Funktionen unter Windows 7 und Windows Vista zu verwenden, müssen Sie eines der folgenden SDKs (Software Development Kit) installieren:

  • DirectX SDK (Juni 2010)

  • Windows SDK (Version 7.1)

Verwandte Themen

Titel

Beschreibung

Grafikdiagnose

Beschreibt, wie die Grafikdiagnose verwendet wird, um Renderprobleme in DirectX-basierten Apps zu ermitteln und zu debuggen.

Grafikdiagnosebeispiele

Enthält Links zu Artikeln bereit, die veranschaulichen, wie Grafik-Diagnose verwendet, um Graphikinformationen erfassen und allgemeine Renderingprobleme zu bestimmen.

Debuggen in Visual Studio

Stellt die Debuggingfunktionen in Visual Studio vor.

DirectX-basierte Grafiken und Spiele

Enthält Links zu Artikeln bereit, die DirectX-Graphiktechnologien erläutert.