DirectX 11 vs. DirectX 12: Qual versão escolher para melhor desempenho?

O DirectX 12 fez sua estreia juntamente com o Windows 10 em 2015, marcando o início de uma nova fase tanto para jogadores quanto para desenvolvedores de games. Com a promessa de diminuir a carga sobre a CPU e, ao mesmo tempo, impulsionar a performance da GPU, o DirectX 12 rapidamente ganhou popularidade.

Contudo, será que elevar o desempenho é tão simples quanto trocar do DirectX 11 para o 12? Vamos analisar as diferenças cruciais entre essas duas versões para entender melhor.

O que é o DirectX da Microsoft?

Conforme abordado em nossa análise geral sobre o Microsoft DirectX, o DirectX consiste em um conjunto de interfaces de programação de aplicativos (APIs) designadas para gerenciar tarefas relacionadas a multimídia. Isso inclui o desenvolvimento de jogos para plataformas da Microsoft, como Windows e Xbox. Para fins de contexto, vamos falar brevemente sobre APIs.

Uma API possibilita a comunicação entre dois ou mais programas de computador, o que será explorado mais profundamente em nossa visão geral sobre APIs. Pense nela como um telefone. Se sua mãe lhe enviar uma mensagem de texto com uma lista de compras, seu telefone receberá esses dados e os apresentará para você. Isso é essencialmente uma API em ação.

Quais são as diferenças entre DirectX 11 e DirectX 12?

Então, quais são os contrastes entre o DirectX 11 e o 12? De forma simplificada, o DirectX 12 é a versão mais recente do DirectX. Uma das disparidades mais notáveis reside na forma como interagem com o hardware. A maioria dos jogos concebidos com DirectX 11 utiliza apenas dois a quatro núcleos da CPU. Um desses núcleos geralmente instrui a GPU sobre o que deve ser feito.

O jogo então utiliza os núcleos restantes para lidar com diversos aspectos que exigem muito da CPU, como partículas em um jogo ou distância de visão. Por outro lado, o DirectX 12 distribui o trabalho da CPU entre vários núcleos, permitindo que cada um se comunique com a GPU de forma simultânea.

O DirectX 12 também apresenta recursos avançados, incluindo computação assíncrona e objetos de estado de pipeline (PSOs). A computação assíncrona aumenta a utilização da GPU, possibilitando que múltiplas tarefas sejam executadas em paralelo. Essencialmente, isso libera todo o potencial da sua GPU.

Além do processamento gráfico, sua GPU lida com várias outras tarefas, como executar algoritmos de aprendizado de máquina. No DirectX 11, a GPU só pode executar uma dessas tarefas por vez e em uma ordem predefinida. O desempenho é afetado negativamente quando isso acontece, pois os recursos da GPU não estão sendo utilizados de maneira eficiente.

Imagine isso como um garçom em um restaurante. Ao anotar o seu pedido, o garçom primeiro pergunta o que você quer beber. Somente após você receber as bebidas, ele pergunta o que deseja para o prato principal. Seu pedido é atendido por etapas. O garçom não vai perguntar sobre a sobremesa antes de você terminar o prato principal. Embora seja funcional, não é tão eficiente quanto poderia ser.

Na computação, um recurso de GPU diferente cuidaria de cada tarefa do garçom. Até você receber sua bebida, os recursos da GPU necessários para o prato principal ficariam ociosos. Com a computação assíncrona do DirectX 12, o garçom poderia anotar todo o seu pedido de uma vez, como em um restaurante de fast-food. Isso maximiza o uso da GPU e melhora o desempenho nos jogos.

O DirectX 12 também introduziu os objetos de estado de pipeline (PSOs). No DirectX 11, quando a geometria de um jogo é enviada para a GPU para renderização, diversas configurações de hardware são responsáveis por interpretar e renderizar esses dados. Isso é conhecido como pipeline gráfico e o fluxo de dados de entrada e saída que ocorrem enquanto a GPU renderiza os quadros. Contudo, o pipeline gráfico do DirectX 11 não é perfeito.

Este pipeline contém uma série de estados distintos, incluindo estado de rasterização, estado de mesclagem e estado de estêncil de profundidade, entre outros componentes. No DirectX 11, existem dependências entre esses estados. Consequentemente, um estado não pode ser finalizado até que o estado anterior seja definido. Isso diminui o uso da GPU e aumenta a carga sobre a CPU, prejudicando o desempenho.

