- Vulkan (Русский)
- Contents
- Установка
- Проверка
- Выбор драйвера Vulkan
- База данных оборудования Vulkan
- Решение проблем
- Error — vulkan: No DRI3 support
- Nvidia — vulkan is not working and can not initialize
- No device for the display GPU found. Are the intel-mesa drivers installed?
- Vulkan-tutorial. Урок 1.1 — Вступление
- Описание
- E-Book
- Структура уроков
- Vulkan
- Содержание
- Статус поддержки Vulkan API в Сизифе [ править ]
- Что такое Vulkan API? [ править ]
- Поддержка API на аппаратном уровне [ править ]
- AMD [ править ]
- Intel [ править ]
- NVidia [ править ]
Vulkan (Русский)
Vulkan (рус. Вулкан) — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015.
Дополнительная информация доступна на веб-сайте Khronos.
Contents
Установка
Чтобы запустить Vulkan-приложение потребуется установить пакет vulkan-icd-loader (и lib32-vulkan-icd-loader , если планируется запускать 32-битные приложения), а также драйвер Vulkan для видеокарты:
Также возможно установить программную реализацию Vulkan, известную, как lavapipe — vulkan-swrast .
Другие драйверы можно установить вручную:
Для разработки приложений Vulkan установите vulkan-headers и, опционально, vulkan-validation-layers и vulkan-tools (в этом пакете также содержится утилита vulkaninfo ).
Проверка
Чтобы узнать, какие реализации Vulkan в настоящее время установлены в вашей системе, используйте следующую команду::
Выбор драйвера Vulkan
В некоторых случаях устанавливается несколько драйверов Vulkan (например, RADV и AMDVLK). Выбрать необходимый драйвер можно с помощью переменной окружения VK_ICD_FILENAMES . Например, запустить Steam с RADV-драйвером возможно следующей командой:
Чтобы избежать сбоев в 32-битных играх, переменной окружения можно задать 32- и 64-битный вариант значения.
База данных оборудования Vulkan
База данных оборудования Vulkan содержит комбинации графических процессоров и драйверов. Предоставление собственной информации возможно с помощью vulkan-caps-viewer-wayland AUR или vulkan-caps-viewer-x11 AUR .
Решение проблем
Error — vulkan: No DRI3 support
При получении данной ошибки с драйвером Intel graphics может потребоваться принудительный выбор DRI3 и перезапуск Xorg:
Nvidia — vulkan is not working and can not initialize
Проверьте, установлены ли в системе другие драйверы Vulkan, так как они могут предотвратить обнаружение Vulkan-драйвера Nvidia.
В качестве альтернативы задайте переменной окружения VK_ICD_FILENAMES значение /usr/share/vulkan/icd.d/nvidia_icd.json .
No device for the display GPU found. Are the intel-mesa drivers installed?
Попробуйте задать конфигурации intel_icd и primus_vk_wrapper в переменной окружения VK_ICD_FILENAMES :
Источник
Vulkan-tutorial. Урок 1.1 — Вступление
В связи с тем, что у меня не так много времени для ресерча каких-то новых штук и написания статей о них, я решил перевести серию уроков по Vulkan. Надеюсь, что мои переводы будут кому-то полезны и не очень плохого качества. Для начала обучения — прошу под кат.
Автор оригинала дал свое согласие на перевод. Также, когда я доперевожу все статьи и у меня будет время отформатировать их для github, он добавит русский перевод на свой сайт.
В этой части не будет ничего технического, так как я решил сохранить структуру оригинала. Будет рассказано немного о Vulkan, структуре уроков, ссылки на книги и тд.
Часть 1. Вступление
Часть 2. Первый треугольник
- Базовая структура
- Hello window
- Базовый графический пайплайн
- Отрисовка
- Создание своего Swap Chain
Часть 3. Vertex buffer
- Введение
- Создание Vertex Buffer
- Staging Buffer (промежуточный буфер)
- Index Buffer
Часть 4. Uniform Buffer
Часть 5. Текстуры
- Загрузка изображений
- Image View и Image Sampler
- Комбинирование Image Sampler
Часть 6. Буфер глубины
Часть 7. 3D Модели
Часть 8. Mipmaps
Часть 9. Multisampling
Описание
В этих уроках вы научитесь основам Vulkan API. Vulkan это новый API созданный компанией Khronos group (создатели OpenGL), он предоставляет улучшенную абстракцию для программирования графики на современных видеокартах. Новый интерфейс поможет лучше описать как ваше приложение будет работать с графическим процессором, что потенциально может увеличить производительность и уменьшить неожиданные ситуации, связанные с поведением драйвера по сравнению с существующими API, такими как OpenGL и Direct3D. Идеи, лежащие в основе Vulkan, аналогичны идеям Direct3D 12 и Metal, но Vulkan имеет одно неоспоримое преимущество — полную кросс-платформенность, что позволяет разрабатывать приложение одновременно под Linux, Windows и Android.
Взамен, вам придется работать с менее абстрактным и более сложным API. Каждая мелочь, связанная с API, будет настраиваться вами с нуля, включая создание начального буфера кадров и управление памятью для объектов (буферы, текстуры и тд.). Драйвер будет меньше вас ограничивать, а это означает, что вам придется проделать больше работы, чтобы обеспечить правильное поведение вашего приложения.
Вывод — Vulkan не для всех. Он создан для программистов, которым нужно больше производительности, несмотря на более сложный и кропотливый процесс написания приложения. Если вы заинтересованы разработкой игр больше, чем программированием компьютерной графики, то вы можете и дальше использовать OpenGL или DirectX, в любом случае они по-прежнему поддерживаются и не будут вытеснены Vulkan(ом) в ближайшее время. Как альтернативу, можно использовать какой-то игровой движок (Unreal Engine, Unity и тд.), который будет использовать Vulkan, но предоставит вам свою высокоуровневую абстракцию над базовым API.
Теперь давайте рассмотрим что вам надо для изучения Vulkan:
- Видеокарта и драйвера, совместимые с Vulkan (NVIDIA, AMD, Intel)
- Знание C++ (понимание RAII, основы языка)
- Компилятор с поддержкой C++ 17 (Visual Studio 2017+, GCC 7+ или Clang 5+)
- Опыт работы с 3D графикой
Рекомендую обновить драйвера на видеокарту.
В этой серии уроков от вас не требуется знания OpenGL или DirectX, но предполагается, что вы знакомы с основами 3D графики. Например, тут не будет объясняться математика, лежащая в основе перспективной проекции. Для понимания основ компьютерной графики рекомендую прочесть эту книгу. Другие хорошие ресурсы по графике:
Мы будем использовать С++, но вы также можете писать и на чистом С. Если будете использовать С, вам придется использовать другую библиотеку для линейной алгебры, так же самостоятельно структурировать код, так как мы будем использовать классы для структурирования кода и RAII для управления временем жизни ресурсов. Также существует альтернативная версия руководства для разработчиков на Rust.
Для того, что бы разработчикам на других языках было проще понять, как работать с базовым API, мы будем использовать С версию Vulkan API. Однако, вы можете использовать C++ API, который немного упростит жизнь и поможет избежать некоторых ошибок.
Посмотри на котика и расслабься.
E-Book
Также вы можете скачать это руководство в формате электронной книги (нет русского):
Структура уроков
Для начала мы разберемся с тем, как работает Vulkan, и по шагам разберем, что нам нужно для отрисовки нашего первого треугольника на экране. Мы будем продвигаться маленькими шажочками, смысл которых поначалу будет вам не очень понятен, но потом вы поймете их роль когда увидите картину в целом. Следующим шагом будет настройка среды разработки Vulkan SDK, GLM для линейной алгебры и GLFW для создания окна. В уроках будет показано, как настроить все под Windows + Visual Studio и Ubuntu Linux + GCC.
После чего мы реализуем все основные компоненты для отрисовки нашего первого треугольника. Каждая глава будет иметь примерно следующий вид:
- Введение. Описание концепции и ее цели.
- Разберём все нужные нам функций API для использование в нашей программе.
- Абстрагируем вызовы API внутри наших функций.
Каждая глава написана как продолжение предыдущей, но вы также можете читать их как отдельные статьи, знакомящие вас с определенным функционалом Vulkan, то есть вы можете использовать этот сайт как справочник по функционалу. Все функции и типы Vulkan, описанные тут, будут иметь ссылки на спецификацию, поэтому вы можете ознакомится с ними более подробно. Vulkan — новый API, поэтому в спецификации могут быть некоторые неточности или нехватка информации. Если столкнетесь с какими-то погрешностями, не стесняйтесь и оставляйте отзыв в этом репозитории.
Как упоминалось ранее, Vulkan API достаточно низкоуровневый с множеством настроек, что даёт вам максимальный контроль работы графического конвейера. Это вынуждает нас повторно выполнять большое количество шагов по многу раз. Чтобы этого избежать, мы будем стараться выносить такой функционал в отдельные вспомогательные функции.
Также в конце каждой главы будет прилагаться исходный код (включая предыдущие уроки). Вы всегда можете заглянуть туда, если у вас возникнет какая-то ошибка и вы захотите сравнить код или будут сомнения в его структуре. Весь код тестировался на нескольких видеокартах от разных производителей, чтобы исключить ошибки, связанные с железом, и проверить корректность исходников.
Вы всегда можете задать вопрос, относящийся к конкретной теме. Пожалуйста, указывайте в коментариях вашу платформу, версию драйвера, исходный код, ожидаемое поведение и фактическое поведение, чтобы люди могли быстро сориентироваться и помочь вам.
На сайте с оригиналом статьи есть раздел комментариев под основным блоком.
Vulkan — это все еще новый API и best practices еще не сформировались. В случае, если у вас появились какие-то советы, отзывы об учебнике или самом сайте, не стесняйтесь и оставляйте ваши запросы или исправления (можно пулл-реквесты на GitHub). Также можно следить за обновлениями руководства в репозитории.
После выполнения ритуала с рисованием треугольника мы начнем расширять нашу программу. Будем добавлять текстуры, модели и тд. Если у вас уже был опыт графического программирования, то вы знаете, что перед тем, как на экране что-то появится, нужно выполнить много шагов инициализации, создания буферов и тд. В Vulkan этих шагов на порядок больше, но не волнуйтесь, каждый шаг легко понять и вы поймете, что ни один из них не является лишним. Могу обрадовать, переход от скучного треугольника до отрисовки полноценной 3D модели с текстурами не потребует такого большого количества шагов и усилий от нас.
Как правило, рисование треугольника в программировании графики, это как написание «Hello world!» при изучении языка.
Если вы столкнетесь с какими-либо проблемами, следуя руководству, сначала проверьте FAQ, чтобы увидеть, есть ли там ваша проблема и ее решение. Если решение так и не было найдено, не стесняйтесь обращаться за помощью в разделе комментариев в главе.
От переводчика:
Ребят, кому интересен данный цикл статей, поставьте лайк или отпишите в комменты, чтобы я знал нужно оно или нет. Если вы заинтересованы, то постараюсь быстро и качественно перевести следующую статью.
Также буду очень рад, если вы будете сообщать мне о всех ошибках, опечатках и предложениях по улучшению переводов. Перевод и написание статьи заняло у меня около дня и никто кроме меня ее не проверял так что могут встречаться ошибки и опечатки.
Огромное спасибо за исправление моих ошибок и опечаток:
maxzhurkin
Mingun
Также всем остальным и модераторам хабра 🙂
Источник
Vulkan
Содержание
Статус поддержки Vulkan API в Сизифе [ править ]
Что такое Vulkan API? [ править ]
Из Wikipedia: Vulkan — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015.
Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги на всех платформах, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12, Metal[en] и Mantle. Vulkan основан на технологиях AMD в Mantle. На текущий момент для Linux существует т.н. Vulkan SDK kit, который представляет собой библиотеку для загрузки низкоуровневых драйверов (ICD loader), заголовочные файлы для разработчиков (Vulkan Headers), специальную библиотеку для проверки корректности работы всех компонентов (Validation layers).
Т.к. Vulkan API в чем-то схож с Direct3D, появилось достаточное количество трансляторов Direct3D->Vulkan, которые значительно улучшают качество поддержки игр и приложений Windows под Linux. Самый известный пример такого транслятора — DXVK, который реализует в wine поддержку D3D11 через Vulkan.
Vulkan еще часто используют как альтернативу для реализации 2D/3D функций в графике, см. например, GTK+4 и Qt.
Текущая доступная версия спецификации API: 1.2.182
Текущая доступная версия ICD/Headers/Validation layers в Сизифе: 1.2.176
Поддержка API на аппаратном уровне [ править ]
Производитель | AMD | Intel | Nvidia |
---|---|---|---|
Реализация в MesaLib stable (21.1) | RADV 1.2.168 [1] | ANV 1.2.168 [2] | N/A |
Реализация в MesaLib unstable (master) | RADV 1.2.182 | ANV 1.2.182 | N/A |
Open-Source реализация от производителя | AMDVLK 1.2.179 [3] | ANV (см. выше) | N/A |
Closed-Source реализация от производителя | AMDGPU-PRO 1.2.174 [4] | N/A | nvidia_glx 1.1.82 [5] /1.1.124 [6] |
AMD [ править ]
Самая разнообразная поддержка, есть много вариантов, которые можно попробовать для различных приложений. Изначально поддержка Vulkan для AMD появилась в MesaLib, написана не разработчиками из AMD и называется RADV (RADeon Vulkan). В настоящий момент является наиболее стабильной, гарантировано поддерживается многими приложениями и играми, но не обладает всеми возможностями в отличие от оф. версии от AMD (AMDVLK/AMDGPU-PRO).
команды для установки:
RADV/MesaLib [7]
ВАЖНО В свежей версии AMDVLK появились новые экспериментальные расширения, которые можно включить указав переменную окружения AMDVLK_ENABLE_DEVELOPING_EXT= , где может принимать некоторые значения, см. оф. документацию.
ВАЖНО По умолчанию в AMDVLK отключено сохранение шейдерного кеша на диск, т.е. шейдеры компилируются каждый раз на сеанс. Сделано это для совместимости, т.к. проверка работоспособности есть не для всех приложений/игр. Если вы уверены, что ваше приложение поддерживает работу с шейдерным кэшем, можете включить его самостоятельно:
Убедиться, что кеш создался, можно проверив каталог $HOME/.cache, где должен создаться каталог AMD:
ВАЖНО В unstable версии Mesa (19.3.x) появилась альтернативная реализация компилятора шейдеров для Vulkan (ACO), которая написана при поддержке Valve и не использует LLVM. Судя по результатам тестов, она работает чуть быстрее, чем стандартная реализация на базе LLVM. ACO можно включить, объявив его через переменную окружения RADV_PERFTEST:
Intel [ править ]
Поддержка Vulkan в MesaLib осуществляется разработчиками из Intel, наиболее полная, но особо ничем не блещет. Просто работает(tm). Внутри MesaLib драйвер называется ANV
команды для установки: [8]
NVidia [ править ]
Поддержка Vulkan появилась и в закрытых драйверах от Nvidia, причем предлагается несколько версий на выбор:
- Стабильная версия из long-term и short-term версий драйверов
- Экспериментальная для разработчиков, доступная отдельно.
команды для установки:
стабильная версия
версия для разрабочиков [9]
ВАЖНО Начиная с версии 39x NVidia изменила компилятор шейдеров для Vulkan на SPIR-V, в связи с этим в некоторых приложениях замечено падение производительности или ошибки отрисовки. Вернуться на предыдущую версию компилятора шейдеров можно через указание переменной окружения __GL_NextGenCompiler=0
Источник