El consorcio Khronos, que se dedica al desarrollo de estándares gráficos,
especificación , que define la API para acceder a las capacidades gráficas y computacionales de la GPU. La nueva especificación incorpora correcciones acumuladas durante dos años y . Los controladores que soportan la nueva versión de Vulkan ya empresas como Intel, , ARM, Imagination Technologies y . En Mesa, el soporte para Vulkan 1.2 se ofrece para los controladores (tarjetas AMD) y (Intel). El soporte para Vulkan 1.2 también se implementa en el depurador , y el conjunto de ejemplos .
Principales :
- a un estado listo para su uso generalizado la implementación del lenguaje de programación de sombreadores , desarrollado por Microsoft para DirectX. El soporte de HLSL en Vulkan permite utilizar los mismos sombreadores HLSL en aplicaciones basadas en Vulkan y DirectX, así como simplifica la traducción de HLSL a SPIR-V. Para compilar los sombreadores, se propone utilizar el compilador
, que fue liberado por Microsoft en 2017 y se basa en la tecnología LLVM. El soporte para Vulkan se implementa a través de un backend separado, permitiendo traducir HLSL a la representación intermedia de sombreadores SPIR-V. La implementación abarca no solo todas las capacidades integradas de
HLSL, incluyendo tipos matemáticos, flujos de control, funciones, conjuntos, tipos de recursos, espacios de nombres, Shader Model 6.2, estructuras y métodos, sino que también permite utilizar extensiones específicas de Vulkan, como VKRay de NVIDIA. En modo HLSL sobre Vulkan se ha logrado organizar el funcionamiento de juegos como Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey y Tomb Raider. - Se ha actualizado la especificación , que define una representación intermedia universal para todas las plataformas, que puede aplicarse tanto para gráficos como para cálculos paralelos.
SPIR-V implica la dedicación de una fase separada de compilación de sombreadores a la representación intermedia, lo que permite crear frontends para diversos lenguajes de alto nivel. Basándose en diversas implementaciones de alto nivel, se genera un único código intermedio que pueden utilizar los controladores de OpenGL, Vulkan y OpenCL sin necesidad de un compilador de sombreadores integrado.
- La API principal de Vulkan incluye 23 extensiones, que han permitido aumentar el rendimiento, mejorar la calidad visual y simplificar el desarrollo. Entre las extensiones añadidas:
- (Semaphore de línea de tiempo), sincronizaciones unificadoras con el host y colas de dispositivos (permite el uso de un solo primitivo para la sincronización bidireccional entre el dispositivo y el host, sin necesidad de primitivos separados VkFence y VkSemaphore). Los nuevos semáforos se representan como un valor de 64 bits que aumenta de forma monótona, el cual se puede rastrear y actualizar en múltiples hilos.

- Posibilidad de usar tipos numéricos de precisión reducida en los sombreadores;
- Opción de diseño de memoria compatible con HLSL;
- Recursos no vinculados (bindless), que eliminan el límite en el número de recursos disponibles para los sombreadores mediante el uso de un espacio virtual común de memoria del sistema y memoria de GPU;
- , que define cómo los hilos que se ejecutan en paralelo pueden acceder a datos compartidos y realizar operaciones de sincronización;
- para reutilizar descriptores de diseño en múltiples sombreadores;
- Referencias de búfer.
Lista completa de extensiones añadidas:
- (Semaphore de línea de tiempo), sincronizaciones unificadoras con el host y colas de dispositivos (permite el uso de un solo primitivo para la sincronización bidireccional entre el dispositivo y el host, sin necesidad de primitivos separados VkFence y VkSemaphore). Los nuevos semáforos se representan como un valor de 64 bits que aumenta de forma monótona, el cual se puede rastrear y actualizar en múltiples hilos.
- más de 50 nuevas estructuras y 13 funciones;
- Se han preparado versiones abreviadas de la especificación para plataformas de destino típicas, facilitando el trabajo en plataformas para las cuales aún no se soportan todas las extensiones, lo que permite el uso sin necesidad de activación selectiva de las capacidades básicas de la API Vulkan.
- Se ha continuado trabajando en el proyecto para garantizar la portabilidad con otras API gráficas. Por ejemplo, en Vulkan se han propuesto extensiones que permiten traducir OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) y DirectX (, ) a través de la API Vulkan, así como, al contrario, para garantizar el funcionamiento de Vulkan en plataformas sin su soporte nativo ( y para funcionar sobre OpenGL y DirectX, y gfx-rs para funcionar sobre Metal).
Para mejorar la compatibilidad con DirectX y HLSL se han añadido extensiones
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layout, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, y además se han implementado capacidades específicas de HLSL en SPIR-V.
Entre los planes futuros se destaca el desarrollo de extensiones para aprendizaje automático, trazado de rayos, codificación y decodificación de video, soporte para VRS (sombreado de tasa variable) y sombreadores de mallas.
Recordemos que la API de Vulkan simplifica drásticamente los controladores, trasladando la generación de comandos de GPU al lado de la aplicación, permitiendo la conexión de capas de depuración, unificando la API para diferentes plataformas y aplicando una representación intermedia de código precalculada para su ejecución en el lado de la GPU. Para asegurar un alto rendimiento y previsibilidad, Vulkan proporciona a las aplicaciones medios para gestionar directamente las operaciones de la GPU y soporte incorporado para el procesamiento multihilo de comandos de GPU, lo que minimiza los costos operativos introducidos por el controlador, y las funcionalidades implementadas en el lado del controlador se simplifican y vuelven más predecibles. Por ejemplo, operaciones como la gestión de memoria y el manejo de errores, implementadas en OpenGL del lado del controlador, se trasladan al nivel de la aplicación en Vulkan.
Vulkan abarca todas las plataformas disponibles y proporciona una API única para sistemas de escritorio, móviles y web, permitiendo el uso de una única API común para diferentes GPU y áreas de aplicación. Gracias a la arquitectura multicapa de Vulkan, que implica la creación de herramientas que funcionan con cualquier GPU, los fabricantes de hardware pueden utilizar herramientas estándar para la verificación de código, depuración y perfilado en su desarrollo. Se ofrece una nueva representación intermedia portátil para shaders, SPIR-V, basada en LLVM y que utiliza tecnologías básicas compartidas con OpenCL. Para la gestión de dispositivos y pantallas, Vulkan proporciona una interfaz WSI (Integración de Sistema de Ventanas), que resuelve aproximadamente las mismas funciones que EGL en OpenGL ES. El soporte para WSI está disponible de forma nativa en Wayland: todas las aplicaciones que utilizan Vulkan pueden ejecutarse en entornos de servidores Wayland no modificados. La posibilidad de operar a través de WSI también está habilitada para Android, X11 (con DRI3), Windows, Tizen, macOS e iOS.
Fuente: opennet.ru


