Vulkan
Графический и вычислительный API нового поколения
А именно открытый, бесплатный, низкоуровневый графический API Vulkan, который управляет конвейером рендеринга практически всех современных гарнитур виртуальной реальности и XR, — это полное техническое описание их архитектуры, принципов проектирования и важнейшей роли в пространственных вычислениях.

Что такое Vulkan?
Итак Vulkan — это открытый, бесплатный, низкоуровневый графический и вычислительный API. Разработанный и поддерживаемый Khronos Group, тем же некоммерческим консорциумом, который стоит за OpenXR, OpenGL и SPIR-V. Выпущенная 16 февраля 2016 года в версии 1.0, она является преемницей OpenGL. Представляет собой отраслевую конвергенцию на основе явной мультиплатформенной модели программирования на GPU с низкими затратами. Аналогичной DirectX 12 от Microsoft и Metal от Apple.
Vulkan основан на компонентах AMD Mantle API, которые компания AMD передала в дар Khronos специально для того, чтобы создать основу для стандартизированного низкоуровневого API, который может быть применен во всей отрасли. Khronos Group обеспечивает высокопроизводительный кроссплатформенный доступ к современным графическим процессорам, а Vulkan специально разработан для обеспечения максимальной производительности и предсказуемости при минимальных нагрузках на процессор и эффективной многопоточной работе.
По сути дела в контексте VR и XR Vulkan это доминирующий API рендеринга для каждой основной платформы автономных гарнитур. Серия Meta Quest, Pico 4 Ultra, Samsung Galaxy XR и PlayStation VR2 (через SteamVR) используют Vulkan в качестве основного API для рендеринга. OpenXR — универсальный стандарт приложений для XR — включает Vulkan в качестве первоклассного графического API через расширение XR_KHR_vulkan_enable2. Для автономных мобильных устройств XR, работающих под управлением Android и Android XR , Vulkan фактически обязателен для любого приложения, требующего конкурентоспособной производительности рендеринга.
Пять основных элементов дизайна, которые делают Vulkan идеальным решением для виртуальной реальности
VR- и XR-рендеринг — одна из самых сложных задач в графике реального времени. Это требует высокой частоты кадров (90-120 Гц). Чрезвычайно низкой задержки (весь кадр – от предсказания позы до отображения на экране — должен быть обработан менее чем за 11 мс при частоте 90 Гц). Точной синхронизации между процессором и графическим процессором и эффективной стереофонической визуализации для двух глаз одновременно. OpenGL, разработанный в эпоху, когда одноядерные процессоры и однопоточные циклы рендеринга были нормой, не мог удовлетворить этим требованиям без серьезной нагрузки на неявный конечный автомат. Vulkan был создан именно для решения этих проблем.
Минимальная нагрузка на процессор
Vulkan устраняет скрытую нагрузку на драйверы OpenGL. Отсутствует неявная проверка состояния, автоматическая проверка ошибок и сериализация команд на стороне драйвера. Каждая операция выполняется явно. Процессорное время, сэкономленное на вызове draw, напрямую доступно приложению. Что особенно важно, когда XR—кадр должен быть обработан за 11 мс.
Многопоточная запись команд
Буферы команд Vulkan могут быть записаны одновременно в нескольких потоках процессора. На современных 8-ядерных мобильных процессорах SoC, таких как Snapdragon XR2+ Gen 2, это означает, что shadow pass, main pass и UI pass могут быть подготовлены параллельно, что в три раза увеличивает производительность по сравнению с однопоточной моделью OpenGL.
Явная синхронизация
Vulkan требует от разработчика явного указания всех ограничений памяти и зависимостей выполнения между командами графического процессора. Многословно, но точно — графический процессор никогда не останавливается в ожидании неявной очистки состояния. Для XR compositors и OpenXR runtimes явная синхронизация — это то, что обеспечивает субмиллисекундную синхронизацию конвейера отображения.
Многопозиционный стереофонический рендеринг
Расширение VK_KHR_multiview от Vulkan позволяет одним вызовом draw выполнять рендеринг для обоих глазных буферов одновременно. Это вдвое сокращает нагрузку на процессор по сравнению с традиционным двухпроходным стереозвуком. И является основой для однопроходного стереозвука Meta и многовидового рендеринга Qualcomm в гарнитурах Snapdragon XR.
Асинхронные вычисления
Vulkan поддерживает выделенные очереди вычислений, которые выполняются асинхронно наряду с графической очередью. Среды выполнения XR используют асинхронные вычисления для перепроектирования (асинхронное искажение пространства). Искажения времени и искажения рендеринга с расширением в виде точек. Они выполняются одновременно с конвейером рендеринга приложения, а не ждут его завершения.
Предсказуемая производительность
Нет скрытой компиляции драйверов, неожиданных удалений из кэша, неявных переходов ресурсов. Объекты состояния конвейера (PSO) Vulkan компилируются заранее. Устраняя «сбой при компиляции шейдеров», который присущ играм на OpenGL и приводит к выпадению кадров в самый неподходящий момент для пользователей виртуальной реальности.
Явная модель программирования Vulkan на графическом процессоре
Архитектура Vulkan построена на принципе явного управления. Поскольку в OpenGL сложность графического процессора была скрыта за уровнем абстракции. Который автоматически управлял состоянием, памятью, синхронизацией и проверкой ошибок. В Vulkan эти проблемы решаются непосредственно разработчиком. Графический процессор выполняет именно то, что указывает разработчик, и не более того. Нагрузка на процессор в точности соответствует фактически представленной работе.
Основной моделью выполнения является буфер команд. Вместо API, работающего в режиме мгновенного вызова, в котором каждый вызов draw вызывается и выполняется последовательно, приложения Vulkan записывают последовательности команд в буферы команд на центральном процессоре, а затем отправляют эти буферы в очереди устройств для выполнения на графическом процессоре. Отделение записи от отправки позволяет выполнять многопоточную подготовку команд. Несколько потоков могут записывать буферы команд одновременно. В следствии чего нет глобального состояния, которое можно было бы повредить.
Причем управление памятью также является явным. В итоге разработчик должен вручную распределять память графического процессора. А также управлять временем жизни ресурсов. И осуществлять передачу данных между областями памяти центрального процессора и графического процессора. Такие библиотеки, как Vulkan Memory Allocator (VMA), предоставляемые AMD с открытым исходным кодом, существуют специально для того, чтобы сделать это доступным для реальных приложений. И повсеместно используются в серверных системах XR engine.
SPIR-V — Двоичный ИК-шейдер Vulkan для портативного XR с нулевым заиканием
Одним из наиболее важных дизайнерских решений Vulkan для XR является использование SPIR-V (стандартного переносимого промежуточного представления) в качестве языка шейдеров. SPIR-V — это двоичное промежуточное представление, а не понятный человеку язык шейдеров. Такой как GLSL или HLSL, который используется драйвером графического процессора во время создания конвейера. Шейдеры компилируются из GLSL, HLSL или более нового языка Slang начиная с Vulkan SDK 2024. В SPIR-V в автономном режиме перед отправкой приложения.
Как следствие последствия для XR очевидны: в Vulkan отсутствует компиляция шейдеров во время выполнения. В OpenGL каждый раз, когда драйвер впервые сталкивается с новым шейдером или комбинацией состояний, он компилирует их «на лету». Что в свою очередь приводит к непредсказуемому скачку производительности процессора. В VR—приложении, ориентированном на скорость 90 кадров в секунду при бюджете кадра в 11 мс. Задержка компиляции шейдеров в 30 мс, распространенная в OpenGL, может привести к падению кадра. К тому же достаточно серьезному, чтобы вызвать укачивание. Потому предварительная компиляция PSO в Vulkan полностью устраняет это. В следствии чего состояние конвейера компилируется один раз при запуске. С этого момента каждый вызов draw выполняется точно в то время, которое было предсказано при профилировании.
По счастью в Vulkan 1.4 появились конвейерные библиотеки и улучшенные механизмы конвейерного кэширования. В общем больше снизило затраты на конвейерную компиляцию для больших приложений с большим количеством вариантов шейдеров. А потом в Vulkan SDK 2024 года также появилась поддержка Slang shading language. Оттого современного языка шейдеров, преемника HLSL, разработанного NVIDIA совместно с Microsoft. Который причем компилируется в SPIR-V и обеспечивает универсальность, модули и улучшенную производную поддержку экосистемы шейдеров Vulkan.
Функции Vulkan, непосредственно обслуживающие VR и XR-рендеринг
Итак некоторые функции Vulkan имеют особое значение для разработчиков XR. Несомненно решают специфические для XR задачи рендеринга. Нежели они используются в среде OpenXR для реализации композитора, который находится между приложением и дисплеем. Потому в совокупности эти функции объясняют, почему все основные платформы XR стандартизированы в Vulkan.
Многовидовой рендеринг
(VK_KHR_multiview)
Безусловно рендеринг для нескольких точек обзора в одном вызове draw. Видите ли для виртуальной реальности это означает, что как левый, так и правый глазные буферы получают геометрию за один проход. Вместе с тем это позволяет снизить нагрузку на процессор при вызове на передачу данных, что критически важно для приложений XR с привязкой к вызову на мобильных компьютерах. Потому это расширение используется для Single Pass Stereo в Meta Quest, Multiview в Pico 4 и Samsung Galaxy XR.
Затенение с переменной скоростью
(VRS / VK_KHR_fragment_shading_rate)
Бесспорно позволяет отображать разные части кадра с разным разрешением для каждой плитки или примитива. Отчего во время выполнения XR видеозаписи объединяются с данными отслеживания движения глаз для визуализации фовеальной области в полном разрешении и периферии в меньшем разрешении — аппаратно—эффективная реализация рендеринга с фовеатированием, которая значительно экономит время графического процессора на кадр.
Асинхронные вычисления
(отдельные семейства очередей)
Несомненно вычислительная очередь Vulkan выполняется асинхронно наряду с графической очередью. В то время как среды выполнения OpenXR и XR SDK используют асинхронные вычисления для асинхронного искажения пространства (ASW), асинхронного искажения времени (ATW) и повторной проекции с задержкой — генерируют синтезированные кадры, когда скорость приложения падает ниже заданной, не блокируя основной конвейер рендеринга.
Многопоточная запись команд
Например буферы команд записываются независимо для каждого потока. Кстати на процессоре Snapdragon XR2+ Gen 2 с 8 процессорными ядрами можно одновременно подготовить shadow pass, main stereo pass и UI pass, что в 3 раза превышает производительность однопоточной модели OpenGL за то же время в 11 мс.
Интеграция Vulkan Swapchain с нулевой копией
Покуда изображения Vulkan swapchain передаются непосредственно приложению и XR compositor. Как следствие приложение выполняет рендеринг в swapchain; compositor считывает ту же память без копирования. В итоге это устраняет необходимость в полном копировании данных с одного графического процессора на другой. Что в свою очередь требовалось для более старых API, восстанавливая задержку в несколько миллисекунд в конвейере compositor.
Явная синхронизация и барьеры Vulkan
Благодаря тому что конвейерные барьеры и семафоры Vulkan позволяют XR compositor точно контролировать, когда визуализируемый кадр приложения завершен и готов к компоновке. Исходя из того семафоры временной шкалы (добавленные в core в версии 1.2) позволяют среде выполнения OpenXR синхронизировать цикл рендеринга приложения с циклом обновления дисплея с точностью до наносекунды.
Зависимости от подклассов Vulkan для встроенной памяти
Несомненно подклассы Vulkan render pass позволяют нескольким операциям рендеринга совместно использовать встроенную память фреймбуфера на мобильных графических процессорах (Adreno, Mali, PowerVR). В конце концов это имеет решающее значение для графических процессоров на основе графических элементов в автономных XR-гарнитурах — позволяет избежать дорогостоящего использования DRAM для промежуточных этапов, таких как предварительная обработка глубины, разрешение MSAA и эффекты экранного пространства.
Трассировка лучей (VK_KHR_ray_tracing_pipeline)
Короче говоря утверждено расширение аппаратной трассировки лучей для Vulkan, поддерживаемое NVIDIA RTX, AMD RDNA 2+, Intel Arc и графическим процессором Adreno на Snapdragon 8 Elite. Что ни говори обеспечивает физически точные отражения, тени и глобальное освещение в режиме XR. Мало того Autodesk VRED 2026 использует трассировку лучей Vulkan для визуализации автомобильного дизайна в виртуальной реальности.
От glNext до Vulkan 1.4 — Десятилетие итераций
Август 2014 — Компания Khronos анонсирует инициативу glNext и начинается реализация инициативы OpenGL следующего поколения
Компания Khronos публично анонсирует инициативу OpenGL следующего поколения на выставке SIGGRAPH 2014. Также проект унаследовал кодовую базу AMD Mantle API. Которую AMD в свою очередь пожертвовала, чтобы предоставить Khronos проверенную основу для низкоуровневого GPU API. Для того чтобы создать настоящего кроссплатформенного преемника OpenGL с низкими затратами. Который сможет конкурировать с DirectX 12 и Metal. Основатели: AMD, NVIDIA, Intel, Qualcomm, ARM, Imagination Technologies, Valve, Epic, Unity и Samsung.
Март 2015 — GDC 2015 glNext под названием «Vulkan» — Первый публичный предварительный просмотр
На GDC 2015 группа Khronos объявила название API: Vulkan. Представители Valve, Epic и Unity поднимаются на сцену, чтобы ознакомить разработчиков с предварительным просмотром. В итоге Vulkan описывается как мультиплатформенный, понятный и экономичный преемник OpenGL и OpenGL ES. Ввиду того одновременно SPIR-V анонсируется как промежуточное представление шейдеров.
16 февраля 2016 — Выпущен Vulkan 1.0 Разработан стандарт — Начинается интеграция драйверов и виртуальной реальности
Спецификация Vulkan 1.0 опубликована вместе с LunarG SDK (спонсируется Valve). Игра Talos Principle от Croteam в Steam стала одной из первых игр Vulkan. Khronos позиционирует Vulkan как предпочтительный API для виртуальной реальности, ссылаясь на меньшую задержку по сравнению с OpenGL. AMD, NVIDIA, Intel, Qualcomm, ARM (Mali) и Imagination Technologies поставляют соответствующие драйверы. Потому одновременно с этим выпускается пакет тестов соответствия Vulkan с открытым исходным кодом.
7 марта 2018 г. — Vulkan 1.1 Операции с подгруппами, защищенная память, многопользовательский режим добавлены в Core
15 января 2020 г. — Vulkan 1.2 Семафоры временной шкалы, адреса буферных устройств, индексация дескрипторов
В Vulkan 1.2 интегрированы 23 проверенных расширения, критически важные для XR. Семафоры временной шкалы (детальная синхронизация между процессором и графическим процессором, необходимая для выполнения OpenXR). Адреса буферных устройств (указатели на графическом процессоре, позволяющие отслеживать лучи и непрямую прорисовку). И индексация дескрипторов (неограниченные массивы дескрипторов, позволяющие использовать современные методы рендеринга). Поддержка функции Half-float (FP16) для мобильных вычислений. Позволяет выполнять рабочие процессы трассировки лучей в стиле DXR.
25 января 2022 г. — Vulkan 1.3 Упрощены функции динамического рендеринга, Синхронизации2, форматирования
В Vulkan 1.3 добавлено расширение Synchronization2 для ядра. Значительно упрощающее общеизвестно сложный синтаксис барьеров — главный выигрыш разработчиков в эргономике. Динамический рендеринг устраняет необходимость в предварительном объявлении объектов render pass. Упрощая API для современных архитектур рендеринга. VK_KHR_zero_initialize_workgroup_memory устраняет угрозу безопасности в вычислительных шейдерах. Опубликован Vulkan SC 1.0, основанный на Vulkan 1.2, для использования в автомобилестроении и авиации.
Декабрь 2024 — Выпущен Vulkan 1.4 Push-дескрипторы, Динамический рендеринг локальных данных, гарантированный рендеринг 8K
Vulkan 1.4 объединяет многочисленные ранее необязательные расширения в основной спецификации, повышая минимальные требования к оборудованию. Принудительные дескрипторы , динамический рендеринг локальных операций чтения и расположение скалярных блоков — все это становится обязательным. Рендеринг 8K с поддержкой до 8 целевых объектов рендеринга теперь гарантирован во всех совместимых реализациях. Соответствующие версии драйверов Vulkan 1.4 от AMD, NVIDIA, Intel, Qualcomm, ARM, Samsung, Imagination и Mesa . MoltenVK обеспечивает значительное распространение Vulkan 1.4 на платформах Apple.
2025 — Расширение кучи дескрипторов и дорожная карта на 2026 год Веха VK_EXT_descriptor_heap и Vulkan Roadmap на 2026 год
Рабочая группа Vulkan выпустила расширение VK_EXT_descriptor_heap — полное обновление системы дескрипторов. Обеспечивающее прямой доступ к памяти дескрипторов при сохранении совместимости с устаревшими наборами дескрипторов. Это приближает модель привязки ресурсов Vulkan к подходу DirectX 12 без привязки. Опубликован отчет Vulkan Roadmap 2026, в котором повышены требования к базовым функциям для будущих реализаций. Доработано видео Vulkan (H.264, H.265, AV1). В SDK добавлена поддержка языка затенения сленга.
Сильные стороны и ограничения Vulkan
✓ Преимущества XR
- Многопоточная запись команд — критична для гарнитур со скоростью 90 кадров в секунду с 8—ядерными процессорами SoC
- VK_KHR_multiview в core — один вызов draw отображает оба глаза одновременно
- Предварительная компиляция SPIR-V — нулевое заикание шейдера во время выполнения в виртуальной
реальности, нулевая цепочка обмена копиями — минимальная задержка между рендерингом и компоновщиком отображения - Асинхронные очереди вычислений — ASW и reprojection выполняются параллельно с игровым рендерингом.
- Четкая синхронизация — точное время отображения составляет менее миллисекунды для конвейера отображения
- Затенение с переменной скоростью — аппаратно-эффективный рендеринг с углублениями и отслеживанием движения глаз.
- Графическая оптимизация на основе фрагментов (subpass) — критична для бюджета мощности Snapdragon Adreno
- Бесплатна, открыта для всех производителей и поддерживается всеми крупными производителями графических процессоров
- Работает на Android, Linux, Windows — всех основных операционных системах XR
- Аппаратная трассировка лучей — фотореалистичный рендеринг в XR становится все более эффективным
MoltenVK позволяет запускать приложения Vulkan на macOS/iOS с помощью перевода Metal
✗ Ограничения
- Слишком много информации — для визуализации минимального треугольника требуется ~ 1000 строк на C по сравнению со ~ 100 в OpenGL
- Требования к квалификации разработчика очень высоки — управление памятью, синхронизация, все барьеры устанавливаются вручную
- Объекты состояния конвейера требуют предварительной компиляции — для больших игр требуется сложная настройка PSO
- Изначально не поддерживается Apple Vision Pro (visionOS использует только Metal)
- Сообщения на уровне проверки могут быть зашифрованными — для устранения сложных проблем с синхронизацией требуются специальные знания
- Экосистема расширений разрастается — более 500 расширений, многие из которых имеют различную поддержку
- Нет встроенных абстракций более высокого уровня — разработчикам нужны VMA, vkBootstrap и т.д. для практического использования
- Соответствие между поставщиками не на 100% — все еще существуют небольшие различия в поведении
Вердикт: Основа рендеринга Vulkan, Которая сделала возможной современную виртуальную реальность
Vulkan — это, в самом практическом смысле, графический API, который позволил работать современной автономной виртуальной реальности. Сочетание минимальной нагрузки на процессор, многопоточной записи команд, предварительной компиляции SPIR-V, VK_KHR_multiview, асинхронных вычислительных очередей и точных примитивов синхронизации устраняет все критические ограничения рендеринга XR в реальном времени. Когда вы включаете Meta Quest 3, Pico 4 Ultra или Samsung Galaxy XR и получаете изображение со скоростью 90 кадров в секунду с постоянной синхронизацией кадров, вы ощущаете прямые последствия дизайнерских решений Vulkan.
Подробность очевидна — Vulkan не является API для начинающих, и создание производственного рендерера XR с нуля требует значительных знаний в области архитектуры графического процессора, управления памятью и теории синхронизации. На практике эта сложность в значительной степени решается игровыми движками (Unity, Unreal Engine, Godot) и фреймворками XR (Snapdragon Spaces, OpenXR runtimes), которые раскрывают возможности Vulkan через интерфейсы более высокого уровня. Разработчик, работающий с Meta Quest с помощью плагина OpenXR от Unity, получает преимущества от multiview от Vulkan и асинхронных вычислений без написания единого вызова API .
Переход от версии 1.0 к версии 1.4 свидетельствует о постепенном совершенствовании . С каждой версией в ядро внедряются проверенные расширения, повышаются минимальные гарантии на аппаратное обеспечение и упрощаются возможности API. Этап 2025 Roadmap 2026 и расширение VK_EXT_descriptor_heap демонстрируют API, который продолжает развиваться в направлении расширения возможностей и улучшения эргономики для разработчиков. В предстоящем десятилетии XR — когда гарнитуры выйдут за рамки 4K на глаз, где трассировка лучей станет основным элементом рендеринга, а управляемая искусственным интеллектом foveation потребует все более тесной интеграции графических процессоров — Vulkan является фундаментом, на котором будет построено это будущее.