Mas porque motivo se fala tanto do DirectX 12? – A história dos APIs de baixo nível.

Será que, apesar de os APIs de baixo nível serem uma realidade à vários anos, só com o DirectX 12 é que o mundo se apercebeu que eles existem?

DX12

Nota: Devido a terem sido encontrados novos dados o artigo que se segue foi alterado. No entanto dado serem neste momento 00:44 da manhã eventuais incongruências na correcção do texto podem existir. Agradece-se a indicação das mesmas nos comentários, caso estas existam.

Um caso semelhante e introdutório

Estávamos em 2007 quando o Nokia N95 foi lançado. E tal como o N70 e o N73 antes dele, este suportava 3G e video conferência.

No entanto esta capacidade era algo que passava ao lado das pessoas. Algo a que diga-se em bom Português: Ninguem ligava nenhuma.

No entanto quando a Apple lançou o iPhone 4 com câmara frontal e o software Facetime, o mundo não falava de outra coisa. Apesar das vantagens económicas do serviço que funcionava sobre uma rede wireless e não sobre a rede 3G, a video conferência era uma realidade desde à vários anos.



No entanto, dado ser “uma inovação” Apple, o mundo parou. E esquecendo-se que a tecnologia em causa já existia pelo menos desde 2005 (altura do lançamento do N70), em 2010 o mundo parou para dizer que o iPhone 4 revolucionava o mercado ao permitir duas pessoas falar em video-conferência.

A actualidade com o DirectX 12

E actualmente o mesmo parece passar-se com o DirectX 12. Apesar de os APIs de baixo nível serem uma realidade desde à anos, aparentemente está a encarar-se este API como a descoberta de uma tecnologia inovadora. E o motivo é em tudo idêntico ao de cima, o facto de o nome da Microsoft surgir associado ao mesmo.

Playstation 2 vs Xbox

A primeira consola a ter um API de baixo nível foi a Playstation 2. Tratava-se de um API de programação aos seus SPUs de acesso directo ao hardware e sem as tradicionais layers de software em cima. Podem confirmar essa situação no currículo de um programador que refere a experiência com o “Low Level SPU API”.

A consola da Microsoft, a Xbox, na altura concorrente, limitava-se a correr o windows e o DirectX. A consola possuía um hardware superior, facilmente programável e usava ferramentas mais próximas do existente no PC, motivo pelo qual facilmente se obtinha performance do seu hardware sem a necessidade de um API de baixo-nível.

A PS2 era consideravelmente inferior e mais difícil de programar do que a Xbox, mas o seu API permitia-lhe acompanhar. E foi devido a essa situação que ele se tornou uma presença indispensável para a Sony.

Playstation 3 vs Xbox 360

Na Playstation 3 a Sony optou por criar dois APIs. Um denominado PSGL, uma linguagem baseada no Open GL ES (mas que não era o Open GL normal) e o libGCM, uma API gráfico de baixo nível que foi o mais usado durante toda a vida da consola.

Mais uma vez, dada a complexidade na programação e da arquitectura da PS3, a Sony apenas aguentou a sua consola graças a este API. Basicamente a consola viu-se obrigada a obter performances de outra forma, acrescentando-lhe funcionalidades que nem sequer existiam no Open GL ou DirectX tradicional.

Foi com este API que os programadores se aperceberam verdadeiramente das vantagens dos APIs de baixo nível e dos ganhos que eles podiam trazer à performance de um hardware que eles tinham dificuldade em aceder. Sem terem a necessidade de explorar o hardware complexo da PS3, o mesmo passava subitamente a debitar bastante mais.

Quanto à Xbpox 260, apesar de que há uma série de artigos como este espalhados pela net e que são claros em referir que a Xbox 360 não possui um API de baixo nível devido ao facto que a Microsoft não permite, isso não é verdade.

Neste artigo da Eurogamer isso é claramente referido:

It’s often been said that one of the many advantages of working on console is that you have a fixed set of hardware to work with, that you can “write to the metal” and code to the “bleeding edge” of the spec. However, our sources suggest that this simply isn’t an option for Xbox 360 developers. Microsoft doesn’t allow it.

Traduzindo, a frase fala das vantagens de um hardware fixo e de se poder “programar ao metal” (o API de baixo nível), obtendo-se o máximo de performances. No entanto refere igualmente que tal não é uma opção para a Xbox 360 pois a Microsoft não o permite.

E este artigo, é apenas um de muitos outros espalhados pela internet que referem essa situação, e nunca tiveram correcção, o que nos levou que se acreditasse que a Xbox 360 nunca teve um API de baixo nível.

No entanto, graças às vossas questões pertinentes nos comentários, resolveu-se pesquisar mais um pouco. E encontramos um documento oficial da Microsoft que quem quiser consultar pode descarregar aqui que esclarece a situação do API da 360.



Na realidade a Xbox 360 possuiu um API directX9 radicalmente alterado e extensões que permitem pelo menos alguns acessos de baixo nível. O PDF de apresentação é claro nesse aspecto, e vem contrariar as afirmações de que a Microsoft não autorizaria tal situação. Pelo que se percebe, mesmo que a situação possa não ser ao mesmo nível da PS3, o acesso à Xbox 360 é claramente feito a um nível inferior ao do DirectX normal.

 

Playstation 4 vs Xbox One

Já com a Playstation 4 a Sony manteve o que aprendeu com a PS3, e apresentou um API de baixo nível absoluto, que tem por base o PSSL, que possui um nível que a Sony refere só ser possível ultrapassar ao nível de drivers, e na altura referido como tremendamente superior ao DirectX 11 ou Open GL.

No entanto, tal como a PS3 fez com o OpenGL, a PS4 apresenta uma aproximação a outro API conhecido, o DirectX. E nesse sentido apresentou igualmente um Wrapper que permite uma programação mais simplificada e que tenta sacrificar o mínimo de performance, para facilitar a programação e permitir mais facilmente a conversão de jogos DirectX para a linguagem nativa da consola.

A questão é que os jogos DirectX 11 criados em PC e convertidos, não estando preparados para acessos de baixo nível directos ao hardware, são convertidos no nível em que estão. Esse é o motivo pelo qual com o DirectX 12 nos PCs os jogos existentes não irão ganhar nada e apenas os jogos criados para o DX 12 terão ganhos de performance: Não se pode ter ganhos de baixo nível quando o software existente não faz acessos desse tipo ao hardware!

Curiosamente com a PS4 dá-se uma novidade histórica. A consola da Sony é agora mais potente e mais fácil de programar, com uma arquitectura mais tradicional. E os papeis invertem-se.

Por esse motivo a Microsoft vê-se obrigada a, na sua Xbox One, tem igualmente de entrar pela primeira vez no domínio dos APIs de baixo-nível: Ao ver a situação da simplicidade da programação alterada face á Playstation 4, e a potência do seu hardware a ser ultrapassada, com a concorrência a suportar um API de baixo-nível, a Microsoft teve forçosamente de avançar com a criação do seu próprio API de baixo-nível para garantir que a diferença de performances não entrava em domínios monstruosos.

DirectX12 vs Mantle



Foi o resultado do trabalho de criação de um API de baixo nível para a Xbox One que irá agora ser convertido no que a Microsoft chama de DirectX 12 para o PC. O primeiro API de baixo nível da plataforma Windows, criado pela Microsoft.

Mas curiosamente a Microsoft nem sequer foi a primeira empresa a criar algo do género para Windows. A AMD que já à anos percebia as vantagens que o hardware Sony apresentava com os seus APIs, e entretanto lançou o seu Mantle, esse sim o primeiro API de baixo nível para Windows. E apesar de os ganhos médios do mesmo variarem, o mesmo já mostrou casos onde os ganhos passavam os 300%.

Actualmente o API da AMD implementa situações de baixo nível até hoje inexistentes em PCs e bate claramente o DirectX 11. Mas curiosamente, aparentemente não se deu ao Mantle o mesmo tipo de  mesmo atenção que se está a dar ao API da Microsoft. Talvez o facto de não ser universal seja o grande motivo para tal, mas sem dúvida a crença no chamado “molho secreto” para a Xbox One é o principal factor.

A realidade

Curiosamente nos últimos tempos os tópicos do dia são sempre o DirectX 12, e de como este API permitira melhorar as performances da Xbox e dos PCs. Esquecendo que não só o DirectX 12, apesar de ainda possuir situações por implementar na consola, é uma realidade na XBox One desde sempre, e que, tal como na PS4 os ganhos deste API só se vão reflectir nos jogos desenvolvidos especificamente para ela pois a conversão de jogos criados para DX 11 não passa milagrosamente na passagem para baixo nível na conversão (a não ser que trabalhado posteriormente nesse sentido o que é difícil pois implicaria alteração a fundo nos motores, o que só acontecerá quando o DX 12 estiver no mercado).

O DirectX 12 é revolucionário sim, mas é-o no PC e plataforma Windows ao ser o primeiro API “universal” do género. Mas não é sequer inovador pois o Mantle, apesar de limitado às placas ATI, surgiu primeiro.

Mas no que toca ao mundo das consolas ele não vem fazer mais do que adequar a consola da Microsoft à realidade que a concorrência tem à vários anos.

No futuro com os jogos a serem programados para baixo nível (DX 12), a passagem para a Xbox One permitirá basicamente aos jogos multi-plataforma duplicar a eficiência do hardware, o que acontecerá igualmente na PS4 com a conversão para idênticos comandos de baixo nível.

Mas na realidade com o DirectX 12 a Microsoft não descobriu a pólvora. Apenas a vai tornar universal.

PS: Para quem se pergunta porque motivo o Glide está aqui esquecido, o motivo é que o mesmo não era totalmente de baixo-nível.

 



Posts Relacionados