Aplicativos do Windows
Recolher sumário
Expandir sumário
Informações
O tópico solicitado está sendo mostrado abaixo. No entanto, este tópico não está incluído nesta biblioteca.

Visão geral do diagnóstico de gráficos do Visual Studio

 

Publicado: abril de 2016

Para obter a documentação mais recente do Visual Studio 2017 RC, consulte a documentação do Visual Studio 2017 RC.

O Visual Studio Diagnóstico de gráficos é um conjunto de ferramentas de registro e, em seguida, analisando problemas de renderização e desempenho em aplicativos Direct3D. Diagnóstico de gráficos pode ser usado em aplicativos que estão sendo executados localmente em seu PC com Windows, em um emulador de dispositivo do Windows ou em um dispositivo ou PC remoto.

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.

Diagnóstico de gráficos oferece suporte a aplicativos que usam o Direct3D 10, Direct3D 11 e 12 do Direct3D e fornece suporte limitado para aplicativos que usam o Direct2D. Ele não oferece suporte a aplicativos que usam versões anteriores do Direct3D, DirectDraw ou outras APIs gráficas.

Windows 10 e Direct3D 12

Windows 10 apresenta a próxima versão do Direct3D, Direct3D 12, que é substancialmente diferente do Direct3D 10 e 11 Direct3D. Essas diferenças retornem DirectX em alinhamento com hardware de gráficos modernos e liberando todo o seu potencial, mas também trazer grandes alterações de API e colocar o maior responsabilidade para o programador para gerenciar a contenção e tempos de vida do recurso. Ter ótimas ferramentas de depuração é crucial para ajudar programadores gráficos tornar essa transição para o diagnóstico de gráficos em 2015 do Visual Studio oferece suporte a Direct3D12 certo desde o início. Apesar das diferenças, o diagnóstico de gráficos com 12 Direct3D mantém paridade de recursos com o diagnóstico de gráficos com o Direct3D 11.2, com a exceção atual do recurso de análise de quadro. Em breve, o suporte para análise de quadro no Direct3D 12 será adicionado, seguido por novas ferramentas de diagnóstico para ajudar a resolver os novos tipos de bugs que podem ser encontradas em Direct3D 12.

Windows 10 também mantém o suporte para versões anteriores do Direct3D e jogos e aplicativos que dependem delas. Diagnóstico de gráficos no Visual Studio de 2015 continua a suportar o Direct3D 10 e 11 do Direct3D 10 do Windows e Windows 8.1.

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 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.

Diagnóstico de gráficos tem uma interface dedicada — a janela de gráficos Analyzer — para diagnosticar problemas de renderização, mas também adiciona algumas ferramentas para a interface do Visual Studio.

A barra de ferramentas de gráficos (Visual Studio)

A barra de ferramentas gráficos fornece acesso rápido aos comandos de diagnóstico de gráficos.

O botão Iniciar Diagnóstico executa o aplicativo em Diagnóstico de Gráficos. Quando um aplicativo está em execução no diagnóstico de gráficos, o capturar o próximo quadro processado botão é habilitado.

Interface de captura de diagnóstico

Quando você executa seu aplicativo em Diagnóstico de gráficos, o Visual Studio exibe uma interface de sessão de diagnóstico que você pode usar para capturar os quadros e que também exibe a carga de CPU e GPU atual. A carga de CPU e GPU é exibida para ajudá-lo a identificar quadros que deseja capturar devido às suas características de desempenho, em vez de erros de renderização.

Isso não é a única maneira de capturar quadros embora. Você também pode capturar quadros usando a interface de captura programática ou usando o programa de linha de comando capture, dxcap.exe.

Consulte Capturando informações de gráficos para obter mais informações.

Uso de GPU

Diagnóstico de gráficos também pode analisar o desempenho de seu aplicativo Direct3D. Como a criação de perfil de dados seria inclinada por registrar detalhes de eventos de gráficos, ela é separada da captura dos quadros a serem usados examinado com o analisador de gráficos.

Consulte Uso de GPU para obter mais informações.

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.

