Condividi tramite


Debug HLSL

Il debugger HLSL, uno degli strumenti di diagnostica della grafica presenti in Visual Studio, consente di comprendere il modo in cui il codice di shader HLSL opera con i dati di grafica registrati durante la sessione di acquisizione di diagnostica della grafica.

Questo è il debugger HLSL:

Debug di HLSL utilizzando le finestre Stack di chiamate ed Espressioni di controllo.

Informazioni sul debugger HLSL

Il debugger HLSL consente di individuare i problemi che sorgono nel codice di shader.L'esecuzione del debug del codice HLSL in Visual Studio somiglia al debug del codice scritto in altri linguaggi (ad esempio, C++, C# o Visual Basic).È possibile controllare il contenuto delle variabili, impostare i punti di interruzione, eseguire codice e risalire lo stack di chiamate, proprio come quando si esegue il debug di altri linguaggi.

Tuttavia, poiché l'hardware e il software della CPU (codice di applicazione) sono molto diversi dall'hardware e dal software della GPU (codice shader), il debug di tipo CPU non è possibile in una GPU a meno che il debugger GPU non funzioni in modo completamente diverso.La differenza fondamentale tra i generi di lavoro che svolgono le GPU e le CPU è che le GPU distribuiscono il lavoro tra centinaia di processori semplici e relativamente lenti che sono ottimizzati per le operazioni di grafica che prevedono la gestione di set di dati molto grandi, mentre le CPU utilizzano una manciata di processori complessi e relativamente veloci per gestire carichi di lavoro meno specifici e meno grandi.Inoltre, poiché un GPU è essenzialmente un computer indipendente che gestisce i propri meccanismi interni e solo raramente condivide informazioni con la CPU, è molto difficile per un debugger in esecuzione sulla CPU essere a conoscenza di cosa accade nella GPU in un determinato momento.Anche se una CPU può continuare, il codice GPU utilizza troppi thread e genera troppi dati da vagliare per gli sviluppatori.

Per ovviare a queste difficoltà, tramite il debugger HLSL i frame acquisiti vengono ricreati sulla base delle informazioni registrate nel log di grafica, anziché tentando di monitorare una GPU in tempo reale mentre esegue il codice di shader.Poiché un log della grafica contiene informazioni sufficienti per ricreare una parte dell'output e poiché la diagnostica della grafica fornisce strumenti che consentono di individuare il pixel e l'evento esatto in cui si è verificato un errore, il debugger HLSL deve solo simulare il thread dello shader interessato.Ciò significa che il lavoro dello shader può essere simulato nella CPU, dove i meccanismi interni sono in visualizzazione completa.Questa operazione consente al debugger HLSL di operare in modo simile alla CPU.

Tuttavia, il debugger HLSL attualmente è limitato nei modi seguenti:

  • Il debugger HLSL non supporta la funzionalità Modifica e continuazione.

  • Non è possibile eseguire il debug di un'app e del codice shader contemporaneamente.Tuttavia, è possibile alternarli.

  • È possibile aggiungere variabili e registri alla finestra Espressioni di controllo, ma le espressioni non sono supportate.

  • I compute shader non sono supportati.

Tuttavia, il debugger HLSL fornisce una migliore esperienza di debug più di tipo CPU di debug rispetto a quanto sarebbe altrimenti possibile.

Vedere anche

Attività

Procedura dettagliata: oggetti mancanti a causa dello sfondo Vertex

Procedure dettagliate: debug degli errori di rendering dovuti allo sfondo