Compartilhar via


Guia warp (Plataforma avançada de rasterização) do Windows

Este artigo descreve o WARP (Windows Advanced Rasterization Platform) e os seguintes aspectos do WARP.

O que é WARP?

WARP é um rasterizador de software de alta velocidade e totalmente compatível. É um componente da tecnologia de gráficos DirectX que foi introduzida pelo runtime do Direct3D 11. O runtime do Direct3D 11 está instalado no Windows 7, Windows Server 2008 R2 e Windows Vista com a atualização [KB971644]. Windows 8, Windows 10, Windows Server 2012 & acima e Windows RT incluem o runtime do Direct3D 11.1, que tem uma versão atualizada do WARP. Windows 10 Fall Creators Update (1709) inclui uma versão do WARP que dá suporte aos runtimes direct3D 11 e Direct3D 12.

Benefícios do WARP

O WARP oferece os seguintes benefícios:

Removendo a necessidade de rasterizadores de software personalizados

O WARP simplifica o desenvolvimento removendo a necessidade de criar um rasterizador de software personalizado e ajustar seu aplicativo para ele em vez de ajustar seu aplicativo para hardware. Ao fornecer um único rasterizador de software de uso geral, você não precisa mais escrever algoritmos de renderização de imagem de várias maneiras para ser executado em hardware ou software com recursos e funcionalidades diferentes. Você ainda pode implementar algoritmos de várias maneiras para obter melhor desempenho ou dimensionamento; no entanto, você não precisa alterar a API ou a arquitetura de renderização usada para implementar esses algoritmos. Em vez disso, você pode se concentrar na criação de um ótimo aplicativo Direct3D 10 ou posterior que terá a mesma aparência e terá um bom desempenho no hardware ou no software.

Habilitando o desempenho máximo do hardware gráfico

Quando um aplicativo é ajustado para ser executado com eficiência no hardware, ele também será executado com eficiência no WARP. O inverso também é verdadeiro; qualquer aplicativo ajustado para ser executado bem no WARP terá um bom desempenho no hardware. Aplicativos que usam o Direct3D 10 e posterior de forma ineficiente podem não ser dimensionados com eficiência em hardwares diferentes. O WARP tem perfis de desempenho semelhantes ao hardware, portanto, ajustar um aplicativo para lotes grandes, minimizar as alterações de estado, remover pontos ou bloqueios de sincronização beneficiará o hardware e o WARP.

Habilitando a renderização quando o hardware Direct3D não está disponível

O WARP permite a renderização rápida em uma variedade de situações em que as implementações de hardware são indesejáveis ou indisponíveis, incluindo:

  • Quando o usuário não tem nenhum hardware compatível com Direct3D
  • Quando um aplicativo é executado como um serviço ou em um ambiente de servidor
  • Quando um aplicativo deseja reservar os recursos de hardware do Direct3D para outros usos
  • Quando um cartão de vídeo não está instalado
  • Quando um driver de vídeo não está disponível ou não está funcionando corretamente
  • Quando um vídeo cartão está sem memória, trava ou requer muitos recursos do sistema para inicializar

Aproveitando recursos existentes para renderização de software

Há uma grande comunidade, muitos livros, sites, SDKs, exemplos, white papers, listas de endereçamento e outros recursos que podem ajudá-lo a aproveitar a renderização de imagem baseada em sombreador Direct3D 10 e posterior. Com o WARP como um fallback de software, você pode usar o conhecimento existente sobre hardware para melhorar o desempenho do aplicativo quando ele é executado com hardware ou software. Além disso, muitas ferramentas excelentes dos elementos gráficos cartão fornecedores e no SDK do DirectX podem ajudá-lo a projetar, criar, desenvolver, depurar e analisar problemas de desempenho de aplicativos gráficos. Essas ferramentas e conhecimentos agora podem beneficiar o desenvolvimento de aplicativos direcionados ao hardware e ao software quando você usa WARP.

Habilitando cenários que não exigem hardware gráfico

Vários algoritmos e aplicativos (algoritmos de processamento de imagens, impressão, comunicação remota, computadores virtuais e outros emuladores, renderização de fonte de alta qualidade, gráficos, grafos e assim por diante) normalmente foram otimizados para a CPU porque não dependem de hardware. Com o WARP, você pode usar uma única arquitetura que executa esses algoritmos e aplicativos e que pode ser executada totalmente no software; no entanto, se a aceleração de hardware estiver disponível, você poderá aproveitar isso.

Concluindo a plataforma de elementos gráficos DirectX