O analisador de elementos gráficos do Visual Studio é uma interface dedicada para examinar os problemas de renderização e desempenho em quadros que já capturada. Analisador de gráficos, você encontrará várias ferramentas para ajudá-lo a explorar e entender o comportamento de renderização de seu aplicativo. Cada ferramenta expõe um tipo diferente de informações sobre o quadro que está sendo inspecionado e as ferramentas devem ser usadas em conjunto para intuitivamente estreito na origem de um problema de renderização, a partir de sua aparência no framebuffer.

Esta ilustração mostra um típico layout das ferramentas no analisador de gráficos.

Todas as janelas do depurador gráfico mostradas

A barra de ferramentas de gráficos (Analisador de gráficos)

A barra de ferramentas gráficos fornece acesso rápido a janelas de ferramenta do analisador de gráficos.

A barra de ferramentas do depurador de elementos gráficos no modo de diagnóstico

Documento de log de gráficos

No analisador de gráficos, o documento de log de gráficos é a janela da ferramenta mais proeminente. Essa janela representa todos os quadros capturados executando o aplicativo em Diagnóstico de gráficos. A partir daqui, você pode selecionar um quadro diferente para examinar ou selecionar um pixel específico que você deseja examinar com a ferramenta de histórico de Pixel. A imagem do framebuffer exibida neste documento são alterados para refletir o evento selecionado no momento para que você possa ver como o framebuffer é afetada ao longo do tempo.

O Documentos de log de gráfico é também o ponto de entrada para a ferramenta de análise de quadro, que ajuda a entender o desempenho de um quadro alterando o modo como determinados aspectos de processamento são configurados e fornecendo os resultados do parâmetro de comparação para comparar com o original.

Lista de eventos

Eventos de gráficos marcarem cada chamada de API do Direct3D e eventos definidos pelo usuário.

O Lista de Eventos mostra todos os eventos de gráficos que foram registrados durante o quadro que você está examinando. Para ajudá-lo a descobrir o que é importante, a lista de eventos pode ser exibida hierarquicamente — com recentes alterações de estado sob os próximos chamada de desenho — ou como uma linha do tempo. Além disso, eventos são codificados por cores com base em fila pertençam a e você pode filtrar a lista para incluir somente os eventos que você está interessado.

Quando você seleciona um evento na lista, o restante das ferramentas de análise de gráficos refletem o estado do quadro no momento do evento. Dessa forma, você pode ver o efeito de qualquer evento na GPU. Por exemplo, você pode ver o efeito imediato de qualquer desenho chamar framebuffer, mesmo que se torna obscurecida por chamadas de desenho subsequentes. Alguns eventos também têm hiperlinks podem ser seguidas para ver mais detalhes sobre seus parâmetros ou objetos de recurso relacionado.

Estágios de pipeline

Cada chamada de desenho em seu aplicativo passa pelo pipeline gráfica fornecido pelo Direct3D. Em cada estágio no pipeline, saída do estágio anterior é transformada por um pequeno programa chamada um sombreador e, em seguida, passada para o próximo estágio até que finalmente é renderizado na tela. Muitos erros de renderização ocorrerem no limite entre os estágios de pipeline quando o formato de saída é diferente do que o próximo estágio espera, ou quando qualquer um estágio simplesmente produz resultados incorretos. Normalmente, somente você obtém os resultados finais como você vê na tela e você não pode saber facilmente onde no pipeline ocorreu o erro.

O Estágios de Pipeline janela visualiza o resultado de cada estágio de forma independente, para que você possa determinar mais facilmente qual estágio um problema de renderização aparece pela primeira vez no. Depois de determinar qual estágio, ou seja, você pode iniciar a depuração seu shader à direita da janela estágios de Pipeline.

Estado de elementos gráficos

Operações de renderização dependem muito do estado que normalmente é distribuído entre vários objetos. Vários tipos de problemas de renderização são causados por estado configurado incorretamente.

O Estado janela coleta as informações de estado relevantes para cada chamada de desenho junto em um único local para que ele é mais fácil localizar e também realça as alterações de estado que ocorreram desde a última chamada de desenho.

Histórico de pixel

Em cenas complexas, não é incomum para um pixel a ser sombreado várias vezes em uma única estrutura. Às vezes, a cor anterior é simplesmente substituídos, mas outras vezes as cores são combinadas para atingir efeitos como transparência. Quando o resultado da combinação de conjunto não tem a aparência correta facilmente não pode determinar se é porque uma das cores estava incorreta ou se há um problema com a maneira como eles foram combinados. Outras vezes, um objeto pode parecer estar faltando porque sua contribuição para o pixel foi rejeitada por algum motivo.

