En la GDC 2016 en San Francisco, desarrolladores de Nvidia y AMD estuvieron en un panel en conjunto hablando de DirectX 12, en el que asistieron los Ingenieros Gareth Thomas y Alex Dunn, ellos explicaron un montón de detalles interesantes acerca de cómo trabajar con la nueva API de Microsoft, también dijeron que las tarjetas requieren diferente optimizaciónes para algunas de las funciones de esta nueva API, lo que llevó a los desarrolladores ha incluir código específico para las diferentes marcas.
También hemos hablaron de algunas características interesantes como conservative rasterization, que permite hermosos efectos de sombras, que podemos ver en Tom Clancy The Division.
A continuación ponemos un resumen de los puntos más interesantes, y las diapositivas que se presentaron durante la presentación.
- DirectX 12 es para aquellos que quieren conseguir el máximo rendimiento de la GPU y la CPU, pero tiene una inversión importante en el tiempo de ingeniería, ya que exige a los desarrolladores escribir código a nivel de controlador que DirectX 11 se encarga de forma automática, por esa razón, no es para todo el mundo.
- Ya que no es como DirectX 11, se requieren ajustes diferentes en tarjetas Nvidia y AMD.
- Las lineas de comandos escritos en DirectX 12 necesitan estar corriendo tanto como sea posible, sin ningún tipo de retraso, cada uno de los cuales debe incluir al menos 200 microsegundos de trabajo de la GPU. Preferiblemente más, hasta 500 microsegundos.
- La latencia de la programación en el sistema operativo tarda 60 microsegundos, por lo que los desarrolladores deben trabajar con menos de eso, de lo contrario se relentizaria.
- Los Packs, son la principal característica nueva de DirectX 12, envían el trabajo a la GPU muy rapido, y eso es muy ventajoso para las aplicaciones que requieren una latencia muy baja, como VR.
- No es inherentemente más rápido en la GPU, la mejora está del lado de la CPU. La optimización de Packs difiere entre las tarjetas Nvidia y AMD y requieren diferentes aproximaciones. En particular, en las tarjetas AMD los Packs deberían ser usados solo si el juego exprime demasiado a la CPU.
- Las colas de cómputo aún no han sido completamente investigadas en DirectX 12. Por el momento, pueden ofrecer el 10% de ganancias si se hace correctamente, pero puede haber más ganancias cuando se realicen más investigaciones sobre el tema.
- Dado que esas ganancias no ocurren automáticamente a menos que las cosas estén configuradas correctamente, los desarrolladores siempre deben asegurarse de esto, las tareas de cómputo mal programados pueden dar un resultado opuesto.
- Cuando los desarrolladores se encuentran sin suficiente memoria de vídeo, DirectX 12 les permite mover los recursos fuera de la memoria de vídeo a su propia discreción.
- El uso de la memoria en DirectX 12 permite ahorrar memoria de la GPU.
- DirectX 12 introduce Cercos, que son básicamente semáforos para la GPU, asegurándose que la GPU termine de trabajar en un recurso antes de pasar al siguiente.
- Multi-GPU functiinality está incrustado en la API DirectX 12.
- Es importante para los desarrolladores tener en cuenta las limitaciones de ancho de banda de diferentes versiones de PCI (la interfaz entre la placa base y la tarjeta de vídeo), PCI 2.0 es muy común estos días, y concede la mitad del ancho de banda que PCI 3.0.
- DirectX 12 incluye un control estable de la energía, y algunos ya lo están utilizando.
- Al decidir si se debe utilizar un sombreado de píxeles o un shader de cómputo, hay diferencia “extrema” en pros y contras entre las tarjetas de Nvidia y AMD.
- Si hablamos de la rasterización conservativa, esta permite dibujar todos los pixeles en contacto por un triángulo en los modelos 3D. Anteriormente podía realizarse mediante un truco usando un shader geométrico, pero era muy lento.
- DirectX 11 está aún muy vivo y continuará de la mano de DirectX 12 por un tiempo.
- Los desarrolladores no pueden mezclar DirectX 11 y 12, tendrán que pasarse a DirectX 12 por completo o no podrán usarlo.