Análise de quadro de gráficos

Você pode usar a Análise de Quadro de Gráficos no Diagnóstico de Gráficos Visual Studio para analisar e otimizar o desempenho de renderização de seu jogo ou aplicativo do Direct3D.

Dica

A partir da atualização 3 do Visual Studio 2013, as janelas da ferramenta Diagnóstico de Gráficos são hospedadas em uma cópia independente do shell do Visual Studio.Esse shell personalizado, chamado de análise de gráficos elimina opções e menus desnecessários, caso contrário, a Análise de Quadros e o fluxo de trabalho são os mesmos de antes.Para obter mais informações sobre essa alteração, consulte Visão geral do diagnóstico de gráficos.

Análise de quadro

A análise de quadro usa as mesmas informações capturadas em um arquivo de log de elementos gráficos para fins de diagnóstico, mas as utiliza para resumir o desempenho de renderização. As informações de desempenho não são registradas no log durante a captura; ao invés disso, as informações de desempenho são geradas posteriormente, durante a análise de quadro, programando eventos e coletando estatísticas conforme o quadro é reproduzido. Essa abordagem possui diversas vantagens em relação a registrar informações de desempenho durante a captura:

  • A análise de quadro pode tirar uma média dos resultados de diversas reproduções do mesmo quadro para garantir que o resumo do desempenho seja estatisticamente sólido.

  • A análise de quadro pode gerar informações de desempenho para configurações de hardware e dispositivos diferentes daqueles em que as informações foram capturadas.

  • A análise de quadro pode gerar novos resumos de desempenho de informações capturadas anteriormente, por exemplo, quando os drivers de GPU são otimizados ou expõem recursos de depuração adicionais.

Além dessas vantagens, a análise de quadros também pode alterar o modo como o quadro é renderizado durante a reprodução para que ela possa apresentar informações sobre como essas mudanças podem afetar o desempenho de renderização de um aplicativo. Você pode usar essas informações para se decidir entre possíveis estratégias de otimização sem ter que implementar todas elas e, depois, capturar e comparar todos os resultados você mesmo.

Embora a análise de quadro seja primordialmente pensada para ajudá-lo a alcançar um desempenho de renderização mais rápido, ela também pode ajudá-lo a atingir uma qualidade visual aprimorada para um determinado destino de desempenho ou reduzir o consumo de energia de GPU.

Para ver uma demonstração do que a Análise de Quadros pode fazer pelo seu aplicativo, assista ao vídeo Análise de Quadros de Gráficos do Visual Studio no Channel 9.

Usando a análise de quadro

Antes de usar a Análise de Quadro, você deve capturar informações de gráficos do aplicativo enquanto ele é executado, assim como faria ao usar o Diagnóstico de Gráficos. Em seguida, na janela do documento de log de gráficos (.vsglog), escolha a guia Análise de Quadro.

Selecione a guia de análise de quadro.

Os resultados são exibidos após a conclusão da análise. A parte superior da guia de análise de quadros exibe a linha do tempo e a tabela de resumo. A parte inferior exibe as tabelas de detalhes. Se erros ou avisos forem gerados durante a reprodução, eles são resumidos acima da linha do tempo; a partir daí, é possível seguir os links para saber mais sobre os erros e os avisos.

Interpretando os resultados

Ao interpretar os resultados de cada variante, você pode inferir informações úteis sobre o desempenho de renderização e o comportamento do aplicativo. Para obter mais informações sobre as variantes de renderização, consulte Variants mais tarde neste artigo.

Alguns resultados indicam diretamente como a variante afeta o desempenho de renderização:

  • Se a variante Filtragem de Textura Bilinear tiver mostrado ganhos de desempenho, usar a filtragem de textura bilinear no aplicativo mostrará ganhos de desempenho semelhantes.

  • Se a variante do Visor 1 x 1 mostrar ganhos de desempenho, reduzir o tamanho dos destinos de renderização no aplicativo aprimorará o desempenho de renderização.

  • Se a variante Compactação de Textura BC tiver mostrado ganhos de desempenho, usar a compactação de textura BC no aplicativo mostrará ganhos de desempenho semelhantes.

  • Se a variante 2xMSAA tiver quase o mesmo desempenho que a variante 0xMSAA, você poderá habilitar 2xMSAA no aplicativo para aprimorar a qualidade de renderização sem prejudicar o desempenho.