Para remediar isso, o DirectX 12 introduziu os PSOs, que são objetos que descrevem o estado de todo o pipeline gráfico. Os PSOs são como uma garrafa que contém os vários estados e componentes necessários para gerar uma imagem. Isso possibilita que a GPU pré-processe cada estado dependente, em vez de recalcular continuamente os estados com base no pipeline gráfico atual.

Isso reduz significativamente a sobrecarga da CPU presente no DirectX 11 e otimiza o desempenho. Então, qual é a dimensão dessa diferença? De acordo com a Microsoft, o DirectX 12 reduz a carga sobre a CPU em até 50% e melhora o desempenho da GPU em até 20%. Embora sejam melhorias consideráveis, isso não significa que você observará os mesmos resultados em todos os cenários.

Por que a transição do DirectX 11 para o DirectX 12 não é simples

O DirectX 11 foi lançado inicialmente para o Windows Vista em 27 de outubro de 2009. Assim, com o DirectX 12 em 2015, existe um intervalo de seis anos entre as duas versões. Durante esse período, milhares de jogos foram desenvolvidos utilizando o DirectX 11. Infelizmente, a transição do DirectX 11 para o DirectX 12 não é nada trivial.

O DirectX 11 é o que chamamos de API de alto nível. Em termos simples, APIs de alto nível são mais fáceis para os desenvolvedores trabalharem. O resultado são jogos estáveis, sofisticados e jogáveis. Por outro lado, o DirectX 12 é uma API de baixo nível, sendo bem diferente do DirectX 11. Embora permita aos desenvolvedores ajustar a otimização em um nível granular, também demanda um amplo conhecimento para o seu uso eficaz.

Posto isto, um jogo desenvolvido em DirectX 12 pode apresentar um desempenho inferior, dependendo da proficiência do desenvolvedor com a API. Certas melhorias vêm com o DirectX 12, mas, na prática, tudo depende de quão bem um desenvolvedor consegue implementá-lo. Por essa razão, muitos desenvolvedores preferem utilizar APIs de alto nível como o DirectX 11.

DX 11 vs. DX 12: Qual você deve escolher?

A resposta varia conforme diversos fatores, como o jogo que você está tentando executar. Por exemplo, Guild Wars 2 funciona com DirectX 11. Mesmo que seu sistema operacional e hardware possam suportar o DirectX 12, você não terá a opção de selecionar DirectX 11 em Guild Wars 2 porque o jogo não oferece esse suporte. Essa é uma decisão exclusiva do desenvolvedor, ArenaNet.

Crédito da imagem: Martin Kerstein/Guild Wars 2

Curiosamente, a ArenaNet demorou nove anos para migrar do DirectX 9 para o DirectX 11. Entretanto, alguns jogos suportam tanto o DirectX 11 quanto o DirectX 12, incluindo Fortnite (confira nosso guia do Fortnite), Battlefield 5, Shadow of the Tomb Raider e muitos outros. Os usuários podem alternar entre DirectX 11 e 12 nas configurações do jogo.

Agora, o fato de alguns jogos suportarem DirectX 11 e 12 pode ter despertado sua curiosidade sobre o desempenho do jogo. Qual escolha, DX 11 ou DX 12, oferece melhor performance no jogo? O vídeo a seguir ilustra as diferenças entre DirectX 11 e 12 em diversos jogos, apresentando informações importantes como média de quadros por segundo, uso de CPU, uso de GPU e outros, utilizando um AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti e 16GB de RAM DDR4.

Os resultados são surpreendentes em muitos aspectos, apresentando, por vezes, pouca diferença visual entre DX 11 e DX 12, apesar dos anos de diferença entre seus lançamentos. Você também deve ter notado as diferenças nas cargas de GPU e CPU entre as duas versões do DirectX, com as versões DX 12 de cada jogo normalmente exigindo menos recursos do que o antigo DX 11.

Além do suporte no jogo, a escolha entre DirectX 11 e DirectX 12 também dependerá do seu hardware. Praticamente qualquer GPU moderna suportará o DirectX 12, mas o mesmo não pode ser dito sobre GPUs mais antigas, como a Radeon HD 4870. Lançada em 2008, esta GPU suporta apenas o DirectX 10. Isso significa que ela seria incapaz de rodar a maioria dos jogos atuais, que utilizam DirectX 11 e 12.

DirectX 12 é a escolha certa para você?

Em suma, a transição do DirectX 11 para o DirectX 12 não é tão direta quanto parece. Depende de diversos fatores, como hardware, software, sistema operacional e se um jogo suporta ambas as versões. Tudo isso precisa ser ponderado antes de se tomar uma decisão, e provavelmente isso também será verdade para as futuras gerações de DirectX.