После почти трёх лет работы консорциум Khronos, занимающийся разработкой графических стандартов, опубликовал спецификацию Vulkan 1.4, определяющую API для доступа к графическим и вычислительным возможностям GPU. Новая спецификация вобрала в себя накопившиеся расширения, которые ранее позиционировались как опциональные, а также предоставила ряд новых возможностей и повысила минимальные требования к оборудованию. Инструментарий Vulkan SDK планируют опубликовать в январе 2025 года.
Продукты с поддержкой Vulkan 1.4 готовятся выпустить компании AMD, Arm, Imagination, Intel, NVIDIA, Qualcomm и Samsung. Открытые драйверы для GPU AMD (radv), Apple M1/M2 (honeykrisp), Intel (anv), NVIDIA (nvk) и Qualcomm (tu), развиваемые проектом Mesa, уже прошли все тесты совместимости с Vulkan 1.4 из набора CTS (Khronos Conformance Test Suite) и включены в список сертифицированных драйверов. В список также включены драйверы
Samsung и Qualcomm для платформы Android, а также драйверы для GPU PowerVR D-Series DXT* от компании Imagination Technologies и проприетарные драйверы NVIDIA.
- Добавлена поддержка механизма “Streaming Transfers“, предназначенного для обеспечения потоковой передачи больших объёмов данных между основной системой (хостом) и графическим устройством, не прерывая при этом рендеринг и не замедляя его производительность. Механизм реализован при помощи нового расширения VK_EXT_host_image_copy, поддержка которого является опциональной.
- Переведены в разряд обязательных возможности, нацеленные на повышение производительности:
- Push Descriptors – возможность записывать обновления дескрипторов непосредственно в буфер команд, вместо создания отдельных наборов дескрипторов и их привязки к буферу команд.
- VK_KHR_dynamic_rendering_local_read – позволяет выполнять чтение из вложенных буферов (attachments) и ресурсов, записанных предыдущими фрагментными шейдерами, в рамках динамических проходов рендеринга (render pass).
- VK_EXT_scalar_block_layout – позволяет использовать Си-подобную структуру для блоков SPIR-V, в которой можно выравнивать не скалярные типы на основе размера их компонентов.
- В состав включены расширения VK_KHR_maintenance5 и VK_KHR_maintenance6, предоставляющее вспомогательные команды и структуры для упрощения управления ресурсами и шейдерами.
- Гарантирована поддержка рендеринга с разрешением 8K (7680 x 4320 пикселей) и с использованием до 8 независимых буферов рендеринга.
- В состав включены расширения:
- VK_KHR_global_priority
- VK_KHR_index_type_uint8
- VK_KHR_line_rasterization
- VK_KHR_load_store_op_none
- VK_KHR_map_memory2
- VK_KHR_push_descriptor
- VK_KHR_shader_expect_assume
- VK_KHR_shader_float_controls2
- VK_KHR_shader_subgroup_rotate
- VK_KHR_vertex_attribute_divisor
- VK_EXT_pipeline_protected_access
- VK_EXT_pipeline_robustness
- Переведены в разряд обязательных многие возможности, ранее являвшиеся опциональными.
- Добавлена большая порция новых команд и структур.
API Vulkan примечателен кардинальным упрощением драйверов, выносом генерации команд GPU на сторону приложения, возможностью подключения отладочных слоёв, унификацией API для различных платформ и применением предкомпилированного промежуточного представления кода для выполнения на стороне GPU.
Для обеспечения высокой производительности и предсказуемости, Vulkan предоставляет приложениям средства для прямого управления операциями GPU и встроенную поддержку многопоточной обработки команд GPU, что минимизирует накладные расходы, вносимые драйвером, а реализуемые на стороне драйвера возможности заметно упрощаются и становятся более предсказуемыми. Например, такие операции, как управление памятью и обработка ошибок, реализуемые в OpenGL на стороне драйвера, в Vulkan вынесены на уровень приложения.
Vulkan охватывает все доступные платформы и предоставляет единый API для настольных, мобильных систем и Web, позволяя использовать один общий API для различных графических процессоров и областей применения. Благодаря многослойной архитектуре Vulkan, подразумевающей создание инструментов, работающих с любыми GPU, производители оборудования могут использовать при разработке типовые инструменты для проверки кода, отладки и профилирования.
Для создания шейдеров предлагается переносимое промежуточное представление SPIR-V, основанное на LLVM и использующее общие с OpenCL базовые технологии. C Vulkan также можно использовать язык шейдеров HLSL, применяемый в DirectX, через его трансляцию в SPIR-V. Для управления устройствами и экранами в Vulkan предлагается интерфейс WSI (Window System Integration), решающий примерно те же задачи, что и EGL в OpenGL ES. Поддержка WSI из коробки доступна в Wayland – все приложения, использующие Vulkan, могут запускаться в окружении немодифицированных серверов Wayland. Возможность работы через WSI также обеспечена для Android, X11 (c DRI3), Windows, Tizen, macOS и iOS.