Outros resultados podem sugerir implicações mais profundas e sutis no desempenho do aplicativo:

  • Se a variante do Visor 1 x 1 mostrar ganhos de desempenho muito grandes, seu aplicativo provavelmente está consumindo mais taxa de enchimento do que a disponível. Se essa variante não mostrar ganhos de desempenho, o aplicativo provavelmente está processando muitas vértices.

  • Se a variante de Formato de Destino de Renderização de 16 bpp mostrar ganhos de desempenho significativos, seu aplicativo provavelmente está consumindo muita largura de banda de memória.

  • Se a variante de Dimensões de Textura de Metade/Quarto mostrar ganhos de desempenho significativos, suas texturas provavelmente ocupam muita memória, consomem muita largura de banda ou usam o cache de textura de maneira ineficiente. Se essa variante não mostrar uma alteração no desempenho, provavelmente, você poderá usar texturas maiores e mais detalhadas sem prejudicar o desempenho.

Quando contadores de hardware estão disponíveis, é possível usá-los para coletar informações bastante detalhadas sobre o motivo pelo qual o desempenho de renderização do aplicativo pode estar sendo impactado. Todos os dispositivos em nível de recurso 9.2 e superior suportam a consultas de oclusão de profundidade (contador de pixels obstruídos) e carimbos de data e hora. Outros contadores de hardware podem estar disponíveis, dependendo se o fabricante de GPU implementou contadores de hardware e os expôs no driver. Você pode usar esses contadores para confirmar a causa precisa dos resultados mostrados na tabela de resumo; por exemplo, é possível determinar se o desenho excessivo é um fator relevante, examinando a porcentagem de pixels que foram obstruídos pelo teste de profundidade.

Linha do tempo e tabela de resumo

Por padrão, a Linha do Tempo e a Tabela de Resumo são exibidas e as outras seções são recolhidas.

Linha do tempo

A linha do tempo mostra uma visão geral dos horários de chamadas de desenho em relação umas às outras. Como barras maiores correspondem a horários de desenho maiores, você pode usá-las para localizar rapidamente as chamadas de desenho mais custosas no quadro. Quando o quadro capturado contiver um número muito grande de chamadas de desenho, diversas chamadas de desenho são combinadas em uma única barra, cujo comprimento é a soma dessas chamadas de desenho.

A linha do tempo mostra os custos de chamada de desenho.

Você pode deixar o ponteiro sobre uma barra para ver a qual evento de chamada de desenho a barra corresponde. Escolher a barra faz com que a lista de eventos seja sincronizada com esse evento.

Tabela

A tabela de números abaixo da linha do tempo mostra o desempenho relativo de cada variante de renderização para cada chamada de desenho em relação à renderização padrão do seu aplicativo. Cada coluna exibe uma variante de renderização diferente e cada linha representa uma chamada de desenho diferente identificada na coluna mais à esquerda; a partir daí, é possível seguir um link até o evento na janela Lista de Eventos de Gráficos.

Tabela de resumo mostra varients diferentes.

A segunda coluna mais à esquerda na Tabela de Resumo exibe o horário de renderização de linha de base de seu aplicativo, ou seja, a quantidade de tempo necessária para que a renderização padrão do seu aplicativo conclua a chamada de desenho. As colunas restantes mostram o desempenho relativo de cada variante de renderização como uma porcentagem da linha de base de forma que facilite ver se o desempenho foi aprimorado. Porcentagens superiores a 100% levam mais tempo do que a linha de base, ou seja, o desempenho foi reduzido; porcentagens inferiores a 100% levam menos tempo, indicando que o desempenho foi aumentado.

Os valores do horário absoluto da linha de base e o horário relativo das variantes de renderização são, na verdade, médias de várias execuções; 5 por padrão. Essa média ajuda a assegurar que os dados de horário são confiáveis e consistentes. Você pode deixar o ponteiro em cada célula da tabela para examinar os valores de horário mínimo, máximo, médio e mediano que foram observados quando os resultados dessa chamada de desenho e variante de renderização foram gerados. O horário de linha de base também é exibido.

Chamadas de desenho "ativas"

Para chamar atenção para chamadas de desenho que consomem uma proporção maior do tempo de renderização geral ou que podem ser incomumente mais lentas por motivos que podem ser evitados, a linha que contém essas chamadas de desenho "ativas" é exibida em vermelho quando seu horário de linha de base tem mais de um desvio padrão em relação ao horário de linha de base médio de todas as chamadas de desenho no quadro.

