Desmistificando o Directx 12: o que você precisa saber

Desmitificando o DirectX 12


O que Intel, NVIDIA e AMD tem ou não a oferecer?


Traduzido por Marcus Sarmanho H. Marques
Agradecimentos ao Grupo do Facebook PC Facts
Administrado por Marcus S. H. Marques e Felipe Assunçao
Fonte: ExtremeTech


Quando o Windows 10 chegar mês que vem, entregará o primeiro upgrade total em DirectX desde o Windows 7, seis anos atrás. Por mais de um ano, AMD e NVIDIA vem divulgando que várias famílias de antigas GPU’s terão suporte ao DirectX 12 na data de lançamento. Recentemente, entretanto, há certa confusão sobre que nível de suporte Intel, AMD e NVIDIA oferecerão para a nova API e quais produtos rodarão os futuros games desenvolvidos na mesma. Tal confusão parece ter origem nos comentários de Robert Hallock da AMD, que reconheceu que várias GPUs AMD GCN teriam suportes em diferentes níveis de DX12. Isso acabou fazendo com que surgissem alegações de que a AMD não suportaria DX12 “totalmente”. Na verdade, Intel, NVIDIA e AMD suportam DirectX 12 em vários níveis e nenhuma GPU no mercado hoje suporta todos os níveis do mesmo.

Níveis de DirectX e pontos de update não são a mesma coisa

A primeira coisa a se entender é que os níveis de DirectX 12 não são a mesma coisa que um ponto de update. Um ponto de update (DirectX 10.1, 11.1 e 11.2) são um pacote de capacidades padronizadas que permitem aos desenvolvedores fazer certas tarefas mais eficientemente ou oferecem capacidades específicas. O DirectX 10.1 por exemplo, implementou novos padrões de qualidade visual, novas instruções de shader, e suporte para Cube Map Arrays. Não era uma novidade significativa o suficiente para definir uma versão inteiramente nova do DirectX por si só, mas era um passo grande o bastante para garantir seu próprio crescimento.
Um nível de DirectX (ou nível de características), ao contrário, define o nível de suporte que a GPU dá mesmo quando ainda suporta o nível anterior. Essa capacidade foi introduzida no DirectX 11. Microsoft define a nível de características como :”um bem definido pacote de funcionalidades de GPU. A título exemplificativo, o nível 9.1 implementa a funcionalidade do Direct3d 9 que expõe as habilidades de modelos de shader ps_2_x e vs_2_x, enquanto o nível 11.0 implementa as funcionalidades trazidas no Direct3D 11”.

Recursos / DirectX
11.1
11.0
10.1
10.0
9.3
9.2
9.1
Modelo Shader
5.0
5.0
4.x
4.0
2.0 (4.0-9.3)
2.0 (4.0-9.1)
2.0 (4.0 9.1)
Geometria de Shader
SIM
SIM
SIM
SIM
NÃO
NÃO
NÃO
Stream Out
SIM
SIM
SIM
SIM
NÃO
NÃO
NÃO
Direct Compute
SIM
SIM
Opção
Opção
N/A
N/A
N/A
Hull ou Domain de Shader
SIM
SIM
NÃO
NÃO
NÃO
NÃO
NÃO
Texture Resource de Shader
SIM
SIM
SIM
SIM
NÃO
NÃO
NÃO

O propósito da função de nível de características é permitir ao desenvolvedor focar em uma única API em vez de desenvolver códigos separados em paralelo para certificar que o jogo possa rodar suavemente em múltiplas gerações de GPUs ao invés de escrever códigos específicos para DX 12, 11, 10 e assim por diante. Uma GPU DX11 com nível 9.3 não pode magicamente produzir efeitos DX11 mas pode rodar jogos em modo DX9 sem a necessidade de existir uma implementação de engine independente para que isso ocorra. É assim que jogos como Civilization V foram possíveis  de rodar tanto em DX11 como DX9 com um mesmo código.

AMD, Intel e NVIDIA: quem suporta o quê?

Um dos problemas em identificar qual GPUs suportam quais características está na confusão entre o suporte a API Directx e o Nível de suporte às características. A página de suporte da NVIDIA, por exemplo, detalha com as Fermi e Kepler podem suportar DirectX 11.1 ao nível de características 11.0. O motivo de Kepler e Fermi não suportarem DX11.1 ao nível de características 11.1 é porque duas das capacidades requisitadas pelo 11.1 não estão presentes nas GPUs. NVIDIA deu uma pincelada para apontar que a atualização de DX 11.1 na verdade adiciona suporte de algumas capacidades que a Fermi introduziu em 2010.
O seguinte Slide da Microsoft detalha exatamente que níveis de características são compatíveis com cada iteração de hardware:

IHV
AMD
Intel
NVIDIA
HW
GCN
Haswell
Broadwell
Fermi
Kepler
Maxwell

1.0
1.1




GMX1xx
GMX2xx
Resource Binding
3
3
1
1
1
2
2
2
Conservative Rasterization
0
0
0
0
0
0
0
2
Tield Resources
1
2
1
1
1
2
2
3
Raster Order Views
Não
Não
Sim
Sim
Não
Não
Não
Sim
Typed UAV Formats
1
2
0
0
0
0
1
1
DX Feature Level
11.1
12.0
11.1
11.1
11
11.1
12.0
12.1