O Histórico de Pixel janela visualiza o histórico de sombreador completa de cada pixel no quadro, incluindo contribuições rejeitadas. Para contribuições que não foram rejeitadas, exibe os resultados brutos do sombreador e como cada nova cor foi combinado com o anterior. Com essas informações, é muito mais fácil de localizar a origem de erros em pixels que mesclar os resultados de sombreador, ou quando um objeto renderizado está faltando porque sua contribuição para o pixel incorretamente foi rejeitada.

Pilha de chamadas

Código de sombreador não é a única fonte de problemas de processamento em um aplicativo Direct3D, às vezes, código-fonte do aplicativo transmite o parâmetro incorreto ou não configurar o Direct3D é exatamente isso. Um tipo de erro que o recurso discutido anteriormente, o histórico de Pixel pode ajudá-lo a encontrar é quando um objeto renderizado está faltando porque todos os seus pixels foram rejeitadas. Esse tipo de erro geralmente ocorre quando você configurado incorretamente uma configuração, como aquele que controla como o teste de profundidade é executado e você normalmente pode encontrar o erro em algum lugar na pilha de chamadas do objeto ausente chamada de desenho.

O Pilha de Chamadas do Evento janela exibe a pilha de chamadas completa de todos os eventos de gráficos na lista de eventos e código-fonte permite até mesmo ir ao seu aplicativo se informações de depuração estiverem disponíveis. Isso é uma ferramenta poderosa para o seguinte erro de onde ele é inicialmente exibido, na GPU, para que ela se originou no código-fonte do aplicativo.

Tabela de objetos

Cada quadro processa seu aplicativo provavelmente é apoiada por centenas ou mesmo milhares de objetos de recurso. Elas podem incluir buffers back e renderizar destinos, texturas, buffers de vértice, buffers de índice e buffers gerais – quase tudo o que se lembra Direct3D é um objeto.

O Tabela de Objeto exibe todos os objetos existentes no momento do evento gráfico selecionado na listam de eventos. Como a maioria dos objetos em um aplicativo típico texturas, a lista de eventos é otimizada para mostrar os detalhes relevantes para imagens em um relance. A coluna de tipo informa que tipo de objeto é em cada linha e coluna formato mais mostra o subtipo ou a versão do objeto. Outros detalhes também são mostrados. Alguns objetos também têm hiperlinks que você pode seguir para exibir o objeto com um visualizador mais especializado, como texturas (você pode exibir a textura como uma imagem), ou os buffers (você pode escolher como o Visualizador de buffer analisa e exibe os bytes do buffer bruto, definindo o formato do buffer).

Análise de quadro

Gráficos do seu aplicativo simplesmente não precisam estar corretas – eles precisam ser muito rápidas. Mesmo em dispositivos menos potentes, como laptops com gráficos integrados ou telefones celulares. E ainda precisam ser muito grande.

O Análise de Quadros ferramenta explora as otimizações de desempenho potencial automaticamente alterando a maneira como o aplicativo usa o Direct3D e fornecendo os resultados de benchmark para comparação. Por exemplo, a análise de quadro pode habilitar o mapeamento de mip em cada textura, que poderia revelar texturas que poderiam se beneficiar do mapeamento de mip, mas atualmente não precisa estar habilitada. Em um hardware que oferece suporte a ele, a análise de quadro também apresenta informações coletadas dos contadores de desempenho da GPU — esse nível de informações pode identificar problemas de desempenho em nível de hardware, como números altos de vagas de busca de textura ou erros de cache.

Mas a análise de quadro quase não será rápida – trata-se de obter o desempenho mais que tempo dando a menor quantidade de qualidade visual. Às vezes, um efeito de caro ótimo aparência em um grande vídeo não faz o mesmo impacto quando exibido na tela pequena de um telefone, onde um efeito mais simples pode ser boa da mesma forma sem acabar com a bateria. Alterações automáticas de benchmarks que fornece análise de gráficos podem ajudá-lo a encontrar o equilíbrio é adequado para seu aplicativo em uma variedade de dispositivos.

Ferramenta de captura de linha de comando
Depurador HLSL

Mostrar:
© 2017 Microsoft