Essa chamada DrawIndexed tem varients altos e baixos.

Significância estatística

Para chamar atenção para as variações de renderização que possuem maior relevância, a Análise de Quadro determina a significância estatística de cada variante de renderização e exibe aquelas de são significativas em negrito. Aquelas que aprimoram o desempenho são exibidas em verde, e as que reduzem o desempenho, em vermelho. Os resultados que não são estatisticamente significativos são exibidos em fonte normal.

A estatística relevence da variante de chamada de desenho

Para determinar a relevância estatística, a Análise de Quadro usa o Teste T de Student.

Tabela de detalhes

Abaixo da tabelo de Resumo está a tabela de Detalhes, que fica recolhida por padrão. O conteúdo da tabela de Detalhes depende da plataforma de hardware do computador de reprodução. Para obter informações sobre as plataformas de hardware com suporte, consulte Hardware Support.

Plataformas que não oferecem suporte a contadores de hardware

A maioria das plataformas não oferece suporte completo a contadores de GPU de hardware; isso inclui todas as GPUs oferecidas atualmente pela Intel, AMD e nVidia. Quando não há contadores de hardware para coleta, somente uma tabela de Detalhes é exibida, e ela contém o horário absoluto médio de todas as variantes.

A tabela de detalhes e alguns varients de reprodução.

Plataformas que oferecem suporte a contadores de hardware

No caso de plataformas que oferecem suporte a contadores de GPU de hardware, por exemplo, SOC da nVidia T40 e todos os SOCs da Qualcomm, diversas tabelas de Detalhes são exibidas, uma para cada variante. Cada contador de hardware disponível é coletado para cada variante de renderização e exibido em sua própria tabela de Detalhes.

Contadores de hardware são exibidos quando tem suporte.

As informações do contador de hardware oferecem uma visão bastante detalhada de comportamentos específicos da plataforma de hardware para cada chamada de desempenho, o que pode ajudar a identificar a causa de afunilamentos de desempenho de maneira bastante precisa.

Dica

Diferentes plataformas de hardware oferecem suporte a diferentes contadores; não há um padrão.Os contadores e aquilo que eles representam são determinados exclusivamente para cada fabricante de GPU.

Regiões e eventos do marcador

A Análise de Quadro oferece suporte a marcadores de evento e grupos de evento definidos pelo usuário. Eles são exibidos na tabela de Resumo nas tabelas de Detalhes.

Você pode usar as APIs ID3DUserDefinedAnnotation ou a família legada de APIs D3DPERF_ para criar marcadores e grupos. Ao usar a família de APIs D3DPERF_, você pode atribuir uma cor a cada marcador e grupo exibidos pela Análise de Quadro como uma faixa colorida nas linhas que contêm os marcadores de início/término do marcador de evento ou do grupo de evento e seus conteúdos. Esse recurso pode ajudar a identificar rapidamente eventos ou grupos de eventos de renderização importantes.

Avisos e erros

Ocasionalmente, a Análise de Quadros é concluída com avisos ou erros, que são resumidos acima da Linha do Tempo e detalhados na parte inferior da guia Análise de Quadros.

Em geral, avisos e erros são apenas para fins informativos e não exigem intervenção.

Avisos geralmente indicam que o suporte ao hardware está ausente, mas que há uma solução alternativa, que contadores de hardware não podem ser coletados ou que determinados dados de desempenho podem não ser confiáveis, por exemplo, quando uma solução alternativa os afeta de maneira adversa.

Erros geralmente indicam que a implementação da análise de quadros possui bugs, que um driver possui bugs, que o suporte de hardware está ausente e não há uma solução alternativa ou que o aplicativo está tentando algo não suportado pela reprodução.

Novas tentativas

Se a GPU passar por uma transição de estado de energia durante a análise de quadros, a análise deve ser executada novamente, pois a velocidade de clock da GPU foi alterada o que, portanto, invalidou os resultados relativos do horário.

A Análise de Quadro limita o número de novas tentativas a 10. Se sua plataforma tiver um gerenciamento de energia ou clock-gating agressivo, isso pode fazer com que a Análise de Quadro falhe e relate um erro por ter excedido o limite de novas tentativas. Se a plataforma permitir, você pode atenuar esse problema redefinindo o gerenciamento de energia e a aceleração da velocidade de clock de sua plataforma para que sejam menos agressivos.

Suporte a hardware

Consultas de carimbos de data/hora e oclusão

