Debug grafica DirectX

Visual Studio contiene strumenti di diagnostica che è possibile utilizzare per risolvere i problemi di rendering in giochi e app basati su DirectX.

Esecuzione del debug della grafica DirectX in Visual Studio

L'esecuzione del debug dei problemi di rendering in un gioco o in un'applicazione non è semplice come avviare un debugger e passare attraverso il codice.La diagnostica dei problemi di rendering della grafica presenta alcune problematiche esclusive.Ad esempio, nel frame specificato, centinaia di migliaia (se non milioni) di pixels vengono prodotti come output e molte volte di più di quelli che possono essere prodotti ma non visti. Tra questi, forse solo pochi pixel mostreranno il problema che si tenta di diagnosticare.Inoltre, possono essere presenti diversi gigabyte dei dati in ogni frame di cui è stato eseguito il rendering e, a complicare ulteriormente le cose, tutti questi dati vengono elaborati su hardware dedicato che suddivide il lavoro tra centinaia o migliaia di unità di elaborazione specializzate, tutte al di fuori dell'osservazione diretta dell'unità centrale di elaborazione (CPU).I debugger tradizionali non sono strutturati per risolvere questo genere di problematiche.

Gli strumenti di diagnostica della grafica in Visual Studio sono progettati per individuare l'origine dei problemi di rendering a partire dagli elementi visivi che indicano il problema e quindi risalendo attraverso il codice di shader correlato, la pipeline grafica, le chiamate di disegno, le risorse e lo stato del dispositivo e persino attraverso il codice sorgente dell'app.

Di seguito sono riportati alcuni tipi di problemi di rendering per cui Visual Studio può fornire supporto.

Hh315751.collapse_all(it-it,VS.110).gifStato del dispositivo

La configurazione corretta del dispositivo grafico è importante perché imposta le aspettative che i dati di modello e trama devono soddisfare in tutta l'applicazione.Ad esempio, se lo stato del dispositivo specifica l'ordine dei vertici in senso orario, allora non verrà eseguito correttamente il rendering di tutti i modelli che specificano i vertici in senso anti-orario; oppure, se la funzione del test di profondità è stata impostata su maggiore di, gli oggetti più lontani verranno disegnati sugli oggetti che sono più vicini.I problemi di stato del dispositivo possono essere difficili da diagnosticare perché la radice del problema nel codice sorgente è spesso distante dagli oggetti interessati.

La diagnostica della grafica può consentire di esaminare i dati e lo stato del dispositivo oltre i pixel interessati in modo da limitarsi ai problemi relativi allo stato del dispositivo.

Hh315751.collapse_all(it-it,VS.110).gifBug di shader

Commettere un errore nel codice di applicazione è quasi inevitabile, se nel codice è C++ che in High Level Shader Language (HLSL).Tuttavia, il debug del codice HLSL è generalmente più difficile poiché non dispone del supporto di debug dettagliato di cui C++ e altri linguaggi dispongono.

La diagnostica della grafica è in grado di trovare e correggere i bug dello shader perché consente di eseguire il debug del codice HLSL.Utilizzando le informazioni acquisite nel log di grafica, il debugger HLSL può "riprodurre" eventi di disegno a livello di shader in modo che sia possibile avanzare nell'esecuzione, impostare i punti di interruzione ed esaminare il contenuto delle variabili temporanee, dei parametri e dei buffer costanti.Per aiutare a individuare il punto corretto, la diagnostica di grafica fornisce punti di ingresso al debugger HLSL da eventi di disegno (tramite la finestra Fasi pipeline grafica ) e da singoli pixel (grazie alla finestra Cronologia pixel grafica).

Hh315751.collapse_all(it-it,VS.110).gifCostanti e parametri non inizializzati o errati

Le applicazioni grafiche utilizzano parametri e buffer costanti per fornire efficacemente informazioni alla pipeline grafica e in modo che sia possibile trasformare o eseguire il rendering di oggetti diversi in modo differente rispetto al codice shader personalizzato.Quando un buffer costante o un parametro non è stato inizializzato, o quando non contiene il valore desiderato, l'oggetto corrispondente viene eseguito il rendering errato, oppure per alcuna operazione.I problemi con un buffer costante o un parametro possono essere difficili da diagnosticare poiché non è sempre chiaro se l'errore è causato da un problema con un buffer costante o di un parametro, o da un bug nel codice di shader e se è un bug di shader, consentendo shader corrispondono a.

La diagnostica della grafica consente di identificare gli shader corrispondenti all'errore e di utilizzare il debugger HLSL per controllare il codice di shader in modo da potersi limitare ai problemi relativi ai parametri e ai buffer costanti.Quando si ritiene che il codice di shader sia corretto, è possibile utilizzare il debugger HLSL per identificare i parametri o le costanti sospetti, utilizzare Stack di chiamate eventi grafici per spostarsi nel codice dell'applicazione che ha eseguito il rendering dell'oggetto interessato e quindi cercare il punto in cui il parametro o il buffer di costanti è stato impostato per l'ultima volta.

Compatibilità tra versioni DirectX

La diagnostica della grafica supporta le applicazioni che utilizzano Direct3D 10, Direct3D 10.1, Direct3D 11 e Direct3D 11.1 e fornisce supporto limitato alle applicazioni che utilizzano Direct2D.Non supporta le app che utilizzano versioni precedenti di Direct3D, DirectDraw o altri API grafiche.

Hh315751.collapse_all(it-it,VS.110).gifSupporto Direct2D limitato

Poiché l'API Direct2D utilizza l'API Direct3D API per la maggior parte delle sue funzionalità, la diagnostica della grafica può essere utilizzata per eseguire il debug di applicazioni che utilizzano Direct2D.Tuttavia, poiché la diagnostica della grafica associa gli eventi sottostanti Direct3D anziché gli eventi di primo livello Direct2D, questa non acquisisce i dettagli degli eventi Direct2D che non utilizzano Direct3D.Inoltre, poiché le relazioni tra le chiamate API Direct2D e le chiamate API Direct3D risultanti non sono sempre chiare, l'utilizzo della diagnostica della grafica per le applicazioni Direct2D non è diretto.Tuttavia, è possibile utilizzare la diagnostica grafica per ottenere informazioni sui problemi di rendering di basso livello nelle app che utilizzano Direct2D.

Sistema operativo e requisiti SDK

Con Windows 8 vengono installati i componenti di runtime richiesti dalle funzionalità di debug della grafica descritte in questo documento.Per utilizzare queste funzionalità in Windows 7 e Windows Vista, è necessario installare uno dei seguenti SDK:

  • DirectX SDK (giugno 2010)

  • Windows SDK (versione 7.1)

Argomenti correlati

Titolo

Descrizione

Diagnostica grafica

Viene descritto come utilizzare la diagnostica della grafica per diagnosticare ed eseguire il debug dei problemi di rendering nelle applicazioni basate su DirectX.

Esempi di diagnostica grafica

Vengono forniti collegamenti ad articoli che illustrano come utilizzare la diagnostica di grafica per acquisire informazioni grafiche e per diagnosticare problemi di rendering comuni.

Debug in Visual Studio

Introduce le funzionalità di debug in Visual Studio.

Grafici e giochi DirectX

Vengono forniti collegamenti ad articoli che illustrano le tecnologie grafiche di DirectX.