Partilhar via


Guia da Plataforma de Rasterização Avançada do Windows (WARP)

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

O que é WARP?

WARP é um rasterizador de software de alta velocidade e totalmente conforme. É um componente da tecnologia gráfica DirectX que foi introduzida pelo tempo de execução do Direct3D 11. O tempo de execução do Direct3D 11 é instalado no Windows 7, Windows Server 2008 R2 e Windows Vista com a atualização [KB971644]. O Windows 8, o Windows 10, o Windows Server 2012 & acima e o Windows RT incluem o tempo de execução do Direct3D 11.1, que tem uma versão atualizada do WARP. O Windows 10 Fall Creators Update (1709) inclui uma versão do WARP que suporta tempos de execução do 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, eliminando 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 executar em hardware ou software com recursos e capacidades diferentes. Você ainda pode implementar algoritmos de várias maneiras para obter melhor desempenho ou dimensionamento; no entanto, não é necessário 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 um bom desempenho em hardware ou software.

Ativando o máximo desempenho de hardware gráfico

Quando um aplicativo é ajustado para ser executado de forma eficiente no hardware, ele também será executado de forma eficiente no WARP. O inverso também é verdadeiro; qualquer aplicativo que esteja ajustado para funcionar bem no WARP terá um bom desempenho no hardware. Os aplicativos que usam o Direct3D 10 e posterior de forma ineficiente podem não ser dimensionados de forma eficiente em hardware diferente. O WARP tem perfis de desempenho semelhantes ao hardware, portanto, ajustar um aplicativo para grandes lotes, minimizar alterações de estado, remover pontos de sincronização ou bloqueios beneficiará tanto o hardware quanto o WARP.

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

O WARP permite 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 uma placa de vídeo não está instalada
  • Quando um driver de vídeo não está disponível ou não está funcionando corretamente
  • Quando uma placa de vídeo está sem memória, trava ou levaria muitos recursos do sistema para inicializar

Aproveitando os recursos existentes para renderização de software

Há uma enorme comunidade, muitos livros, sites, SDKs, exemplos, white papers, listas de discussão e outros recursos que podem ajudá-lo a tirar proveito da renderização de imagem baseada em sombreador do 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 seu aplicativo quando ele é executado com hardware ou software. Além disso, muitas ferramentas excelentes dos fornecedores de placas gráficas 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 conhecimento agora podem beneficiar o desenvolvimento de aplicativos voltados para hardware e software quando você usa o WARP.

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

Vários algoritmos e aplicativos (algoritmos de processamento de imagem, impressão, comunicação remota, Virtual PCs e outros emuladores, renderização de fontes de alta qualidade, gráficos, gráficos 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 em software; No entanto, se a aceleração de hardware estiver disponível, você pode aproveitá-la.

Concluindo a plataforma gráfica DirectX

O WARP permite que você acesse todos os recursos gráficos do Direct3D 10 e posteriores, mesmo em computadores sem Direct3D 10 e hardware gráfico posterior. Direct3D 10 bits de capacidade removidos (tampas); 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 parecerá o mesmo em todos os lugares. Você pode dimensionar o desempenho desses aplicativos simplesmente desativando recursos gráficos caros em placas de vídeo low-end ou renderizando para destinos menores.

Capacidades e requisitos do WARP

O WARP suporta totalmente todos os recursos do Direct3D 10 e 10.1. Por exemplo, o WARP suporta os 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 os níveis de recursos, consulte D3D_FEATURE_LEVEL)
  • Todos os formatos de textura opcionais, como alvos de renderização de várias amostras e amostragem de superfícies flutuantes
  • Antialiased, renderização de alta qualidade até 8x multisample antialiasing (MSAA)
  • Filtragem anisotrópica
  • Aplicativos de 32 bits e 64 bits e aplicativos de 32 bits com reconhecimento de endereço grande

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

O Windows 8, o Windows 10, o Windows Server 2012 & acima e o Windows RT incluem o tempo de execução do Direct3D 11.1 e uma nova versão do WARP. Esta versão suporta Direct3D 11.x quando usado com níveis de recurso 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 e 11_1.

O Windows 10 Fall Creators Update (1709) inclui uma nova versão do WARP que suporta Direct3D 12 níveis de funcionalidade 12_0 e 12_1.

Os requisitos mínimos do computador para WARP são os mesmos que para o 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 o WARP

Para o Direct3D 12, a criação de um dispositivo WARP requer primeiro a identificação do adaptador WARP. Para facilitar isso, o DXGI 1.4 fornece o IDXGIFactory4::EnumWarpAdapter método. O adaptador WARP pode então ser fornecido ao 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çãoD3D11CreateDevice). Esse tipo de driver é D3D10_DRIVER_TYPE_WARP ou D3D_DRIVER_TYPE_WARP. Quando você especifica esse tipo de driver, o tempo de execução cria um dispositivo WARP e não inicializa um dispositivo de hardware.

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

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

Todos os aplicativos que podem usar Direct3D podem usar WARP. Isto inclui os seguintes tipos de aplicações:

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 dos gráficos modernos baseados em sombreador e da capacidade de escalar em hardware.

Aplicações não relacionadas com jogos existentes

Uma grande quantidade de aplicativos gráficos requer 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 ter como alvo um grande número de configurações de computador.

Jogos de renderização avançados

