После двух лет работы консорциум Khronos, занимающийся разработкой графических стандартов, опубликовал спецификацию Vulkan 1.3, определяющую API для доступа к графическим и вычислительным возможностям GPU. Новая спецификация вобрала в себя накопившиеся за два года исправления и расширения. Отмечается, что требования спецификации Vulkan 1.3 рассчитаны на графическое оборудование класса OpenGL ES 3.1, что позволит обеспечить поддержку нового графического API во всех GPU, поддерживающих Vulkan 1.2. Инструментарий Vulkan SDK планируют опубликовать в середине февраля. Помимо основной спецификации планируется предложить дополнительные расширения для мобильных и настольных устройств среднего и высшего звена, поддержка которых будет осуществляться в рамках редакции “Vulkan Milestone”.
Одновременно представлен план реализации поддержки новой спецификации и дополнительных расширений в графических платах и драйверах устройств. Продукты с поддержкой Vulkan 1.3 готовятся выпустить компании Intel, AMD, ARM и NVIDIA. Например, компания AMD заявила о скором обеспечении поддержки Vulkan 1.3 в серии графических карт AMD Radeon RX Vega, а также во всех картах на базе архитектуры AMD RDNA. Компания NVIDIA готовится опубликовать драйверы с поддержкой Vulkan 1.3 для Linux и Windows. Компания ARM добавит поддержку Vulkan 1.3 в GPU Mali.
Основные новшества:
- Реализована поддержка упрощённых проходов отрисовки (Streamlining Render Passes, VK_KHR_dynamic_rendering), позволяющих начать отрисовку без создания проходов отрисовки и объектов фреймбуфера.
- Добавлены новые расширения для упрощения управления компиляцией графического конвейера (pipeline, набор операций, превращающий векторные графические примитивы и текстуры в пиксельное представление).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 – добавляют дополнительные динамические состояния для сокращения числа компилируемых и прикрепляемых объектов состояния.
- VK_EXT_pipeline_creation_cache_control – предоставляет расширенные инструменты управления тем, когда и как компилировать конвейеры.
- VK_EXT_pipeline_creation_feedback – предоставляет информацию о скомпилированных конвейерах для упрощения профилирования и отладки.
- Ряд возможностей переведены из опциональных в обязательные. Например, обязательными теперь является реализация буферных ссылок (VK_KHR_buffer_device_address) и модели памяти Vulkan, определяющей как параллельно выполняемые потоки могут обращаться к совместно используемым данным и операциям синхронизации.
- Предоставлены средства точного управления подгруппами (VK_EXT_subgroup_size_control), при помощи которых производители могут предоставлять поддержку нескольких размеров подгрупп, а разработчики выбирать требуемый размер.
- Предоставлено расширение VK_KHR_shader_integer_dot_product, которое можно использовать для оптимизации работы фреймворков машинного обучения, благодаря аппаратному ускорению операций cкалярного произведения.
- Всего в состав включены 23 новых расширения:
- 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
- Добавлен новый тип объектов VkPrivateDataSlot. Реализовано 37 новых команд и более 60 структур.
- Обновлена спецификация SPIR-V 1.6, определяющая универсальное для всех платформ промежуточное представление шейдеров, которое может применяться как для графики, так и для параллельных вычислений. SPIR-V подразумевает выделение отдельной фазы компиляции шейдеров в промежуточное представление, что позволяет создавать фронтэнды для различных высокоуровневых языков. На основе различных высокоуровневых реализаций отдельно генерируется единый промежуточный код, который может использоваться драйверами OpenGL, Vulkan и OpenCL без применения встроенного компилятора шейдеров.
- Предложена концепция профилей совместимости. Первым компанией Google подготовлен базовый профиль (baseline profile) для платформы Android, который упростит определение на устройстве уровня поддержки расширенных возможностей Vulkan, выходящих за рамки спецификации Vulkan 1.0. Для большинства устройств поддержка профиля сможет быть обеспечена без установки OTA-обновлений.
Напомним, что API Vulkan примечателен кардинальным упрощением драйверов, выносом генерации команд GPU на сторону приложения, возможностью подключения отладочных слоёв, унификацией API для различных платформ и применением предкомпилированного промежуточного представления кода для выполнения на стороне GPU. Для обеспечения высокой производительности и предсказуемости, Vulkan предоставляет приложениям средства для прямого управления операциями GPU и встроенную поддержку многопоточной обработки команд GPU, что минимизирует накладные расходы, вносимые драйвером, а реализуемые на стороне драйвера возможности заметно упрощаются и становятся более предсказуемыми. Например, такие операции, как управление памятью и обработка ошибок, реализуемые в OpenGL на стороне драйвера, в Vulkan вынесены на уровень приложения.
Vulkan охватывает все доступные платформы и предоставляет единый API для настольных, мобильных систем и Web, позволяя использовать один общий API для различных графических процессоров и областей применения. Благодаря многослойной архитектуре Vulkan, подразумевающей создание инструментов, работающих с любыми GPU, производители оборудования могут использовать при разработке типовые инструменты для проверки кода, отладки и профилирования. Для создания шейдеров предлагается новое переносимое промежуточное представление SPIR-V, основанное на LLVM и использующее общие с OpenCL базовые технологии. Для управления устройствами и экранами в Vulkan предлагается интерфейс WSI (Window System Integration), решающий примерно те же задачи, что и EGL в OpenGL ES. Поддержка WSI из коробки доступна в Wayland – все приложения, использующие Vulkan, могут запускаться в окружении немодифицированных серверов Wayland. Возможность работы через WSI также обеспечена для Android, X11 (c DRI3), Windows, Tizen, macOS и iOS.