Carimbos de data/hora têm suporte em todas as plataformas compatíveis com Análise de Quadro. Consultas de oclusão de profundidade, necessárias para o contador de Pixels Obstruídos, são suportadas em plataformas com nível de recurso de suporte 9.2 ou superior.

Dica

Embora carimbos de data e hora sejam suportados em todas as plataformas que dão suporte à Análise de Quadros, a precisão e a consistência dos carimbos varia de uma plataforma para outra.

Contadores de GPU

O suporte a contadores de hardware de GPU dependem do hardware.

Como nenhuma GPU de computador atualmente oferecida pela Intel, AMD ou nVidia tem suporte confiável a contadores de hardware de GPU, a Análise de Quadro não coleta contadores delas. No entanto, a Análise de Quadro coleta contadores de hardware dessas GPUs, com suporte confiável a elas:

  • SOCs da Qualcomm (qualquer um com suporte a Windows Phone)

  • nVidia T40 (Tegra4).

Nenhuma outra plataforma com suporte à Análise de Quadro coleta contadores de hardware de GPU.

Dica

Como os contadores de hardware de GPU são recursos de hardware, pode levar vários passos para coletar o conjunto completo de contadores de hardware para cada variante de renderização.Como resultado, a ordem na qual os contadores de GPU são coletados não é especificada.

Windows Phone

Carimbos de data/hora, consultas de oclusão e contadores de hardware de GPU só têm suporte em aparelhos Windows Phone que tenham sido enviados originalmente com o Windows Phone 8.1. A Análise de Quadro requer esses recursos para reproduzir o arquivo de log de elementos gráficos. Aparelhos Windows Phone que tenham sido originalmente enviados com Windows Phone 8 não oferecem suporte à Análise de Quadro, mesmo para aparelhos que tenham sido atualizados para Windows Phone 8.1.

Cenários sem suporte

Determinadas maneiras de usar a análise de quadro não possui suporte ou simplesmente não valem a pena.

WARP

A análise de quadro deve ser usada para analisar e aprimorar o desempenho de renderização em hardwares reais. Executar a análises de quadro em dispositivos WARP não é proibido, o emulador do Windows Phone pode ser executado em WARP, mas essa tarefa geralmente não vale a pena, pois o WARP em execução em uma CPU de alto nível é mais lento até mesmo do que as GPUs modernas com menor capacidade, e porque o desempenho de WARP pode variar bastante dependendo da CPU específica em que ele está sendo executado.

Reprodução de capturas de alto nível de recursos em dispositivos de baixo nível

No Diagnóstico de Gráficos, ao reproduzir um arquivo de log de elementos gráficos que utiliza um nível de recursos mais alto do que o compatível com o computador de reprodução, ele recorre automaticamente ao WARP. Na Análise de Quadro, ele não recorre explicitamente ao WARP e gera um erro; o WARP é útil para examinar a precisão do aplicativo Direct3D, mas não para examinar seu desempenho.

Dica

Embora seja importante manter os problemas de nível de recurso em mente, você pode capturar e reproduzir arquivos de log de elementos gráficos em diferentes configurações de hardware e dispositivos.Por exemplo, você pode capturar informações de gráficos em um Windows Phone e reproduzi-las em um computador desktop, ou vice-versa.Em ambos os casos, o log de elementos gráficos pode ser reproduzido considerando que o arquivo de log não contenha APIs nem utilize níveis de recurso sem suporte no computador de reprodução.

Direct3D 10 e versão anterior

A Análise de Quadro só tem suporte para API do Direct3D 11. Se seu aplicativo chamar a API do Direct3D 10, a Análise de Quadro não a reconhecerá ou analisará, embora ela seja reconhecida e usada pelo Diagnóstico de Gráficos. Se seu aplicativo usar as APIs do Direct3D11 e Direct3D 10, apenas as chamadas do Direct3D 11 serão analisadas.

Dica

Isso se aplica somente às chamadas à API do Direct3D que você estiver utilizando, e não aos níveis de recurso.Contanto que esteja utilizando a API do Direct3D 11, do Direct3D 11.1 ou do Direct3D 11.2, você poderá usar o nível de recurso desejado e a Análise de Quadro funcionará.

Variantes