Os desenvolvedores de jogos podem querer isolar erros de renderização específicos da placa gráfica ou do driver. Portanto, todos os jogos, mesmo os jogos extremamente exigentes graficamente, podem se beneficiar de ser capaz de renderizar seu conteúdo usando WARP. Você pode usar o WARP para validar se algum artefato visual encontrado está processando erros ou problemas com hardware ou drivers.

Outras Aplicações

Os aplicativos de destino para WARP também incluem aqueles que podem não usar atualmente o Direct3D 10 ou o Direct3D 10.1. Esses aplicativos de destino incluem aplicativos que devem sempre funcionar em todos os computadores, aplicativos de processamento de imagem 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, o 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 máquinas 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 seguintes dois compiladores de alta velocidade em tempo real:

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

O WARP usa o pool de threads e o gerenciamento de tarefas complexas e o rastreamento de dependência que foram introduzidos no Windows Vista para permitir que todas as partes do pipeline de renderização sejam distribuídas de forma eficiente entre os núcleos de CPU disponíveis.

WARP usa renderização adiada. Ou seja, o WARP pode renderizar comandos em lote para que a rasterização ocorra apenas quando dados suficientes estiverem disponíveis para usar todos os recursos da CPU de forma eficiente. O trabalho no thread principal do aplicativo é minimizado para permitir que o aplicativo envie comandos o mais rápido possível. Se um aplicativo também for multi-threaded e usar o pool de threads, o trabalho será distribuído uniformemente entre o WARP e o aplicativo.

O gerador de código WARP foi ajustado para fazer melhor uso da arquitetura moderna da CPU. WARP é executado em todos os computadores que podem executar o Windows Vista e sistemas operacionais posteriores, mesmo que o computador não suporte SSE. No entanto, o WARP foi otimizado para computadores que suportam 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 ser executado. 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 em hardware Direct3D 10 e posterior sem qualquer conhecimento de WARP provavelmente funcionarão bem usando WARP. No entanto, recomendamos que você reduza as configurações de qualidade e resolução tanto quanto possível para obter taxas de quadros utilizáveis. Você pode usar o WARP para desenvolver e ajustar aplicativos que funcionam bem em hardware e software.

Como o WARP usa vários núcleos de CPU para execução paralela, ele funciona melhor em CPUs multi-core modernas. O WARP também é executado significativamente mais rápido 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 a vida útil do Windows 7 e sistemas operacionais posteriores.

Quando o WARP está sendo executado na CPU, ele é limitado em comparação com uma placa gráfica de várias maneiras. A velocidade do barramento frontal de uma CPU é normalmente em torno ou abaixo de 10 GB/s. Em contraste, uma placa gráfica geralmente tem memória dedicada que usa 20 a 100GB/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, descompressã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 uma máquina Quad Core de 3,0 GHz baseada em Intel Penryn mostram que o WARP pode, em alguns casos, superar GPUs gráficas Direct3D 10 integradas de baixo custo e posteriores em vários benchmarks. O hardware gráfico discreto low-end é normalmente 4 a 5 vezes mais rápido do que o WARP na execução desses benchmarks. Essas GPUs integradas ou discretas low-end têm uso mínimo de recursos da CPU. As placas gráficas de gama média ou alta são significativamente mais rápidas do que a WARP para muitas aplicações, particularmente quando uma aplicação pode tirar partido do paralelismo e da largura de banda de memória que estas placas gráficas fornecem.

O WARP não substitui o hardware gráfico, especialmente porque o desempenho razoável do Direct3D 10 de baixo custo e hardware discreto posterior agora é barato. O objetivo do WARP é permitir que os aplicativos tenham como alvo 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 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 de WARP com Direct3D 10 Crysis rodando em 800x600 com todas as configurações de qualidade em seus níveis mais baixos:

Processador Hora Ave FPS FPS mínimo Moldura mínima FPS máximo Quadro máximo
Núcleo i7 8 Core @ 3.0GHz 271.57 7.36 3.46 1966 15.01 995
Penryn 4 Núcleo @ 3.0GHz 351.35 5.69 2.49 1967 10.95 980
Penryn 2 Núcleo @ 3.0GHz 573.98 3.48 1.35 1964 6.61 988
Núcleo 2 Duo @ 2.6GHz 707.19 2.83 0.81 1959 5.18 982
Núcleo 2 Duo @ 2.4GHz 763.25 2.62 0.76 1964 4.70 984
Núcleo 2 Duo @ 2.1GHz 908.87 2.20 0.64 1965 3.72 986
Xeon 8 Núcleo @ 2.0GHz 424.04 4.72 1.84 1967 9.56 988
AMD FX74 4 Núcleo @ 3.0GHz 583.12 3.43 1.41 1967 5.78 986
Phenom 9550 4 Núcleo @ 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 Ave FPS FPS mínimo Moldura mínima 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 Windows Hardware Quality Labs (WHQL) para validar dispositivos de hardware Direct3D.

O WARP foi testado em um conjunto de aplicativos e benchmarks Direct3D 10 e Direct3D 10.1 e em amostras de SDK do DirectX, NVIDIA e AMD.

A WARP utilizou o PIX ferramenta de depuração e análise 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; onde pequenas diferenças às vezes ocorrem, elas estão dentro das tolerâncias definidas pela especificação Direct3D 10.