1 puntos por GN⁺ 2024-06-06 | 1 comentarios | Compartir por WhatsApp

Vulkan 1.3 implementado en el M1 en apenas un mes

Introducción al controlador Honeykrisp

  • Controlador Honeykrisp: es el primer controlador que implementa la especificación completa de Vulkan 1.3 en hardware de Apple.
  • Estado de desarrollo: todavía no se ha lanzado para usuarios finales y se sigue trabajando en nuevas funciones y mejoras de rendimiento. El código fuente está disponible para desarrolladores.

Proceso de desarrollo

2 de abril

  • Inicio: comenzó el desarrollo de un controlador Vulkan para M1 basado en el controlador NVK.

3 de abril

  • Conjuntos de descriptores: se ajustaron los conjuntos de descriptores del M1, que son distintos a los de NVIDIA, para adaptarlos a NVK.

4 de abril

  • Shaders de cómputo: se implementó la compilación de shaders de cómputo y la función para copiar buffers e imágenes usando comandos de Vulkan.

6 de abril

  • Manejo del estado gráfico: se escribió código para manejar el estado gráfico, tomando código del controlador OpenGL y combinándolo con NVK.

7 de abril

  • Estado dinámico: se adoptó una estrategia para manejar todos los estados de forma dinámica, y se agregó código para compilar y almacenar en caché prólogos y epílogos.

8 de abril

  • Resultados de pruebas: en las pruebas iniciales pasaron 149,770 casos, fallaron 7,741 y 2,396 se bloquearon.

9 de abril

  • Vulkan 1.3: tras lograr una tasa de aprobación del 99.6% en Vulkan 1.1, se cambió a Vulkan 1.3 y se alcanzó una tasa del 98.3%.

10 al 12 de abril

  • Pruebas adicionales: se confirmó el funcionamiento del renderizador Vulkan en SuperTuxKart y Zink, y se corrigieron errores en las pruebas.

16 al 17 de abril

  • Corrección de errores del compilador: se corrigieron errores del compilador descubiertos en pruebas de indexación de descriptores, resolviendo también un problema de bucle infinito.

18 de abril

  • Renderizado zero-copy: se implementó la extensión EXT_image_drm_format_modifier para lograr un diseño de superficies eficiente.

22 de abril

  • Revisión de la arquitectura del controlador: tras revisar la arquitectura del controlador, se realizaron optimizaciones y se alcanzaron 100 millones de draw calls por segundo en la prueba vkoverhead.

24 al 25 de abril

  • Compatibilidad con YCbCr: se añadió la funcionalidad YCbCr aprovechando código NVK de Mohamed Ahmed.
  • Copia de consultas: se implementó la función de copia de consultas de GPU.

26 de abril

  • Color de borde: se implementó la extensión EXT_custom_border_color para compatibilidad con Direct3D, resolviendo problemas relacionados con el color de borde.

27 de abril

  • Prueba final: se superaron todas las pruebas, con 686,930 casos aprobados y 0 fallos.

Planes futuros

  • Compatibilidad con DXVK y vkd3d-proton: se planea implementar funciones adicionales para la capa de Direct3D.
  • Ejecución de juegos de Windows: se planea ejecutar juegos de Windows en Asahi Linux usando Wine y un emulador x86 de código abierto.

Opinión de GN⁺

  • Desafío técnico: implementar Vulkan 1.3 en el M1 es una tarea técnicamente muy desafiante. Esto se debe a la arquitectura única del hardware de Apple.
  • Beneficio para desarrolladores de juegos: cuando el controlador Vulkan esté terminado, los desarrolladores de juegos podrán ejecutar sus juegos en más plataformas, lo que será beneficioso.
  • Necesidad de optimización de rendimiento: en esta etapa inicial puede ser necesaria una optimización de rendimiento. En particular, hay que resolver el problema del overhead de CPU causado por el manejo del estado dinámico.
  • Contribución de la comunidad: como proyecto de código abierto, la contribución de la comunidad es importante. Se necesitan pruebas y retroalimentación en diversos entornos de hardware y software.
  • Productos competidores: además de DXVK y vkd3d-proton, existen otras capas de compatibilidad como Wine. Es importante comparar las ventajas y desventajas de cada producto antes de elegir.

1 comentarios

 
GN⁺ 2024-06-06
Comentarios de Hacker News
  • Un trabajo impresionante que demuestra el valor de los componentes compartidos, iterativos y abiertos. Me pregunto cuánto tardará en portarse Proton. Es posible que muchos juegos no funcionen bien debido a las diferencias en la arquitectura de GPU y la sobrecarga de la traducción a ARM. Aun así, soy optimista de que, a medida que los SoC se vuelvan más comunes, más juegos apuntarán a memoria unificada y ARM.

  • Me pregunto si el esfuerzo de agregar Vulkan a Linux y traducir DirectX en Asahi Linux afectará el sueño de Apple de llevar juegos AAA a Apple Silicon. Apple quiere que los desarrolladores AAA porten sus juegos a Metal para que corran en iPhone, iPad, Mac y Vision Pro. También es posible que los gamers de Mac instalen Asahi Linux para jugar títulos AAA de PC.

  • No estoy familiarizado con Vulkan 1.3, pero si te interesa trabajar con APIs gráficas de bajo nivel, vale la pena revisarlo. Una vez superadas las barreras iniciales, trabajar con él se vuelve disfrutable. Todo el estado dinámico y los render passes sin presets hacen que el trabajo sea mucho más fácil. Está disponible en todas las plataformas de escritorio con GPUs de menos de 10 años. Eso sí, no existe un framework de “valores predeterminados razonables”, pero hay muchas bibliotecas auxiliares útiles en varios lenguajes.

  • Ojalá tuviera aunque fuera la mitad de su habilidad para programar. De verdad es increíble.

  • La increíble magia de código de Alyssa. No sé cómo lo hace, pero me alegra que esté dando esta buena batalla.

  • Los bugs de compilador nunca ocurren. Pero en realidad sí era un bug del compilador. Nunca me había pasado en toda mi carrera, aunque en ese nivel de abstracción puede ser menos raro.

  • Acabo de hacer una actualización de soporte para ES 3.2, y parece que el M1 fue hecho para Asahi. Solo arranqué macOS una vez al instalarlo. Me pregunto si los navegadores soportan “zero-copy rendering”. Recuerdo haberme atorado con un problema donde el transform feedback de WebGL2 disparaba operaciones de lectura.

  • Hay una estructura de shader peculiar. La condición siempre es falsa, pero el compilador no lo sabe. Me pregunto cuál es el propósito de esa estructura.

  • Si se puede usar dentro de una VM. Desarrollo en macOS y uso una imagen de VMware para probar Ubuntu. Desarrollo una app de gráficos 3D, pero no sé qué tan bueno es el passthrough de VMware. Me pregunto si la GPU de Apple Silicon se virtualiza dentro de una VM y si al ejecutar esta distribución se podría obtener mejor rendimiento gráfico.

  • Me pregunto si alguien puede explicar la relación con MoltenVK. Si este trabajo elimina la necesidad de MoltenVK, y si se trata de un driver nativo.