Es posible que la introducción de este artículo sea demasiado breve para resumir adecuadamente los puntos clave . ( Agosto de 2023 ) |
Autor(es) original(es) | AMD , DICE (diseño original de Mantle ) |
---|---|
Desarrollador(es) | Grupo Khronos (variante donada y derivada, como Vulkan) |
Lanzamiento inicial | 16 de febrero de 2016 ( 16-02-2016 ) | [1]
Versión estable | 1.3.297 [2] / 4 de octubre de 2024 |
Repositorio |
|
Escrito en | C [3] |
Sistema operativo | Android , Linux , Haiku , Fuchsia , BSD Unix , [4] QNX , [5] Windows , Nintendo Switch , [6] [7] [8] Stadia , Tizen , [9] [10] Raspberry Pi , [11] vxWorks , [12] HarmonyOS , OpenHarmony |
Tipo | Gráficos 3D y API de cálculo [13] |
Licencia | Licencia Apache 2.0 y MIT [14] |
Sitio web | vulkan.org |
Vulkan es una API multiplataforma de bajo nivel y bajo consumo de recursos y un estándar abierto para gráficos y computación 3D . [15] [16] [17] Su objetivo era abordar las deficiencias de OpenGL y permitir a los desarrolladores un mayor control sobre la GPU. Está diseñado para admitir una amplia variedad de GPU, CPU y sistemas operativos, y también está diseñado para funcionar con CPU multinúcleo modernas.
Vulkan está orientado a aplicaciones de gráficos 3D en tiempo real de alto rendimiento, como videojuegos y medios interactivos , y computación altamente paralelizada . Vulkan está pensado para ofrecer un mayor rendimiento y un uso más eficiente de la CPU y la GPU en comparación con las API OpenGL y Direct3D 11 más antiguas . Lo hace proporcionando una API de nivel considerablemente más bajo para la aplicación que las API más antiguas, que se asemeja más a cómo funcionan las GPU modernas.
Vulkan es comparable a la API Metal de Apple y a Direct3D 12 de Microsoft . Además de su menor uso de CPU, Vulkan está diseñado para permitir a los desarrolladores distribuir mejor el trabajo entre múltiples núcleos de CPU . [18]
Vulkan fue anunciado por primera vez por el Grupo sin fines de lucro Khronos en GDC 2015. [13] [19] [20] Khronos se refirió inicialmente a la API de Vulkan como la " iniciativa OpenGL de próxima generación " o "OpenGL next" [21] , pero el uso de esos nombres se interrumpió cuando se anunció "Vulkan". [22]
Vulkan se deriva y se basa en componentes de la API Mantle de AMD , que fue donada por AMD a Khronos con la intención de darle a Khronos una base sobre la cual comenzar a desarrollar una API de bajo nivel que pudieran estandarizar en toda la industria. [13]
Vulkan está pensado para proporcionar una variedad de ventajas sobre otras API, así como sobre su predecesor, OpenGL . Vulkan ofrece una menor sobrecarga, un control más directo sobre la GPU y un menor uso de la CPU. [20] El concepto general y el conjunto de características de Vulkan son similares a los conceptos vistos en Mantle y luego adoptados por Microsoft con Direct3D 12 y Apple con Metal .
Las ventajas previstas de Vulkan sobre las API de generaciones anteriores incluyen las siguientes:
Vulkan está disponible en múltiples sistemas operativos y arquitecturas modernas [ cita requerida ] , y proporciona una única API para dispositivos gráficos de escritorio y móviles, mientras que anteriormente estos estaban divididos entre OpenGL y OpenGL ES respectivamente. Al igual que OpenGL, y en contraste con Direct3D 12, la API de Vulkan no está bloqueada en un solo sistema operativo o factor de forma del dispositivo. Vulkan se ejecuta de forma nativa en Android , Linux , BSD Unix , QNX , Haiku , [23] Nintendo Switch , Raspberry Pi , Stadia , Fuchsia , Tizen y Windows 7 , 8 , 10 y 11. MoltenVK proporciona soporte de terceros con licencia gratuita [24] [25] [26] para macOS , iOS y tvOS al envolverse sobre la API Metal de Apple. [27]
Vulkan reduce la carga en las CPU mediante el uso de procesamiento por lotes y otras optimizaciones de bajo nivel, lo que reduce las cargas de trabajo de la CPU y deja a la CPU libre para hacer más cálculos o renderizados de lo que sería posible de otra manera. [28] [29]
Direct3D 11 y OpenGL 4 fueron diseñados inicialmente para su uso con CPU de un solo núcleo y solo recibieron mejoras para ejecutarse en núcleos múltiples. Incluso cuando los desarrolladores de aplicaciones utilizan las mejoras, estas API no suelen escalar bien en núcleos múltiples. Vulkan ofrece una escalabilidad mejorada en CPU de núcleo múltiple debido a la arquitectura de subprocesamiento modernizada. [30] [31]
OpenGL utiliza el lenguaje de alto nivel GLSL para escribir shaders , lo que obliga a cada controlador OpenGL a implementar su propio compilador para GLSL. Esto luego se ejecuta en el tiempo de ejecución de la aplicación para traducir los shaders del programa al código de máquina de la GPU. Por el contrario, se supone que los controladores Vulkan ingieren shaders ya traducidos a un formato binario intermedio llamado SPIR-V (Standard Portable Intermediate Representation), análogo al formato binario en el que se compilan los shaders HLSL en Direct3D . Al permitir la precompilación de shaders, se mejora la velocidad de inicialización de la aplicación y se puede usar una mayor variedad de shaders por escena. Un controlador Vulkan solo necesita realizar una optimización específica de la GPU y la generación de código, lo que resulta en un mantenimiento más fácil del controlador y paquetes de controladores potencialmente más pequeños. [32] Los desarrolladores de aplicaciones ahora también pueden ofuscar más fácilmente el código de shader propietario, debido a que los shaders no se almacenan directamente como código fuente, sin embargo, se proporcionan herramientas que pueden descompilar SPIR-V a código de alto nivel legible para humanos. [31] [17]
OpenGL | Vulcano [34] |
---|---|
Una única máquina de estados global | Basado en objetos sin estado global |
El Estado está ligado a un único contexto | Todos los conceptos de estado están localizados en un buffer de comandos |
Las operaciones sólo se pueden ejecutar secuencialmente | Es posible la programación multiproceso |
La memoria y la sincronización de la GPU suelen estar ocultas | Control explícito sobre la gestión y sincronización de la memoria |
Comprobación exhaustiva de errores | Los controladores Vulkan no realizan ninguna comprobación de errores en tiempo de ejecución; hay una capa de validación para desarrolladores |
En 2016, NVIDIA afirmó que "OpenGL sigue siendo una excelente opción para muchos casos de uso, ya que tiene una complejidad y una carga de mantenimiento mucho menores que Vulkan, mientras que en muchos casos sigue ofreciendo un excelente rendimiento general". [35]
AMD afirma que "Vulkan admite un control cercano al metal, lo que permite un rendimiento más rápido y una mejor calidad de imagen en Windows 7, Windows 8.1, Windows 10 y Linux. Ninguna otra API de gráficos ofrece la misma combinación poderosa de compatibilidad con sistemas operativos, funciones de renderizado y eficiencia de hardware". [36]
Vulkan 1.0 se lanzó en febrero de 2016.
En SIGGRAPH 2016, Khronos anunció que Vulkan recibiría soporte para funciones automáticas multi-GPU, similar a lo que ofrece Direct3D 12. [37] El soporte multi-GPU incluido en la API elimina la necesidad de SLI o Crossfire, que requieren que las tarjetas gráficas sean del mismo modelo. En cambio, la API multi-GPU permite que la API divida de manera inteligente la carga de trabajo entre dos o más GPU completamente diferentes. [38] Por ejemplo, las GPU integradas incluidas en la CPU se pueden usar junto con una GPU dedicada de alta gama para obtener un ligero aumento del rendimiento.
El 7 de marzo de 2018, Khronos Group lanzó Vulkan 1.1. [39] Esta primera actualización importante de la API estandarizó varias extensiones, como vistas múltiples, grupos de dispositivos, uso compartido entre procesos y API, funcionalidad de cómputo avanzada, soporte HLSL y soporte YCbCr. [40] Al mismo tiempo, también trajo una mejor compatibilidad con DirectX 12, soporte explícito para múltiples GPU, soporte para trazado de rayos , [41] [42] y sentó las bases para la próxima generación de GPU. [43] Junto con Vulkan 1.1, SPIR-V se actualizó a la versión 1.3. [40]
El 15 de enero de 2020, Khronos Group lanzó Vulkan 1.2 [44] . [45] Esta segunda actualización importante de la API integra 23 extensiones Vulkan probadas y de uso común adicionales en el estándar Vulkan base. Algunas de las características más importantes son "semáforos de línea de tiempo para una sincronización fácilmente administrada", "un modelo de memoria formal para definir con precisión la semántica de las operaciones de sincronización y memoria en diferentes subprocesos" e "indexación de descriptores para permitir la reutilización de diseños de descriptores por parte de múltiples sombreadores". Las características adicionales de Vulkan 1.2 mejoran su flexibilidad cuando se trata de implementar otras API de gráficos sobre Vulkan, incluido el "diseño estándar de búfer uniforme", el "diseño de bloque escalar" y el "uso de esténcil independiente". [46]
El 25 de enero de 2022, Khronos Group lanzó Vulkan 1.3. [47] Esta tercera actualización importante de la API integra 23 extensiones Vulkan probadas y de uso común adicionales en el estándar Vulkan base. [48] Vulkan 1.3 se centra en reducir la fragmentación al hacer que las nuevas funciones no sean opcionales para que un dispositivo se considere compatible con Vulkan 1.3. [47] [49] Las nuevas características de Vulkan 1.3 incluyen renderizado dinámico, estado dinámico adicional, API de sincronización mejorada y perfiles de dispositivos.
Al lanzar OpenCL 2.2, el Grupo Khronos anunció que OpenCL convergería donde fuera posible con Vulkan para permitir la flexibilidad de implementación del software OpenCL en ambas API. [50] [51] Esto ha sido demostrado ahora por Premiere Rush de Adobe usando el compilador de código abierto clspv [52] para compilar cantidades significativas de código de kernel C de OpenCL para ejecutarse en un entorno de ejecución de Vulkan para su implementación en Android. [53]
El Grupo Khronos comenzó un proyecto para crear una API de gráficos de próxima generación en julio de 2014 con una reunión de lanzamiento en Valve . [54] En SIGGRAPH 2014, el proyecto se anunció públicamente con una convocatoria a participantes. [13]
Según la Oficina de Patentes y Marcas de Estados Unidos, la marca Vulkan se presentó el 19 de febrero de 2015. [55]
Vulkan fue nombrado y anunciado formalmente en la Game Developers Conference 2015, aunque ya existían especulaciones y rumores centrados en una nueva API que se denominaban " glNext ". [56]
A principios de 2015, LunarG (financiado por Valve ) desarrolló y presentó un controlador Linux para Intel que permitió la compatibilidad con Vulkan en los gráficos integrados de la serie HD 4000, a pesar de que los controladores Mesa de código abierto no fueron totalmente compatibles con OpenGL 4.0 hasta más tarde ese año. [57] [58] Todavía existe la posibilidad [59] de compatibilidad con Sandy Bridge, ya que admite el cálculo a través de Direct3D11.
El 10 de agosto de 2015, Google anunció que las futuras versiones de Android soportarían Vulkan. [60] Android 7.x "Nougat" lanzó soporte para Vulkan el 22 de agosto de 2016. Android 8.0 "Oreo" tiene soporte completo.
El 18 de diciembre de 2015, el Grupo Khronos anunció que la versión 1.0 de la especificación Vulkan estaba casi completa y se lanzaría cuando los controladores compatibles estuvieran disponibles. [20]
La especificación completa de Vulkan y el SDK de Vulkan de código abierto se publicaron el 16 de febrero de 2016. [1]
El 26 de febrero de 2018, Khronos Group anunció que la API de Vulkan estaba disponible para todos en macOS e iOS a través de la biblioteca MoltenVK , que permite que Vulkan se ejecute sobre Metal . [61] Otros nuevos desarrollos se mostraron en SIGGRAPH 2018. [62] Anteriormente, MoltenVK era una solución patentada y con licencia comercial, pero Valve llegó a un acuerdo con el desarrollador Brenwill Workshop Ltd para abrir el código fuente de MoltenVK bajo la licencia Apache 2.0 y, como resultado, la biblioteca ahora está disponible en GitHub. Valve también anunció que Dota 2 puede, a partir del 26 de febrero de 2018, ejecutarse en macOS usando la API de Vulkan, que se basa en MoltenVK. [63]
El 25 de febrero de 2019, se anunció el Grupo de trabajo Vulkan Safety Critical (SC) para llevar la aceleración de GPU Vulkan a las industrias críticas para la seguridad. [64]
El servicio de juegos en la nube en streaming Stadia de Google utilizó Vulkan en servidores basados en Linux con GPU AMD . [65]
El 15 de enero de 2020, se lanzó Vulkan 1.2.
Junto con el lanzamiento de Vulkan 1.2, el Grupo Khronos publicó una entrada de blog que consideraba que el soporte HLSL en Vulkan había alcanzado el estado "listo para producción", dadas las mejoras en el compilador DXC de Microsoft y el compilador glslang de Khronos, y las nuevas características en Vulkan 1.2 que mejoran el soporte HLSL. [66]
El 3 de febrero de 2020, la Fundación Raspberry Pi anunció que estaba trabajando en un controlador Vulkan de código abierto para su Raspberry Pi , una popular computadora de placa única. [67] El 20 de junio de 2020, un ingeniero gráfico reveló que había creado uno después de dos años de trabajo que era capaz de ejecutar VkQuake3 a más de 100 FPS en la pequeña computadora. [68]
El 17 de marzo de 2020, Khronos Group lanzó las extensiones Ray Tracing , basadas en la extensión patentada de Nvidia , con algunas extensiones importantes y muchos cambios menores, que a su vez se basaron en la API OptiX de Nvidia . [69] [70] El 23 de noviembre de 2020, se finalizaron estas extensiones de Ray Tracing. [71]
El 24 de noviembre de 2020, Raspberry Pi Foundation anunció que su controlador para Raspberry Pi 4 es compatible con Vulkan 1.0. [72]
El 25 de enero de 2022, se lanzó Vulkan 1.3.
El 1 de marzo de 2022, se lanzó Vulkan SC 1.0, que aporta gráficos y computación Vulkan para la industria crítica para la seguridad y se basa en el estándar Vulkan 1.2. [73]
El 1 de agosto de 2022, Raspberry Pi Foundation anunció que su controlador para Raspberry Pi 4 es compatible con Vulkan 1.2. [74]
El 1 de septiembre de 2022 se lanzó Mesh Shading para Vulkan. [75] [76]
El 25 de enero se anunció una nueva hoja de ruta de Vulkan. [77] El 1 de febrero se lanzó una nueva extensión para decodificar video AV1 . [78]
Las especificaciones iniciales indicaban que los controladores Vulkan se pueden implementar en cualquier hardware que admita OpenGL ES 3.1 o OpenGL 4.x y superiores. [79] Como la compatibilidad con Vulkan requiere nuevos controladores de gráficos, esto no implica necesariamente que todos los dispositivos existentes que admitan OpenGL ES 3.1 o OpenGL 4.x tendrán controladores Vulkan disponibles.
A partir de marzo de 2023, Intel ha dividido el soporte del controlador Vulkan en Windows [80] y en Linux . [81] Todos los controladores son desarrollados por Intel.
En Windows, Skylake y Ice Lake admiten hasta Vulkan 1.3, [82] con soporte limitado después de julio de 2022, ya que las actualizaciones futuras solo cubrirán correcciones de seguridad. [80] Iris Xe y las versiones más nuevas son totalmente compatibles a partir de marzo de 2023. [83]
En Linux, a partir de marzo de 2023, Vulkan no ofrece soporte completo para Haswell [84], ya que no es compatible con Vulkan 1.0. [85] Además de Haswell, Ivy Bridge y Broadwell también son compatibles con un controlador Vulkan heredado en Mesa llamado HASVK. [81] Skylake y las versiones más nuevas son compatibles con un controlador en Mesa llamado ANV. [81]
En Windows, Vulkan 1.2 es compatible desde GCN 1.0 hasta GCN 3.0, [86] [87] [88] y no hay más actualizaciones planeadas después de junio de 2021. [89] GCN 4.0 y versiones más nuevas son compatibles con Vulkan 1.3. [90]
En Linux existen varios controladores Vulkan diferentes con compatibilidad de hardware variable y superpuesta. Existe el controlador Vulkan de código abierto llamado AMDVLK, desarrollado por AMD, que refleja la compatibilidad con Windows. [91] También existe el controlador propietario llamado AMDGPU-PRO, cuyo uso no se recomienda para la mayoría de los usuarios a partir de marzo de 2023. [92]
También existe el controlador recomendado llamado RADV en Mesa desarrollado por Valve, Red Hat, [93] Google [94] y otros. Este controlador a partir de marzo de 2023 es compatible con todas las tarjetas GCN y RDNA . [95] La compatibilidad de este controlador RADV con GCN 1.0 a GCN 2.0 requiere que se habilite su compatibilidad experimental en el módulo del kernel amdgpu . [96]
En Windows y Linux existe el controlador Vulkan desarrollado por NVIDIA que admite Vulkan 1.2 en tarjetas Kepler [97] y no hay más actualizaciones planificadas después de septiembre de 2021. [98] Maxwell y las versiones más nuevas admiten Vulkan 1.3. [99]
NVK, un controlador Vulkan experimental de código abierto para Linux basado en nouveau , se anunció en octubre de 2022. [100] Se fusionó con la línea principal Mesa en agosto de 2023. [101] El controlador actualmente es compatible con Vulkan 1.3 [102]
La mayoría de los dispositivos Android modernos son compatibles con Vulkan. Android 7.0 Nougat incluye compatibilidad opcional con Vulkan 1.0, [103] Android 9.0 Pie incluye compatibilidad opcional con Vulkan 1.1 y Android 10 espera (pero no exige) que todos los dispositivos de 64 bits que no sean de memoria baja sean compatibles con Vulkan 1.1. [104] [105] [106] Android 13 espera, en las mismas condiciones, compatibilidad con Vulkan 1.3. [107] En Linux y algunos dispositivos ChromeOS , el controlador Mesa de código abierto proporciona compatibilidad con hardware Arm Mali (Midgard y Bifrost), Qualcomm Adreno y Broadcom VideoCore VI . [108]
A partir de junio de 2022, los dispositivos Apple no brindan soporte nativo para la API de Vulkan. [109] El soporte de Vulkan está disponible a través de la biblioteca de código abierto MoltenVK , que proporciona una implementación de Vulkan sobre la API de gráficos Metal proporcionada en dispositivos iOS y macOS, aunque tiene algunas limitaciones con respecto a ciertas funciones avanzadas de la API. [27]
En junio de 2022, la versión 1.3.217 de Vulkan agregó soporte para objetos Metal, facilitando la importación y exportación entre las dos API. [110] En diciembre de 2022, la versión 1.3.236 de Vulkan agregó pequeñas correcciones para la interacción con Apple Metal. [111]
A partir de agosto de 2023, Huawei ofrece compatibilidad con NAPI nativa de Vulkan con el sombreador SPIR-V estándar de la industria desde HarmonyOS 4.0 API 10 y se ha ampliado al sistema HarmonyOS NEXT . Se ha adoptado como una extensión en el proyecto de código abierto del consorcio OpenAtom , OpenHarmony, con una pila de gráficos más nueva para el sistema, el motor de software ArkGraphics 3D que se ha convertido recientemente en código abierto desde mayo de 2024 en OpenHarmony 5.0 beta 1 que anteriormente era exclusivo del kit de desarrollo propietario HarmonyOS NEXT, sobre funciones de canalización de gráficos personalizados. [112]
Vulkan no es compatible con versiones anteriores de OpenGL , [113] [17] [nota 1] aunque hay ciertos proyectos que implementan OpenGL sobre Vulkan, como ANGLE de Google y Zink de Mesa . [114]
Vulkan tampoco es compatible con otras API de gráficos como Direct3D , Metal y Mantle , sin embargo existen implementaciones de esas API sobre Vulkan:
Las API de gráficos específicas de la plataforma implementadas sobre Vulkan también pueden ejecutarse en plataformas alternativas. Por ejemplo, DXVK proporciona una biblioteca compartida alternativa diseñada para usarse en Linux de forma nativa (sin la capa de compatibilidad de Wine ) para ayudar con la portabilidad de juegos.
¡Gracias AMD!