Después de dos años de trabajo, el consorcio Khronos, encargado del desarrollo de estándares gráficos, ha publicado la especificación Vulkan 1.3, que define la API para acceder a las capacidades gráficas y computacionales de la GPU. La nueva especificación ha acumulado correcciones y ampliaciones en estos dos años. Se señala que los requisitos de la especificación Vulkan 1.3 están diseñados para hardware gráfico de clase OpenGL ES 3.1, lo que permitirá el soporte del nuevo API gráfico en todas las GPU que admitan Vulkan 1.2. Se planea publicar el Vulkan SDK a mediados de febrero. Además de la especificación principal, se prevén extensiones adicionales para dispositivos móviles y de escritorio de gama media y alta, cuyo soporte se implementará en la edición 'Vulkan Milestone'.
Simultáneamente, se presentó un plan para implementar soporte de la nueva especificación y las extensiones adicionales en las tarjetas gráficas y los controladores de los dispositivos. Los productos con soporte para Vulkan 1.3 están siendo preparados para su lanzamiento por empresas como Intel, AMD, ARM y NVIDIA. Por ejemplo, AMD ha anunciado que pronto proporcionará soporte para Vulkan 1.3 en la serie de tarjetas gráficas AMD Radeon RX Vega, así como en todas las tarjetas basadas en la arquitectura AMD RDNA. NVIDIA está preparando la publicación de controladores con soporte para Vulkan 1.3 para Linux y Windows. ARM añadirá soporte para Vulkan 1.3 en las GPU Mali.
Novedades principales:
- Se ha implementado el soporte para pasadas de renderizado simplificadas (Streamlining Render Passes, VK_KHR_dynamic_rendering), que permiten comenzar a renderizar sin crear pasadas de renderizado y objetos de framebuffer.
- Se han añadido nuevas extensiones para simplificar la gestión de la compilación del pipeline gráfico (pipeline, un conjunto de operaciones que transforma primitivas gráficas vectoriales y texturas en una representación de píxeles).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 — añaden estados dinámicos adicionales para reducir la cantidad de objetos de estado compilados y vinculados.
- VK_EXT_pipeline_creation_cache_control — proporciona herramientas avanzadas para gestionar cuándo y cómo compilar los pipelines.
- VK_EXT_pipeline_creation_feedback — proporciona información sobre los pipelines compilados para simplificar el perfilado y la depuración.
- Una serie de funciones han sido trasladadas de opcionales a obligatorias. Por ejemplo, ahora se requiere la implementación de referencias de búfer (VK_KHR_buffer_device_address) y un modelo de memoria Vulkan que define cómo los hilos que se ejecutan en paralelo pueden acceder a datos compartidos y operaciones de sincronización.
- Se han proporcionado herramientas para un control preciso de subgrupos (VK_EXT_subgroup_size_control), mediante las cuales los productores pueden ofrecer soporte para múltiples tamaños de subgrupos, y los desarrolladores pueden elegir el tamaño requerido.
- Se ha introducido la extensión VK_KHR_shader_integer_dot_product, que se puede utilizar para optimizar el funcionamiento de frameworks de aprendizaje automático, gracias a la aceleración de hardware de las operaciones de producto escalar.
- En total, se han incluido 23 nuevas extensiones:
- VK_KHR_copy_commands2
- VK_KHR_dynamic_rendering
- VK_KHR_format_feature_flags2
- VK_KHR_maintenance4
- VK_KHR_shader_integer_dot_product
- VK_KHR_shader_non_semantic_info
- VK_KHR_shader_terminate_invocation
- VK_KHR_synchronization2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_extended_dynamic_state
- VK_EXT_extended_dynamic_state2
- VK_EXT_image_robustness
- VK_EXT_inline_uniform_block
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_private_data
- VK_EXT_shader_demote_to_helper_invocation
- VK_EXT_subgroup_size_control
- VK_EXT_texel_buffer_alignment
- VK_EXT_texture_compression_astc_hdr
- VK_EXT_tooling_info
- VK_EXT_ycbcr_2plane_444_formats
- Se ha añadido un nuevo tipo de objeto VkPrivateDataSlot. Se han implementado 37 nuevos comandos y más de 60 estructuras.
- Se ha actualizado la especificación SPIR-V 1.6, que define una representación intermedia universal para todas las plataformas de shaders, que puede aplicarse tanto a gráficos como a cálculos paralelos. SPIR-V implica la asignación de una fase de compilación de shaders a una representación intermedia, lo que permite la creación de frontends para diferentes lenguajes de alto nivel. A partir de distintas implementaciones de alto nivel, se genera un código intermedio único que puede ser utilizado por los controladores OpenGL, Vulkan y OpenCL sin la necesidad de un compilador de shaders incorporado.
- Se ha propuesto el concepto de perfiles de compatibilidad. La primera empresa en preparar un perfil base (baseline profile) para la plataforma Android ha sido Google, lo que simplificará la determinación en el dispositivo del nivel de soporte de capacidades avanzadas de Vulkan que van más allá de la especificación Vulkan 1.0. Para la mayoría de los dispositivos, el soporte del perfil podrá ser asegurado sin necesidad de instalar actualizaciones OTA.
Recordemos que la API de Vulkan se caracteriza por la simplificación radical de 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 diversas plataformas y utilizando una representación intermedia de código precompilada para su ejecución en la GPU. Para asegurar un alto rendimiento y previsibilidad, Vulkan ofrece a las aplicaciones medios para gestionar directamente las operaciones de la GPU y soporte integrado para el procesamiento multihilo de comandos de GPU, lo que minimiza los costos que introduce el controlador, y las capacidades implementadas en el controlador se simplifican y se vuelven más previsibles. Por ejemplo, operaciones como la gestión de memoria y el manejo de errores, que en OpenGL se realizan en el lado del controlador, en Vulkan se trasladan al nivel de la aplicación.
Vulkan abarca todas las plataformas disponibles y proporciona una API unificada para sistemas de escritorio, móviles y Web, permitiendo utilizar una API común para distintos procesadores gráficos y áreas de aplicación. Gracias a la arquitectura multicapa de Vulkan, que implica la creación de herramientas que trabajan con cualquier GPU, los fabricantes de hardware pueden utilizar herramientas estándar para validar código, depuración y perfilado durante el desarrollo. Para crear sombreadores, se ofrece una nueva representación intermedia portátil SPIR-V, basada en LLVM y que utiliza tecnologías subyacentes comunes con OpenCL. Para la gestión de dispositivos y pantallas, Vulkan propone una interfaz WSI (Window System Integration), que aborda aproximadamente las mismas tareas que EGL en OpenGL ES. El soporte de WSI está disponible de forma nativa en Wayland, permitiendo que todas las aplicaciones que utilizan Vulkan se ejecuten en un entorno sin modificaciones. servidores Wayland. La posibilidad de trabajar a través de WSI también está disponible para Android, X11 (con DRI3), Windows, Tizen, macOS e iOS.
Fuente: opennet.ru