O WARP permite que você acesse todos os recursos gráficos do Direct3D 10 e posterior, mesmo em computadores sem hardware gráfico Direct3D 10 e posterior. Bits de funcionalidade removidos do Direct3D 10 (caps); ou seja, você não precisa mais verificar se os recursos gráficos estão disponíveis no hardware gráfico porque o Direct3D 10 e posterior garante essa disponibilidade. Agora você pode usar todos os recursos de uma ampla gama de placas de vídeo sabendo que seu aplicativo se comportará e terá a mesma aparência em todos os lugares. Você pode dimensionar o desempenho desses aplicativos simplesmente desabilitando recursos gráficos caros em placas de vídeo de baixa extremidade ou renderizando para destinos menores.

Recursos e requisitos do WARP

O WARP dá suporte total a todos os recursos do Direct3D 10 e 10.1. Por exemplo, WARP dá suporte aos seguintes recursos mais importantes:

  • Todos os requisitos de precisão da especificação direct3D 10 e 10.1
  • Direct3D 11 quando usado com os níveis de recursos 9_1, 9_2, 9_3, 10_0 e 10_1 (para obter mais informações sobre níveis de recursos, consulte D3D_FEATURE_LEVEL)
  • Todos os formatos de textura opcionais, como destinos de renderização de várias amostras e amostragem de superfícies flutuantes
  • Suavização, renderização de alta qualidade até 8x suavização multisample (MSAA)
  • Filtragem anisotrópica
  • Aplicativos de 32 e 64 bits e aplicativos de 32 bits com reconhecimento de endereço grande de 32 bits

Quando você instala o Platform Update para Windows 7 no Windows 7 SP1 ou Windows Server 2008 R2 SP1, esse sistema operacional inclui o runtime do Direct3D 11.1 e uma versão do WARP que dá suporte ao Direct3D 11.x quando usado com os níveis de recursos 9_1, 9_2, 9_3, 10_0, 10_1 e 11_0.

Windows 8, Windows 10, Windows Server 2012 & acima e Windows RT incluem o runtime do Direct3D 11.1 e uma nova versão do WARP. Esta versão dá suporte ao Direct3D 11.x quando usada com os níveis de recursos 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 e 11_1.

Windows 10 Fall Creators Update (1709) inclui uma nova versão do WARP que dá suporte aos níveis de recursos 12_0 e 12_1 do Direct3D 12_0.

Os requisitos mínimos de computador para WARP são os mesmos do Windows Vista, especificamente:

  • CPU mínima de 800 MHz
  • MMX, SSE ou SSE2 não são necessários
  • Mínimo de 512 MB de RAM

Como usar WARP

Para o Direct3D 12, criar um dispositivo WARP requer primeiro identificar o adaptador WARP. Para facilitar isso, o DXGI 1.4 fornece o método IDXGIFactory4::EnumWarpAdapter . O adaptador WARP pode ser fornecido a D3D12CreateDevice para criar um dispositivo WARP.

Os componentes Direct3D 10, 10.1 e 11 podem usar um tipo de driver adicional que você pode especificar ao criar o dispositivo (por exemplo, quando você chama a função D3D11CreateDevice ). Esse tipo de driver é D3D10_DRIVER_TYPE_WARP ou D3D_DRIVER_TYPE_WARP. Quando você especifica esse tipo de driver, o runtime cria um dispositivo WARP e não inicializa um dispositivo de hardware.

Como o WARP usa a mesma interface de software para Direct3D que o rasterizador de referência, qualquer aplicativo Direct3D que possa dar suporte à execução com o rasterizador de referência pode ser testado usando WARP. Para usar WARP, renomeie D3d10warp.dll para D3d10ref.dll e coloque-o na mesma pasta que o exemplo ou aplicativo. Em seguida, ao alternar para ref, você verá renderização WARP.

Se você renomear WARP para D3d10ref.dll e colocá-lo em C:\Arquivos de Programas (x86)\Microsoft DirectX SDK (junho de 2010)\Samples\C++\Direct3D\Bin\x86, você poderá executar todos os exemplos do DirectX no WARP, clicando no botão "Alternar Ref" no exemplo ou executando o exemplo com /ref especificado na linha de comando.

Todos os aplicativos que podem usar o Direct3D podem usar WARP. Isso inclui os seguintes tipos de aplicativos:

Jogos Casuais

