Visão geral do diagnóstico de gráficos
O Diagnóstico de Gráficos ajuda você a depurar erros de renderização em aplicativos e jogos DirectX.
Requisitos do Visual Studio 2013
Para usar o Diagnóstico de Gráficos no Visual Studio 2013, você deve ter uma destas edições:
Visual Studio 2013 Ultimate
Visual Studio 2013 Premium
Visual Studio 2013 Professional
Visual Studio 2013 Express para Windows
Dica
O Visual Studio 2013 Express para Windows Desktop não oferece suporte aos recursos do Diagnóstico de Gráficos.
Requisitos do sistema operacional e SDK
O Windows Software Development Kit (SDK) para Windows 8,1 instala os componentes de tempo de execução que são necessários ao Diagnóstico de Gráficos e oferece suporte ao Windows 8,1 e Windows 8. Para usar Diagnóstico de Gráficos no Windows 7 e Windows Vista, você deve instalar um dos seguintes SDKs:
Windows SDK (versão 7.1)
DirectX SDK (junho de 2010)
Compatibilidade de versão do DirectX
O Diagnóstico de Gráficos oferece suporte a aplicativos que usam Direct3D 10, Direct3D 10.1, Direct3D 11, Direct3D 11.1 e Direct3D 11.2, além de suporte limitado a aplicativos que usam Direct2D. Ele não oferece suporte a aplicativos que usam versões anteriores do Direct3D, DirectDraw ou outras APIs gráficas.
Windows 8.1 e Direct3D 11.2
No Windows 8,1, o DirectX 11.2 apresenta novos recursos que incluem suporte para capturar informações gráficas ao longo do tempo de execução. O Windows 8,1 usa a nova captura baseada em tempo de execução, conhecida como captura robusta, exclusivamente para todas as versões do DirectX compatíveis com o Windows 8,1. A captura robusta também oferece suporte a novos recursos do Direct3D 11.2.
Suporte ao Windows 8 e ao Windows 7
Como as versões anteriores do Windows não oferecem suporte ao DirectX 11.2, a captura robusta não está disponível nessas plataformas. Em vez disso, aplicativos que são executados no Windows 8 ou no Windows 7 usam o método de captura anterior baseado em desvio conhecido como captura legada. Como não há necessidade de dar suporte a ela no Windows 8,1, a captura legada é preterida; porém, ainda está disponível para dar suporte a aplicativos executados no Windows 8 ou no Windows 7.
Suporte limitado ao Direct2D
Como o Direct2D é uma API de modo de usuário que foi criada com base no Direct3D, você pode usar o Diagnóstico de Gráficos para ajudar na depuração de problemas de renderização em aplicativos que usam o Direct2D. No entanto, como apenas os eventos do Direct3D subjacentes são gravados, em vez de eventos do Direct2D de nível mais alto, os eventos do Direct2D não aparecerão na Lista de Eventos de Gráficos. Além disso, como a relação entre os eventos do Direct2D e os eventos resultantes do Direct3D nem sempre é clara, usar o Diagnóstico de Gráficos para depurar problemas de renderização em aplicativos que usam o Direct2D não é algo simples. Ainda assim, você pode usar o Diagnóstico de Gráficos para obter informações sobre problemas de renderização de nível baixo em aplicativos que usam o Direct2D.
Alterações na Interface do usuário no Visual Studio 2013 Atualização 3
A partir do Visual Studio 2013 Atualização 3, as janelas da ferramenta de Diagnóstico de Gráficos são hospedadas em uma cópia independente do shell do Visual Studio para reduzir o número de janelas de ferramenta competindo pelo espaço limitado no IDE principal do Visual Studio. O shell personalizado que agora hospeda as ferramentas de diagnóstico de gráficos, chamadas análise de gráficos do Visual Studio, elimina menus e opções que não são necessárias ao diagnóstico de gráficos, mas caso contrário, as ferramentas de diagnóstico de gráficos e fluxos de trabalho são semelhantes ao diagnóstico de gráficos em versões anteriores do Visual Studio.
Há duas diferenças significativas:
Quando você executar o aplicativo no Diagnóstico de Gráficos, o Visual Studio não exibe mais uma versão ao vivo do Documento de Log de Gráficos. Em vez disso, Visual Studio fornece uma nova interface de captura. A nova interface de captura é semelhante ao seguinte:
A partir dessa interface pode capturar um ou vários quadros no log de gráficos e exibir gráficos em tempo real que exibem a taxa de quadros do seu aplicativo, bem como o tempo em milissegundos que cada quadro usa para processar.
Não é possível editar o código do shell da Análise de Gráficos. Se você abrir o código para a edição na Análise de Gráficos, ele será aberto no IDE principal do Visual Studio e receberá foco.
Essa interface é o que você vê no Visual Studio. Para iniciar a análise de gráficos do Visual Studio, escolha um dos quadros seguindo o quadro... link acima a miniatura da imagem, ou clicando duas vezes na miniatura.
Usando o Diagnóstico de Gráficos para depurar problemas de renderização
Depurar problemas de renderização em um aplicativo cheio de recursos gráficos não é tão simples quanto iniciar um depurador e percorrer alguns códigos. Em cada quadro, centenas de milhares de pixels exclusivos são produzidos, cada um de acordo com um conjunto complexo de estados, dados, parâmetros e códigos, e dentre eles, talvez apenas alguns pixels exibirão o problema que você está tentando diagnosticar. Para complicar ainda mais, o código que gera cada pixel é executado em hardware especializado que processa centenas de pixels paralelamente. As ferramentas e técnicas tradicionais de depuração (cujo aproveitamento é difícil mesmo no código em thread bastante simples) são ineficazes quando se deparam com grandes quantidades de dados.
As ferramentas de Diagnóstico de Gráficos no Visual Studio foram desenvolvidas para ajudar a localizar problemas de renderização, a começar pelos artefatos visuais que indicam o problema e rastreiam de volta para a origem do problema focando apenas o código de sombreador, os estágios de pipeline, as chamadas de desenho e o estado do dispositivo que são relevantes, no próprio código-fonte do aplicativo.
Veja alguns dos tipos de problema de renderização que o Visual Studio pode ajudar a resolver.
Estado de dispositivo
A configuração correta do dispositivo gráfico é importante porque determina como o pipeline gráfico interpreta os dados associados a cada chamada de desenho e como as saídas da chamada de desenho são mescladas. Por exemplo, se o estado do dispositivo especificar o sentido horário para giro do vértice, qualquer modelo que especifique vértices em um sentido anti-horário não será renderizado corretamente. O diagnóstico dos problemas de estado de dispositivo pode ser difícil, pois a raiz do problema no código-fonte, muitas vezes, é afastada dos objetos afetados. Ao usar o Diagnóstico de Gráficos, você pode exibir o estado de dispositivo atual a qualquer momento durante a renderização.Parâmetros e buffers de constantes incorretos ou não inicializados
Os aplicativos gráficos usam parâmetros e buffers de constantes para transmitir dados adicionais a uma chamada de desenho ou a um conjunto de chamadas de desenhos. Por exemplo, os dados podem especificar diferentes locais ou aparências para diferentes objetos. Quando esses dados não são inicializados ou contêm valores incorretos, o objeto correspondente é renderizado incorretamente, ou nem chega a ser renderizado. O diagnóstico desse tipo de problema pode ser difícil, pois nem sempre fica claro se o problema está nos dados ou no código de sombreador que os consomem. Também pode ser difícil determinar quais sombreadores, buffers de constantes e parâmetros correspondem ao erro. Você pode usar o Diagnóstico de Gráficos para determinar quais sombreadores, buffers de constantes e parâmetros se aplicam a cada chamada de desenho e para exibir os respectivos conteúdos.Bugs do sombreador
Cometer um erro no código de aplicativo é quase inevitável, seja o código C++ ou HLSL (High Level Shader Language). No entanto, a depuração do código HLSL tem sido tradicionalmente mais difícil porque ela não contava com o amplo suporte de depuração com o qual a C++ e outras linguagens contam. O Diagnóstico de Gráficos traz essas ferramentas tradicionais de depuração de código para o HLSL para que você possa percorrer o código, definir pontos de interrupção e examinar o conteúdo de variáveis, parâmetros e buffers de constantes.
Como o Diagnóstico de Gráficos funciona
Para usar o Diagnóstico de Gráficos, primeiramente você grava informações sobre como um aplicativo usa a API do Direct3D enquanto é executado e, posteriormente, examina o comportamento gravado. Para os quadros especificados, as informações que são gravadas incluem chamadas à API (como as que limpam a tela, desenham geometria, distribuem sombreadores de cálculo ou alteram o estado do dispositivo gráfico) juntamente com seus argumentos e cópias de buffers e objetos que são referenciados indiretamente. Além disso, as chamadas à API relacionadas à configuração e inicialização são gravadas antes da renderização de qualquer quadro. As informações que são gravadas são registradas em um arquivo de log de gráficos (.vsglog).
Você recria o comportamento da renderização que é gravado no log de gráficos reproduzindo os eventos de gráficos no seu computador de desenvolvimento, ou em um dispositivo ou computador remoto. A máquina de reprodução pode ser o mesmo dispositivo ou máquina em que o log de gráficos foi originalmente capturado, ou outro. Para a maioria dos recursos de reprodução, o hardware gráfico da máquina de reprodução é usado para reproduzir eventos de gráficos, mas quando o depurador HLSL é usado, o código de sombreador sempre é reproduzido usando uma GPU emulada na CPU. Usar uma GPU emulada possibilita percorrer o código de sombreador, inspecionar variáveis e usar outros recursos comuns de depuração, sem considerar se o hardware gráfico na máquina de reprodução oferece suporte à depuração de hardware.
Dica
Embora o log de gráficos capture a maioria das informações relevantes internamente, informações adicionais são exigidas para utilização completa de alguns recursos do Diagnóstico de Gráficos.Por exemplo, para usar por completo o recurso de pilha de chamadas de gráficos, você também precisa ter o arquivo de banco de dados do programa (.pdb) e o código-fonte do aplicativo.Para depurar o código-fonte do sombreador HLSL, também é preciso ter o código-fonte do sombreador.(Se o sombreador foi compilado usando o compilador de sombreador D3D11.1 e as informações de depuração estiverem habilitadas, o código-fonte do sombreador será inserido no log de gráficos durante a captura.)
Dica
Como determinadas APIs podem não estar disponíveis em versões anteriores do Windows ou do DirectX, não é possível reproduzir logs de gráficos que capturaram essas chamadas à API em um computador de reprodução que não oferece suporte a eles.
Logs de gráfico
O log de gráficos contém um ou vários quadros capturados de um aplicativo de gráficos DirectX em execução. Como um log de gráficos é independente, esses quadros podem ser recriados posteriormente e sem referências ou informações externas. Isso significa que é possível compartilhar logs de gráficos com outros desenvolvedores, examinar problemas em diferentes computadores e examinar logs de gráfico antigos, mesmo quando os modelos e texturas tiverem sido alterados no desenvolvimento. Você também pode carregar diversos arquivos de log de gráficos (.vsglog) ao mesmo tempo para comparar dados e resultados de renderização.
Para abrir um arquivo de log de gráficos (vsglog)
No Visual Studio, na barra de menu, escolha Arquivo, Abrir, Arquivo. A caixa de diálogo Abrir Arquivo é exibida.
Especifique um arquivo de log de gráficos (.vsglog) a ser aberto e escolha o botão Abrir.
Dica
Você pode extrair, modificar e salvar cópias de malhas e texturas de um log de gráficos usando as ferramentas de gráficos que fazem parte do Visual Studio.No entanto, o conteúdo do log de gráficos não é afetado por essas modificações.Para obter informações sobre essas ferramentas de gráficos, consulte Trabalhando com ativos 3D para jogos e aplicativos.
A barra de ferramentas Gráficos
A barra de ferramentas Gráficos fornece acesso rápido aos comandos e janelas de ferramentas do Diagnóstico de Gráfico.
O botão Iniciar Diagnóstico executa o aplicativo em Diagnóstico de Gráficos. Quando um aplicativo estiver em execução em Diagnóstico de Gráficos, o botão Capturar o próximo quadro processado será habilitado e você poderá usar os outros botões para exibir as diferentes janelas de ferramentas. Para obter mais informações sobre como executar o aplicativo em Diagnóstico de gráficos e captura informações de gráficos, consulte Capturando informações de gráficos.
Janelas de ferramentas do Diagnóstico de Gráficos
A ilustração a seguir mostra um típico layout das janelas de ferramentas que são usadas para inspecionar e depurar quadros capturados. Cada janela expõe uma categoria diferente de informações sobre o quadro capturado que está sendo inspecionado e até mesmo sobre pixels individuais no quadro.
Use o Documentos de log de gráfico janela para identificar os problemas de renderização que você está interessado.
Use o Lista de eventos do gráfico para identificar os eventos relacionados a um problema de renderização.
Use o Estágios de Pipeline Gráficos janela para identificar o estágio de pipeline em que um problema de renderização aparece pela primeira vez.
Use o Pilha de chamadas de gráfico para localizar o código do aplicativo que está relacionado a um problema de renderização.
Use o Histórico de pixel gráfico para examinar os detalhes de eventos que afetam a cor final do pixel.
Use o Tabela de objetos de gráfico para exibir os detalhes de objetos que são relacionados a um problema de renderização.
Painel de controle do DirectX
O painel de controle do DirectX é um componente do DirectX que você pode usar para alterar o comportamento do DirectX. Por exemplo, é possível habilitar a versão de depuração dos componentes de tempo de execução do DirectX, selecionar os tipos de mensagem de depuração que são relatados e impedir que determinados recursos de hardware gráfico sejam usados para emular um hardware menos capaz. Esse nível de controle sobre o DirectX pode ajudar você a depurar e testar seu aplicativo DirectX. É possível acessar o painel de controle do DirectX do Visual Studio.
Para abrir o painel de controle do DirectX
- Na barra de menus, escolha Depurar, Gráficos, Painel de Controle do DirectX.