Principales características de DirectX 12: detalles

Principales características de DirectX 12: detalles

Guillermo de Ángel

Ayer se publicó un post en el blog de AMD en el que Robert Hallock, director de marketing técnico de la compañía, ha compartido algunos detalles sobre dos de las características más importantes de DirectX 12. Estas características son «asynchronous shaders» y «multi-threaded command buffer recording”, y van a suponer una gran diferencia en el tema de los juegos.

Async shaders

Esta característica permite a los motores gráficos realizar cálculos u otras actividades con la GPU durante vacíos en la carga gráfica a procesar requerida por un juego.

This feature allows a game engine to execute GPU compute or memory activities during “gaps” in the graphics workload presented by a game.

Aunque parece muy lógico el permitir que las funciones gráficas, de cálculo y de memoria de la GPU operen simultáneamente, en versiones anteriores de DirectX no era posible, pues estaban limitadas a una sola cola de procesamiento en serie para todos los tipos de tareas.

Pipeline_behavior

De este modo, todas las tareas gráficas, de cálculo y de memoria tenían que esperar que terminasen otras operaciones antes de hacer lo suyo. Esto resulta en momentos en los que el hardware está sin nada que hacer, lo que quiere decir que baja el rendimiento.

Por otro lado, los shaders asíncronos de DirectX 12 consiguen repartir estas tareas entre varios hilos de ejecución para reducir el tiempo total necesario. Estos shaders asíncronos son un componente importante de la experiencia de juego porque menor tiempo de renderizado supone menor retardo en el dibujado y por tanto mayor rendimiento (más fps, mejor responsividad en entornos VR, etc)

La arquitectura GCN de AMD está específicamente diseñada para conseguir una «granularidad» muy fina en el tema de los async shaders con hardware dedicado a esta tarea, conocido como el Asyunchronous Compute Engine (ACE).

Multi-threaded command buffer recording

El buffer de comandos es la lista de tareas pendientes de un juego, una serie de cosas que la CPU debe organizar y presentar a la tarjeta gráfica para que esta las procese. Elementos de este tipo pueden ser la iluminación, situar personajes, cargar texturas, crear los reflejos, etc.

Los PCs actuales están equipados normalmente con CPUs de varios núcleos, y en DirectX 11 muchos de los núcleos no tenían carga asignada mientras que uno de ellos hacía todo el trabajo, debido a la incapacidad de DirectX 11 de dividir el buffer de comandos de un juego en tareas pequeñas que puedan ser procesadas en paralelo. Además está el hecho de que una gran parte del tiempo se gasta en interpretar las directivas de la API u «overheads», lo que deja menos tiempo para ejecutar el código del juego, que es lo que nos interesa.

Esto es lo que DirectX 12 viene a solucionar.

cmd_buffer_behavior

Los beneficios del uso correcto de DirectX 12 ya están empezando a aparecer, con la colaboración de Oxide Games y Stardock con AMD para la creación de Ashes of the Singularity, un juego de estrategia que verá la luz dentro de un tiempo y utilizará todos los núcleos disponibles de un procesador para ofrecer un rendimiento, calidad de imagen y resoluciones que, en palabras de Brad Wardell (CEO de las desarrolladoras), «ni siquiera son una posibilidad con DirectX 11«.

results

Los productos AMD que serán compatibles con DirectX 12 (una vez tengamos Windows 10 Technical Preview Build 10041 o posterior y los últimos drivers) serán los siguientes:

  • AMD Radeon R9 Series graphics
  • AMD Radeon R7 Series graphics
  • AMD Radeon R5 240 graphics
  • AMD Radeon HD 8000 Series graphics for OEM systems (HD 8570 and up)
  • AMD Radeon HD 8000M Series graphics for notebooks
  • AMD Radeon HD 7000 Series graphics (HD 7730 and up)
  • AMD Radeon HD 7000M Series graphics for notebooks (HD 7730M and up)
  • AMD A4/A6/A8/A10-7000 Series APUs (codenamed “Kaveri”)
  • AMD A6/A8/A10 PRO-7000 Series APUs (codenamed “Kaveri”)
  • AMD E1/A4/A10 Micro-6000 Series APUs (codenamed “Mullins”)
  • AMD E1/E2/A4/A6/A8-6000 Series APUs (codenamed “Beema”)

Más detalles sobre esta info en el post de Robert Hallock.

17 Comentarios