Os jogos normalmente têm requisitos de renderização simples. No entanto, eles também exigem o uso de efeitos visuais impressionantes que podem precisar de aceleração de hardware. A maioria dos títulos de jogos mais vendidos para Windows são simulações ou jogos casuais, nenhum dos quais requer gráficos de alto desempenho. No entanto, ambos os estilos de jogos se beneficiam muito de elementos gráficos modernos baseados em sombreador e da capacidade de dimensionar em hardware.

Aplicativos não-jogos existentes

Uma grande quantidade de aplicativos gráficos exige um número mínimo de caminhos de código em sua camada de renderização. O WARP permite que esses aplicativos implementem um único caminho de código Direct3D que pode direcionar um grande número de configurações de computador.

Jogos avançados de renderização

Os desenvolvedores de jogos podem querer isolar erros de renderização específicos do driver ou cartão elementos gráficos. Portanto, todos os jogos, mesmo que sejam extremamente exigentes graficamente, podem se beneficiar de poder renderizar seu conteúdo usando WARP. Você pode usar WARP para validar se quaisquer artefatos visuais encontrados são erros de renderização ou problemas com hardware ou drivers.

Outros aplicativos

Os aplicativos de destino para WARP também incluem aqueles que podem não usar o Direct3D 10 ou o Direct3D 10.1 no momento. Esses aplicativos de destino incluem aplicativos que sempre devem funcionar em todos os computadores, aplicativos de processamento de imagens que não gravam versões de CPU e GPU de algoritmos de processamento de imagem, algoritmos de processamento de imagem em que a velocidade ou o uso da GPU não é crítico, como impressão, e emuladores e ambientes virtuais que exibem gráficos 3D avançados.

Arquitetura e desempenho WARP

WARP é baseado na base de código do rasterizador de referência. Portanto, WARP usa a mesma interface de software para Direct3D 10 e posterior e DXGI. WARP está incluído no Windows 7 no D3d10warp.dll, localizado em pastas de sistemas Windows. Duas versões do WARP são instaladas em computadores de 64 bits, uma versão x86 e x64. A versão x64 pode ser executada mais rapidamente em determinadas circunstâncias porque o gerador de código contido no WARP pode aproveitar os registros adicionais que estão disponíveis quando os usuários executam aplicativos de 64 bits.

WARP contém os dois seguintes compiladores em tempo real de alta velocidade:

  • O compilador de linguagem intermediária de alto nível que converte o código de byte HLSL e o estado de renderização atual em um fluxo otimizado de comandos de vetor para os estágios de sombreador de geometria (GS), VS (sombreador de vértice) e sombreador de pixel (PS) do pipeline.
  • O gerador de código just-in-time de alto desempenho que pode assumir esses comandos e gerar código de assembly SSE2, SSE4.1, x86, x64, arm e arm64 otimizados.

O WARP usa o pool de threads e o gerenciamento complexo de tarefas e o acompanhamento de dependência que foi introduzido no Windows Vista para permitir que todas as partes do pipeline de renderização sejam distribuídas com eficiência entre os núcleos de CPU disponíveis.

O WARP usa a renderização adiada. Ou seja, o WARP pode renderizar comandos em lote para que a rasterização ocorra somente quando dados suficientes estiverem disponíveis para usar todos os recursos da CPU com eficiência. O trabalho no thread do aplicativo main é minimizado para permitir que o aplicativo envie comandos o mais rápido possível. Se um aplicativo também tiver vários threads e usar o pool de threads, o trabalho será distribuído uniformemente entre WARP e o aplicativo.

O gerador de código WARP foi ajustado para fazer o melhor uso da arquitetura moderna da CPU. O WARP é executado em todos os computadores que podem executar o Windows Vista e sistemas operacionais posteriores, mesmo que o computador não dê suporte à SSE. No entanto, o WARP foi otimizado para computadores que dão suporte ao SSE2. Ele também contém otimizações para arquiteturas específicas de processadores AMD e Intel, bem como suporte para as extensões SSE 4.1.

O WARP não requer hardware gráfico para executar. Ele pode ser executado mesmo em situações em que o hardware não está disponível ou não pode ser inicializado.

Aplicativos e exemplos que foram projetados e criados para serem executados no Direct3D 10 e em hardware posterior sem qualquer conhecimento do WARP provavelmente funcionarão bem usando WARP. No entanto, recomendamos que você reduza as configurações de qualidade e a resolução o máximo possível para obter taxas de quadro utilizáveis. Você pode usar WARP para desenvolver e ajustar aplicativos que são executados bem em hardware e software.

