Yo la pregunta que tengo es si sabes el motivo por el cual las conversiones de los juegos de PlayStation Studios que se están haciendo últimamente para PC, como Horizon Zero Sawn, Days Gone, o el recientemente anunciado God of War, los estén haciendo principalmente para DirectX 11 y 12 en vez de Vulkan como debería ser lógico dada la similitud entre las APU de SONY con Vulkan.
Es una cosa que me ha parecido curiosa. ¿No debería ser más sencillo usar Vulkan para las conversiones o es que alguna cosa se me escapa?

La pregunta es buena, voy a intentar resolverla, pero piensa que no soy una fuente fiable, por lo que mi respuesta va a ser lo que llaman una especulación informada.

Un poco de historia de las API gráficas contemporáneas

En primer lugar Vulkan deriva de Mantle, al igual que las API GNM de PlayStation. ¿Por qué se creó Mantle? Pues por el hecho que las GPU bajo DirectX 11 tenía un problema, el uso de un procesador de comandos único dentro de la GPU, en el que la listas de comandos y computación eran tratadas en conjunto como una sola lista.

La gran novedad de la arquitectura GCN que adoptaron tanto PlayStation 4 como Xbox One fue su procesador de comandos, el cual paso a estar formado por varios de ellos. En primer lugar el procesador de comandos gráficos que se encarga de dibujar la escena en pantalla, por otro lugar una serie de procesadores de comandos más pequeños, los cuales se utilizan para computación y manejan listas mucho más cortas.

¿La idea de utilizar varios procesadores de comandos? La misma que el multihilo en las CPU, aprovechar los tiempos o burbujas de ejecución para que la GPU realice otras tareas. Piensa que no vamos a llegar jamás al 100% de la potencia teórica de un procesador, pero podemos buscar técnicas que aprovechen las burbujas para ejecutar.

A este se la llama computación asíncrona y es el motivo por el cual Mantle, DirectX 12, Vulkan y demás API fueron desarrolladas. Aunque el término es muy confuso, ya que:

  • En diseño de hardware decimos que una pieza está sincronizada si su funcionamiento depende del señal de reloj. El ejemplo más simple y claro con los circuitos secuenciales.
  • En cambio en software, se dice que un programa está sincronizado con otro si cada paso se hace en un orden, y es asíncrono si las tareas se pueden completar fuera de ese orden.

¿Cuál es la definición que tomo AMD para la computación asíncrona? La segunda, en la que las diferentes tareas se pueden ejecutar en un orden diferente. Claro esta que los gráficos en 3D requieren que las cosas se hagan en un orden, de ahí a desacoplar por completo la parte de la computación, para que esta pueda hacer ciertas tareas en paralelo aprovechando la potencia que no se utiliza.

El problema es que pese a que la GPU proporciona la capacidad de hacerlo, no lo hace de manera automatizada y ha de ser el desarrollador a través de la API quien se encargue de manejar esta parte, algo que AMD supo hacer muy bien con Mantle, así que el resto de los encargados que hacían sus API decidieron tirar por ahí, coger la idea de AMD y copiarla directamente para crear Vulkan y DirectX 12. En cambio SONY la tomo mucho antes por el hecho que necesitaban una API gráfica para su consola.

¿Por qué SONY no usa Vulkan en PC?

Técnicamente Vulkan no es más que un superconjunto de Mantle, el cual murió después de ser donado el Khronos Group quien más tarde lo convirtió en el actual Vulkan. ¿El problema de dicha API? Su desarrollo es lento y una buena manera de poder expandir tus conocimientos para crear una versión extendida de GNM no es adoptar Vulkan, sino DirectX 12 Ultimate que es más avanzado, para así conocer como funcionan ciertas funciones de DirectX 12 Ultimate y agregarlas a la versión extendida de GNM que se utiliza como API gráfica de PS5.

En pocas palabras, su experimentación con DirectX 12 Ultimate es para saber si merece la pena incluir dichas extensiones en su API propietaria, lo que Mark Cerny llama «features» en el vídeo que ha hecho para WIRED. Creo que SONY cuando vio como Vulkan se estaba atrasando en características vio la necesidad de desarrollar en PC, no solo para tener una fuente de beneficios adicional. Si lo miras desde el punto de vista de desarrollar juegos no solo para portar, sino también con visos al futuro que no se utilice Vulkan para las conversiones a PC tiene todo el sentido del mundo.