Não está claro porque a Microsoft lista a Kepler como suportando DirectX 11.1 enquanto a NVIDIA a mostra como limitada do DirectX 11.0 para baixo, mas, mesmo assim, um ponto é certo: O suporte de DirectX 12 tem nuances e é variado entre as muitas famílias de placas de vídeo de cada fabricante. Os chips AMD GCN 1.0 como Cape Green, PitCairn a Tahiti suportam nível 11.1, enquanto Bonaire, Hawaii, Tonga, (possivelmente Oland) e Fiji vão suportar características de 12.0. Todas as placas das séries de NVIDIA 4xx, 5xx, 6xx e 7xx irão suportar DirectX 12 ao nível 11.0 e 11.1 com a GTX 750ti oferencendo 12.0.
O problema foi causado por, em dado momento, clamores de que as Maxwell seriam as únicas placas com suporte total ao DirectX 12. Enquanto que é verdade que as Maxwell são as únicas GPU’s com suporte para nível 12.1, as GPU’s AMD são as únicas a terem suporte ao Tier 3 de Resource Binding e shaders assíncronos para computação e gráficos simultâneos. Isso não significa que uma das duas esteja mentindo – significa que certos recursos e capacidades de cada placa não é perfeitamente capturado pelos níveis e denominar uma GPU de “Full” DX12  é não entender a distinção. Intel, por exemplo, oferece ROV a nível 11.1 – coisa que nem AMD e NVIDIA conseguem bater.

Porque DirectX parece desse jeito?

Um senso comum entre os gamers é que se suas placas só suportam DX 12 em 11.1 ou 12.1, eles perderão o que o DX12 tem a oferecer. É importante lembrar que as capacidades de multi-threading e de multigpu de DX12 que vimos (e demonstramos via Mantle) está completamente disponível para cada nível. Kepler e placas GCN mais antigas irão se beneficiar completamente das novidades que o DX 12 tem a oferecer. Dito isso, há determinadas características, gravadas no DX12.0 e DX 12.1 que gamers com placas mais antigas não terão acesso – mas como mostra o gráfico acima, não é um problema restrito à AMD, Intel ou NVIDIA. Nenhuma IGP Intel suporta DirectX 12.0, enquanto só NVIDIA Maxwell suporta DX 12.0 ou 12.1.

680
780ti
980ti
PERFORMANCE
1x
1.8x
3x
DX
11.0
11.0
12.1
MEMÓRIA
2GB
3GB
6GB
CONSUMO
195w
250w
250w
PERF / WATT
1x
1.4x
2.3x
Este Slide recente do lançamento da 980ti mostra que a Kepler está limitada a nível 11.0, não 11.1

 
Para entender porque a Microsoft construiu DirectX 12 deste jeito, considere o seguinte. Desde o DirectX 11, todo novo directx estava atrelado a requisitos de novos hardwares. De tempo em tempo, AMD ou NVIDIA tinham que implementar uma característica específica no hardware antes dele se tornar parte de um futuro padrão de DirectX, mas as placas acabavam tendo que ser vinculadas àquela API no lançamento. Sem a flexibilidade proporcionada pelos níveis de características, os únicos gamers que poderiam ter vantagens é DX 12 seriam os que compraram GCN 1.1, 1.2, ou Maxwell. Todos os outros, incluindo as milhões de pessoas com placas um pouco antigas, seriam deixadas a ver navios.
Adicionar e implementar os níveis de características como parte do DX 12 significa que milhões de pessoas verão benefícios significativos ao adotar a nova API no aqui e agora. Não, placas mais velhas não devem suportar todos as características, mas ninguém vai ter que escolher jogar um game em DX11 por causa dos erros advindos da falta de recursos do DX12 na sua placa de vídeo. Quando AMD, NVIDIA e Intel falam sobre compatibilidade de DX 12 em hardware antigo, eles estão falando dos recursos que mais importam – API’s com menor Overhead, melhor utilização de CPU e funcionalidade multiGPU. O verdadeiro nível de características que diferencia o 12.1 do 11.0 são interessantes e úteis em certos cenários, mas não são essas as características que irão efetivamente moldar como gamers irão usufruir um jogo na nova API.

Como existem poucos games que requisitam DirectX 11.2 ou 11.1 (à parte, não consigo pensar em nenhum), haverão também poucos jogos DirectX 12 que obriguem uma hardware use DX 12 NC 12.0 ou 12.1. Não estou dizendo que jogos assim nunca apareçam, mas isso será daqui a alguns anos, bem depois das GPUs serem repostas por hardware modernos. Se você tem uma GCN 1.0, Fermi ou Kepler, você terá acesso aos recursos mais importantes de DirectX 12. Por isso, a Microsoft criou os níveis de características (feature levels) que placas antigas possam usar – do contrário, Microsoft as desqualificaria para uso, em primeiro lugar. A API foi desenhada propositadamente para ter retrocompatibilidade a fim de garantir que os desenvolvedores quisessem efetivamente utilizá-la.