Como o WARP usa vários núcleos de CPU para execução paralela, ele tem o melhor desempenho em CPUs de vários núcleos modernos. O WARP também é executado significativamente mais rapidamente em computadores com extensões SSE4.1 instaladas. A Microsoft realizou testes significativos e ajuste de desempenho em computadores com oito ou mais núcleos e SSE4.1 porque esses computadores high-end se tornarão mais comuns durante o tempo de vida dos sistemas operacionais Windows 7 e posteriores.

Quando WARP está em execução na CPU, ele é limitado em comparação com um gráfico cartão de várias maneiras. A velocidade do barramento frontal de uma CPU normalmente é de cerca de 10 GB/s. Por outro lado, um gráfico cartão geralmente tem memória dedicada que usa de 20 a 100 GB/s ou mais de largura de banda gráfica. O hardware gráfico também tem unidades de função fixa que podem executar tarefas complexas e caras, como filtragem de textura, descompactação de formato ou conversões, de forma assíncrona, com pouca sobrecarga ou custo de energia. Executar essas operações em uma CPU típica é caro em termos de consumo de energia e ciclos de desempenho.

Os números de desempenho típicos de um computador Intel Penryn baseado em 3.0GHz Quad Core mostram que o WARP pode, em alguns casos, superar GPUs gráficas integradas de baixo nível do Direct3D 10 e posteriores em vários parâmetros de comparação. O hardware gráfico discreto low-end normalmente é 4 a 5 vezes mais rápido que o WARP na execução desses parâmetros de comparação. Essas GPUs integradas ou discretas de baixo nível têm uso mínimo de recursos de CPU. As placas gráficas de médio ou de alto nível são significativamente mais rápidas do que o WARP para muitos aplicativos, especialmente quando um aplicativo pode aproveitar o paralelismo e a largura de banda de memória que essas placas gráficas fornecem.

WARP não é uma substituição para hardware gráfico, especialmente porque o desempenho razoável do Direct3D 10 de baixo desempenho e hardware discreto posterior agora é barato. O objetivo do WARP é permitir que os aplicativos direcionem hardware de nível compatível com Direct3D sem ter caminhos de código ou requisitos de teste significativamente diferentes, sejam eles executados em hardware ou em software.

As duas tabelas a seguir mostram dados de exemplo WARP com várias CPUs e placas gráficas.

A primeira tabela mostra dados de exemplo WARP com o Direct3D 10 Crysis em execução em 800x600 com todas as configurações de qualidade em seus níveis mais baixos:

CPU Hora Av FPS Fps mínimos Quadro Mínimo Fps máximo Quadro Máximo
Core i7 8 Core @ 3.0GHz 271.57 7.36 3,46 1966 15.01 995
Penryn 4 Core @ 3.0GHz 351.35 5.69 2.49 1967 10.95 980
Penryn 2 Core @ 3.0GHz 573.98 3.48 1,35 1964 6.61 988
Core 2 Duo @ 2.6GHz 707.19 2.83 0.81 1959 5.18 982
Core 2 Duo @ 2.4GHz 763.25 2.62 0.76 1964 4.70 984
Core 2 Duo @ 2.1GHz 908.87 2,20 0.64 1965 3.72 986
Xeon 8 Core @ 2.0GHz 424.04 4.72 1.84 1967 9,56 988
AMD FX74 4 Core @ 3.0GHz 583.12 3.43 1,41 1967 5.78 986
Phenom 9550 4 Core @ 2.2GHz 664.69 3,01 0.53 1959 5.46 987

A segunda tabela mostra dados de exemplo executando o mesmo teste em uma variedade de placas gráficas:

Placa Gráfica Hora Av FPS Fps mínimos Quadro Mínimo Fps máximo Quadro Máximo
NVIDIA 8800 GTS 23.58 84.80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21,22 1962 51.82 1021
ATI 3400 53.79 37.18 22,97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Intel DX10 Integrado 386.94 5.17 1.74 1974 16.22 995

Conformidade COM WARP

O WARP passa em todos os testes de conformidade padrão do WHQL (Windows Hardware Quality Labs) para validar dispositivos de hardware Direct3D.

O WARP foi testado em um pacote de aplicativos e parâmetros de comparação direct3D 10 e Direct3D 10.1 e em exemplos de SDK do DirectX, NVIDIA e AMD.

O WARP usou a ferramenta de depuração e análise do PIX para Windows em seus testes; A Microsoft tem uma grande biblioteca de capturas de quadro único de aplicativos que são usados para comparar entre hardware e WARP. A maioria das imagens parece quase idêntica entre hardware e WARP; em que pequenas diferenças ocorrem às vezes, elas são encontradas dentro das tolerâncias definidas pela especificação direct3D 10.