Vulkan представляет высокопроизводительный кроссплатформенный графический и вычислительный API, разработанный Khronos Group. Vulkan обеспечивает низкоуровневый доступ к GPU (графическому процессору), позволяя разработчикам использовать всю мощь современного графического оборудования.
Традиционные графические API, такие как OpenGL, постепенно уходят в прошлое, так как имеют ограничения в плане производительности и контроля. Vulkan был разработан для устранения этих недостатков и предоставления более современной и эффективной альтернативы. Vulkan выделяется своей производительностью и низкоуровневым контролем, что делает его мощным выбором для разработчиков, которые хотят создавать высокопроизводительные графические приложения, эффективно работающие на нескольких платформах.
Первая спецификация Vulkan была выпущена в 2016 году, и с тех пор этот API завоевал популярность в мире компьютерной графики благодаря своей эффективности и гибкости.
Отличительные особенности Vulkan:
Высокая производительность: Vulkan позволяет разработчикам использовать весь потенциал графического процессора, минимизируя накладные расходы на драйвер и предоставляя детальный контроль над операциями рендеринга.
Кроссплатформенность: Vulkan разработан для работы на нескольких платформах, включая Windows, Linux, Android и другие. Эта кроссплатформенная совместимость делает его универсальным выбором для разработчиков.
Низкоуровневое управление: Vulkan предоставляет разработчикам низкоуровневый контроль над конвейером рендеринга. Это позволяет оптимизировать и настраивать под конкретные приложения.
Эффективность: Vulkan снижает накладные расходы на процессор, что имеет решающее значение для достижения высокой частоты кадров в играх и других графических приложениях реального времени.
Современные функции: Vulkan включает в себя современные графические функции, такие как поддержка нескольких потоков, нескольких графических процессоров и улучшенное управление памятью.
Поддержка сообщества: Vulkan обладает достаточно большим сообществом разработчиков, что упрощает поиск ресурсов и инструментов для разработки.
Несмотря на очевидные преимущества Vulkan его изучение может потребовать больше усилий по сравнению с другими графическими API, особенно более высокого уровня, такими как OpenGL, но преимущества с точки зрения производительности и эффективности могут быть существенными.
Vulkan представляет работу с набором объектов, которые представляют различные аспекты графического конвейера и ресурсов. Основные комопненты при работе с Vulkan:
Объект VKInstance: отправная точка для любого приложения Vulkan. Он представляет собой связь между приложением и библиотекой Vulkan.
Физическое устройство: графический процессор, установленный в компьютере. Оно предоставляет информацию о свойствах и возможностях устройства.
Логическое устройство: интерфейс к физическому устройству. Оно используется для взаимодействия с графическим процессором и управления ресурсами.
Очередь (Queue): очереди используются для отправки буферов команд для выполнения на графическом процессоре. Vulkan поддерживает различные типы очередей, такие как графические очереди, очереди вычислений и очереди передачи.
Swapchain (Цепочка буферов): управляет представлением изображений на экране и обеспечивает плавное отображение кадров для пользователя.
Command Buffer (Буфер команд): содержит последовательность команд, которые выполняются на GPU. Эти команды могут включать операции рендеринга, вычисления и передачи памяти.
Конвейер (Pipeline): определяет последовательность операций, необходимых для рендеринга или вычисления, состоит из нескольких этапов, таких как обработка вершин, обработка фрагментов и т.д.
Кадровый буфер (Framebuffer): представляет набор изображений, которые можно использовать в качестве целей рендеринга
Прежде чем начать работать с Vulkan, необходимо настроить среду разработки.
Прежде всего необходимо убедиться, что на локальном компьютере, где будет проходить разработка, установлена совместимая операционная система для разработки Vulkan. Хотя он и поддерживает ряд операционных систем, включая Windows, Linux и Android. Но старые версии ОС могут его не поддерживать. Стоит отметить, что macOS официально не поддерживает Vulkan.
Для работы с Vulkan также понадобится графический процессор с поддержкой Vulkan. Хотя большинство современных графических процессоров от основных производителей, таких как NVIDIA, AMD и Intel, совместимы с Vulkan.
И естественно понадобится набор инструментов разработки с Vulkan. Основные инструменты:
Vulkan SDK (Vulkan Software Development Kit ): включает в себя Vulkan API, заголовки, библиотеки и инструменты, необходимые для разработки Vulkan. Загрузить Vulkan SDK можно с официального сайта Khronos Group.
Среда разработки: можно выбрать любую среду разработки, с которой удобно работать и где удобно писать код на C или C++, например, Visual Studio, CLion, Visual Studio Code или другие.
Для загрузки Vulkan SDK надо перейти на страницу https://vulkan.lunarg.com/sdk/home. Здесь можно найти сборки для всех распространенных ОС: Windows, Linux, MacOS, Android.
На текущий момент последняя доступная версия - "1.4.309.0". Но стоит отметить, что более новый номер версии SDK не означает, что приложение не может быть разработано для более ранних версий Vulkan. Но более старая версия SDK не может быть использована для разработки приложений для более новой версии Vulkan. Например, 1.1.130.0 SDK может быть использован для разработки приложений Vulkan 1.0, но не может быть использован для разработки приложений для Vulkan 1.2. Кроме того, наличие 1.2.xx SDK не обязательно означает, что система действительно может запустить Vulkan 1.2, так как для этого нужен соответствующий драйвер Vulkan 1.2.
Перед установкой следует сказать про системные требования (на момент написания текущей статьи) для Windows:
Windows 10/11 64-bit OS или Windows 11 ARM 64-bit OS
Драйвер Vulkan Installable Client Driver (ICD) ри производителя GPU
Оперативная память - 8 ГБ
Достаточное место на диске для установки Vulkan SDK (ротиногл 1 ГБ)
Итак, загрузим со страницы https://vulkan.lunarg.com/sdk/home Vulkan SDK для Windows. Установщик представляет файл с расширением exe, который достаточно запустить и следовать шагам мастера установки.
Вначале будет предложено указать каталог установки:
Далее будет предложено указать устанавливаемые компоненты:
Стоит отметить, что в минимальной конфигурации необязательно ничего выбирать, так как, даже если мы не выберем ничего, то вся базовая часть Vulkan SDK устанавливается по умолчанию, и в принципе ее достаточно для большинства сценариев.
И после окончания установки нажмем на кнопку "Завершить":
Стоит отметить, что по умолчанию при установки уже должны добавляться все необходимые пути в переменные среды, поэтому нам ничего не надо специально добавлять в переменные окружения.
Общие системные требования для Linux:
Ubuntu 22.04 / 24.04 или Fedora CoreOS или Arch Linux (последняя версия). 64-разрядная ОС
Наличие библиотеки GLIBC 2.31 и выше
Оперативная память - 8 ГБ
Достаточное место на диске для установки Vulkan SDK (ротиногл 1 ГБ)
Загрузим со страницы https://vulkan.lunarg.com/sdk/home Vulkan SDK для Linux. На Linux загружается архивный пакет с расширением tar.xz. Распакуем его и настроим SDK. Например, создадим в папке HOME новую папку с именем "vulkan" и
распакуем в нее загруженный архив:
mkdir ~/vulkan sudo tar -xvf vulkansdk-linux-x86_64-1.4.309.0.tar.xz --directory ~/vulkan/
Для поиска компонентов Vulkan SDK необходимо задать переменные среды. Для этого в конец файла ~/.profile можно добавить следующие строки:
export VULKAN_SDK=~/vulkan/1.x.yy.z/x86_64
export PATH=$VULKAN_SDK/bin:$PATH
export LD_LIBRARY_PATH=$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export VK_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
И для немедленного применения ее выполним команду
source $HOME/.profile
Также для установки переменных среды можно запустить скрипт конфигурации setup-env.sh:
source ~/vulkan/1.4.309.0/setup-env.sh
Единственное, что этот скрипт устанавливает переменные среды только для текущей сессии. И после закрытия консоли придется запускать скрипт заново.
Стоит отметить, что на Ubuntu 24.04 также можно использовать пакетный менеджер apt для установки с помощью следующей последовательности команды:
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add - sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.4.309-noble.list https://packages.lunarg.com/vulkan/1.4.309/lunarg-vulkan-1.4.309-noble.list sudo apt update sudo apt install vulkan-sdk
Минусом подобного подхода является то, что версия SDK может быть не самая последняя. И в скором времени поддержка подобного подхода может прекратиться.
Наиболее важными компонентами, которые вам понадобятся для разработки приложений Vulkan в Linux, являются загрузчик Vulkan, уровни проверки и несколько утилит командной строки для проверки совместимости машины с Vulkan:
// Ubuntu sudo apt install vulkan-tools // Fedora sudo dnf install vulkan-tools
Утилиты командной строки, позволяют убедиться, что компьютер поддерживает Vulkan.
// Ubuntu sudo apt install libvulkan-dev // Fedora sudo dnf install vulkan-loader-devel
Устанавливает загрузчик Vulkan. Загрузчик ищет функции в драйвере во время выполнения.
// Ubuntu sudo apt install vulkan-validationlayers spirv-tools // Fedora sudo dnf install mesa-vulkan-drivers vulkan-validation-layers-devel
Устанавливает стандартные уровни проверки и требуемые инструменты SPIR-V. Они имеют решающее значение при отладке приложений Vulkan.
В Arch Linux достаточно запустить команду sudo pacman -S vulkan-devel, чтобы установить все требуемые инструменты выше.
Дополнительно для работы с X Window System потребуется еще ряд библиотек (если они ранее не были установлены). На Debian/Ubuntu:
sudo apt install libxxf86vm-dev sudo apt install libxi-dev
И для Fedora:
dnf install libXxf86vm-devel dnf install libXi-devel
Первая библиотека предоставляет интерфейс для XFree86-VidModeExtension, а вторая - клиентский интерфейс X Window System для расширения XINPUT.
Чтобы убедиться, что Vulkan SDK установлен корректно, для вывода информации об установленном SDK выполним в консоли следующую команду:
vulkaninfo | less
Также мы сразу же можем протестировать Vulkan в действии. Для этого выполним следующую команду:
vkcube
И нам должен отобразиться вращающийся куб: