E-Mail: APIs alto y bajo nivel

Aupa Urian,

Menudo lio me hecho, mas que nada pq pensaba que anandtech era una
pagina sería y no publicaba milongas dignas del otro foro …

Oye, tu tienes acceso a los API’s GNMX, GNM y el API de bajo nivel de Xbox ONE.

Pq según he leido, Sony se lo ha montado muy bien, puedes escribir tu
juego/motor en GNMX, y luego pasar las partes criticas a GNM,
optimizando según el principio de pareto. Eso va de perlas para
estudios pequeños que no se puedan permitir un desarrollo entero a
bajo nivel.

¿ Sabes si esto es así ?

En ONE son APIs separados completamente, no ? No se pueden mezclar
como GNMX y GNM, no ?

En varias entradas anteriores lo he explicado pero no hay problema en ordenar ideas y dejar las cosas mucho más claras.

Empezando por PS4, tenemos que la consola tiene “dos” APIs, esto lo sabemos por la entrevista que concedió la gente de Ubi Soft Reflections a Digital Foundry.

GNM:

  • Al nivel más bajo hay una API llamada GNM.
  • Esta te da un control total de la GPU, te da un poder potencial y una flexibilidad de como programas las cosas.
  • Manejar la GPU a ese nivel significa más trabajo.

GNMX:

  • la API GNMX se envuelve alrededor de GNM.
  • Maneja los detalles más esotéricos de la GPU de una forma mucho más familiar si estás acostumbrado a plataformas como el D3D11.
  • Trabajar con GNMX es mucho más simple, elimina buena parte del acceso a la GPU de PS4, pero como consecuencia la CPU se ve afectada.

Para que la gente se de cuenta es como conducir con cambio manual o cambio automático en un juego de coches, en cambio automático los cambios de marchas se hacen de forma transparente para el jugador, en cambio manual el propio jugador tiene que estar pendiente de realizar las acciones oportunas en el momento adecuado.

Ahora bien… ¿son GNMX y GNM dos APIs diferentes? No, en realidad GNMX es una versión recortada de GNM en el que la aplicación no tiene acceso directo a la GPU sino que lo hace a través de un controlador que se encarga de escribir la lista de comandos (que leerá el procesador de comandos de la GPU). En el articulo dicen que GNMX es como D3D 11 y luego dejan ir la siguiente frase:

DirectX trabaja en segundo plano en términos de asignación de memoria y manejo de recursos. Moverse a GNM significa que los desarrolladores se tienen que encargar ellos mismos de esa carga.

Dicho de otra forma, GNMX funciona como Direct3D y por tanto necesita un controlador intermedio para comunicar la aplicación con la GPU.

En segundo lugar tenemos a Xbox One, en este caso la fuente es otra entrevista de DF a uno desarrolladores pero en este caso a los de Metro Redux:

Han añadido un sinfín de características con tal de poder evitar las limitaciones del modelo de la API de DX11 Incluso han hecho una API al estilo hazlo tu mismo DX12/GNM, pese a que no hemos podido utilizarla en Redux debido al limite de tiempo.

Esto significa que de entrada tenemos dos APIs en Xbox One:

  • DX11 que es la de alto nivel.
  • La API al estilo DX12/GNM que es la de bajo nivel.

Ahora bien… ¿Es posible que Xbox One tenga dos APIs distintas o es una versión de DX11 que da acceso directo a la GPU? Veamos lo que dicen los arquitectos de la consola:

  • En larga medida hemos heredado mucho del diseño de DX11.
  • Hemos estado haciendo mucho trabajo en términos de la implementación y para una consola podemos hacerlo de tal manera que cuando llamas a la API D3D esta escriba directamente en el búfer de comandos y actualice los registro de la GPU sin llamar a otras funciones.
  • No hay capas y capas de software.

Vamos, que en este caso lo que han hecho es una versión del D3D 11 que en vez de escribir sobre un controlador lo que hace es escribir directamente sobre el búfer de comandos. Dicho de otra forma, gracias a que una consola es hardware único se han permitido el lujo de poder convertir una API de alto nivel (Direct3D 11) en una de bajo nivel… ¿pero no es lo mismo que Direct3D 12? Bueno, Microsoft dice que no, así que a mi no me miréis mal y lo dice en la siguiente diapositiva:

inside-xbox-one-DX11-Graphics-API-martin-fuller-microsoft-dev-day-1024x554

La idea es que en Xbox One la API DX11.X es una version extendida de la API DX11 que da acceso a bajo nivel y la comparación con la API GNM de PS4 con la API DX11.X  por parte del del desarrollador de Metro Redux hace pensar que DX11.X es un superconjuto de DX11 o visto de otra manera DX11 es un subconjunto de DX11.X al igual que GNMX es un subconjunto de GNMX.

Creo que con esto debería quedar clara la cosa o al menos un poco más clara.

Un saludo.

Anuncios