Cada alteração que a Análise de Quadro realiza na maneira em que um quadro é renderizado durante a reprodução é conhecida como uma variante. As variantes examinadas pela Análise de Quadro correspondem a alterações comuns e relativamente fáceis que podem ser feitas para aprimorar o desempenho de renderização ou a qualidade visual do aplicativo; por exemplo, reduzir o tamanho das texturas, usar a compactação de texturas ou habilitar diferentes tipos de suavização. As variantes substituem o contexto de renderização e os parâmetros comuns do seu aplicativo. Segue um resumo:

Variante

Descrição

Tamanho do Visor 1 x 1

Reduz as dimensões do visor em todos os destinos de renderização para 1 x 1 pixels.

Para obter mais informações, consulte Variaç;ão de tamanho do visor 1x1

MSAA de 0x

Desativa a MSAA (suavização de múltipla amostra) em todos os destinos de renderização.

Para obter mais informações, consulte Variantes MSAA 0x/2x/4x

MSAA de 2x

Ativa a MSAA de 2x em todos os destinos de renderização.

Para obter mais informações, consulte Variantes MSAA 0x/2x/4x

MSAA de 4x

Ativa a MSAA de 4x em todos os destinos de renderização.

Para obter mais informações, consulte Variantes MSAA 0x/2x/4x

Filtragem de textura de ponto

Define o modo de filtragem como DXD11_FILTER_MIN_MAG_MIP_POINT (filtragem de textura de ponto) para todas as amostras de textura adequadas.

Para obter mais informações, consulte Variantes de filtragem de textura de ponto, bilinear, trilinear e anisotrópico.

Filtragem de textura bilinear

Define o modo de filtragem como DXD11_FILTER_MIN_MAG_LINEAR_MIP_POINT (filtragem de textura bilinear) para todas as amostras de textura adequadas.

Para obter mais informações, consulte Variantes de filtragem de textura de ponto, bilinear, trilinear e anisotrópico.

Filtragem de textura trilinear

Define o modo de filtragem como DXD11_FILTER_MIN_MAG_MIP_LINEAR (filtragem de textura trilinear) para todas as amostras de textura adequadas.

Para obter mais informações, consulte Variantes de filtragem de textura de ponto, bilinear, trilinear e anisotrópico.

Filtragem de textura anisotrópica

Define o modo de filtragem como DXD11_FILTER_ANISOTROPIC e MaxAnisotropy para 16 (filtragem de textura anisotrópica de 16x) para todas as amostras de textura adequadas.

Para obter mais informações, consulte Variantes de filtragem de textura de ponto, bilinear, trilinear e anisotrópico.

Formato de destino de renderização de 16 bpp

Define o formato de pixels como DXGI_FORMAT_B5G6R5_UNORM (16 bpp, formato 565) para todos os destinos de renderização e buffers de fundo.

Para obter mais informações, consulte Variante de formato de destino de renderizaç;ão 16bpp

Geração de mapas mip

Ativa mapas mip em todas as texturas que não são destinos de renderização.

Para obter mais informações, consulte Variante de geração de Mip-map.

Dimensões de textura pela metade

Reduz as dimensões de textura em todas as texturas que não são destinos de renderização pela metade de seu tamanho original em cada dimensão. Por exemplo, uma textura de 256 x 128 é reduzida para 128 x 64 texels.

Para obter mais informações, consulte Variante de metade/um quarto nas dimensões de textura.

Dimensões de textura de um quarto

Reduz as dimensões de textura em todas as texturas que não são destinos de renderização a um quarto de seu tamanho original em cada dimensão. Por exemplo, uma textura de 256 x 128 é reduzida para 64 x 32 texels.

Para obter mais informações, consulte Variante de metade/um quarto nas dimensões de textura.

Compactação de textura BC

Habilita a compactação de bloco em todas as texturas que possuem uma variante de formato de pixel de B8G8R8X8, B8G8R8A8 ou R8G8B8A8. As variantes de formato B8G8R8X8 são compactados com BC1; as variantes de formato B8G8R8A8 e R8G8B8A8 são compactadas com BC3.

Para obter mais informações, consulte Variante de compressão de textura BC.

O resultado para a maioria das variantes é descrito como: "Reduzir o tamanho da textura pela metade é 25% mais rápido" ou "Ativar MSAA de 2x é apenas 2% mais lento". Outras variantes podem exigir mais interpretação; por exemplo, se a variante que alterar as dimensões do visor para 1 x 1 mostrar um ganho de desempenho grande, isso pode indicar que a renderização é afunilada por uma taxa de enchimento baixa; alternativamente, se não houver uma alteração significativa no desempenho, isso pode indicar que a renderização é afunilada pelo processamento de vértice.