Разное

Апи вулкан: Что такое Vulkan и DirectX и как они влияют на видеоигры

Содержание

Что такое Vulkan и DirectX и как они влияют на видеоигры

Контент статьи

Большинство из нас, геймеров, слышали о Microsoft DirectX. Однако, немногие из нас знакомы с его утилитами и как они влияют на видеоигры. В настоящее время, фактически, приобретя конкурента в форме Vulkan, вещи относящиеся к двум API, как правило, становятся еще более сложными. В этом руководстве мы увидим, что такое API, Vulkan и DirectX, и мы покажим метод, с помощью которого они влияют на наши игры.

Предварительная информация о API

Прежде чем мы начнем говорить о DirectX и Vulkan, нам нужно сначала понять, что такое API. Аббревиатура означает «Интерфейс прикладного программирования».

Интерфейс предназначен для обеспечения связи между двумя объектами. Одним из примеров является графический интерфейс Windows, который играет роль посредника между операционной системой и пользователем.

Интерфейс обеспечивает удобную среду. С помощью этой среды мы используем операционную систему, не зная, как ее функции реализованы в фоновом режиме. Интерфейс прикладного программирования (API) заполняет роль посредника. Однако на этот раз пользователь может быть ПК или другой программой и не обязательно человеком. API-интерфейсы гораздо более распространены, чем можно было бы подумать, предлагая программистам необходимые инструменты для создания своего программного обеспечения.

Ориентировочный пример, в котором мы используем API, – это когда мы автоматически регистрируемся в новом социальном средстве или онлайн-сервисе, используя наши ранее существующие учетные записи из Facebook или Google (вместо создания новой учетной записи вручную).

В таких случаях веб-сайт использует API, через который он связывается с конкретной услугой (например, Facebook или Twitter), чтобы собирать нашу личную информацию (имя (имена), адрес электронной почты, контактные номера и т. д.) Для создания нашего нового аккаунта.

Тем не менее существует множество других применений API для всех видов взаимодействия между приложениями и компьютерами, такими как системы баз данных, операционные системы и библиотеки программного обеспечения.

В таких случаях использование API-интерфейсов применимо к нашему компьютерному оборудованию и в частности, к нашей графической карте (видеокартам).

DirectX и Vulkan фактически улучшают связь между приложением (игрой) и графическим процессором, чтобы повысить производительность графики.

Microsoft DirectX

С выпуском Windows 95 и модели защищенной памяти разработчики не имели такого же доступа к ресурсам, как в MS-DOS. DirectX впервые появился в виде набора конкретных API для разработки мультимедийных приложений, таких как игры.

Термин «DirectX» начинается со слова «Direct», ссылаясь на прямой доступ к ресурсам системы. Некоторые примеры включают Direct3D для графики и DirectSound для аудио. Часть «Х» относится к API в общей коллекции; таким образом объединив все API-интерфейсы под названием DirectX. Вышеупомянутое название также вдохновило название популярной видеоигр компании Xbox.

Вышеприведенное иллюстрирует тесную связь между DirectX и консолью Microsoft. Его последняя версия, DirectX 12, имеет большие улучшения. Тем не менее он поддерживается только Windows 10 и новейшей игровой консолью компании Xbox One.

Direct3D является жемчужиной DirectX и полезен для создания 3D-объектов на нашем экране. Он также позволяет просматривать игры в полноэкранном режиме, а также использовать аппаратные ускорители. Последний метод позволяет реализовать некоторые функции более эффективно, чем они работают в программном обеспечении. Это может быть достигнуто за счет более эффективного использования аппаратного обеспечения нашего компьютера. В этом случае это будет наша видеокарта.

Вулкан AMD

В 2015 году Kronos Group разработала свой собственный API. Vulkan – это низкоуровневый API, используемый для разработки графически требующих приложений. Его первая стабильная версия дебютировала в августе 2016 года.

Следует четко указать, что «низкий уровень» не относится к качеству. Вместо этого этот термин описывает способность Вулкана работать на аппаратном уровне.

Хронос окружает себя одними из самых больших имен в ИТ-индустрии. Некоторые из них – Google, Intel, Sony, Nvidia и AMD. Последние два дали API, свести к минимуму время разработки Vulkan.

OpenGL – популярный API среди графических дизайнеров. Фактически он был разработан Хроносом, и он также включает в себя многие характеристики Вулкана. Однако его прием игровыми дизайнерами был непредвиденным.

Одним из самых сильных активов Vulkan является тот факт, что он с открытым исходным кодом. Кроме того, совместимость Vulkan с несколькими платформами вместе с общей производительностью – это два дополнительных актива, которые делают его более прибыльным, чем DirectX.

Здесь вы можете найти полный список с именами, которые содержат Khronos. Мантия обеспечила основную базу, на которой был разработан Вулкан. Наконец Vulkan в настоящее время находится в версии 1.1.

Как они влияют на игры

До этого момента мы рассмотрели некоторые основы, касающиеся API, Microsoft и Khronos. Но как они влияют на игры?

Эти два API значительно улучшили производительность. До сих пор DirectX, по-видимому, обеспечивал лучшую производительность, чем Vulcan, что на самом деле он не так далеко позади.

Microsoft утверждает, что DirectX 12 снижает потребление на 50% при использовании DirectX 11. С другой стороны, Vulkan также демонстрирует лучшую гибкость, чем его предшественник. Говоря о предшественниках, DirectX 11 и OpenGL были созданы с учетом одноядерных процессоров; что означает, что они не были точно настроены с использованием новых, многоядерных процессоров.

В результате одно ядро ​​управляет большинством различных процессов, в то время как остальные работают с низкой скоростью, а иногда и вовсе отключены. Оба API (DirectX 12 и Vulkan) поддерживают процессоры с несколькими ядрами и потоками, чтобы максимально эффективно использовать свои возможности. Более того, они передают большую часть требуемых задач от процессора к графической карте (видеокартам), предлагая более сбалансированный опыт.

Взаимодействие между этими двумя элементами может существенно повлиять на будущие сборки ПК. Графические карты в значительной степени важнее, чем процессоры, когда дело доходит до игр. С дальнейшим развитием игровых API маловероятно, что процессоры могут стать еще менее важными, когда дело доходит до него. Таким образом, даже с простым процессором мы можем получить хорошую производительность без каких-либо узких мест.

Поддержка нескольких графических карт

Здесь Khronos Group столкнулась со значительным разрывом между двумя API-интерфейсами с поддержкой использования нескольких графических карт (использование явного многоканального GPU). Мы можем использовать разные карты, если их чипы имеют аналогичную архитектуру и используют один и тот же драйвер. Это позволит различным картам обрабатывать другую часть экрана.

Microsoft здесь еще на один шаг впереди, позволяя использовать несколько графических карт даже у другого производителя, что часто бывает, поскольку большинство систем имеют независимый и интегрированный графический процессор. Важно подчеркнуть тот факт, что эти реализации отличаются от возможностей SLI и Crossfire от Nvidia и AMD, которые реализованы с помощью драйверов, и в частности, в случае SLI требуют идентичные графические карты.

Шейдеры

Шейдеры – это небольшие программы, которые запускаются на наших видеокартах. Они отвечают за определенные функции различных объектов в 3D-среде. Тени, туман и освещение в игре являются результатом шейдера.

Vulkan использует промежуточное представление для шейдеров под названием SPIR-V. Его двоичная форма похожа на байт-код DirectX DX.

SPIR-V версия 1.3 отличается SPIR-V opt, инструментом для уменьшения размера шейдеров. Максимальный размер достигает + 40% от байт-кода DX соответствующего представления для DirectX.

Кроме того, некоторые структуры в HLSL (высокоуровневый шейдерный язык), которые были разработаны Microsoft, не поддерживались непосредственно некоторыми видеокартами.

HLSL широко используется DirectX с версии 9. Он использовался в качестве дополнения к существующему языку ассемблера шейдеров. С новой версией SPIR-V Vulkan также поддерживает ее.

Таким образом, разработчики смогут использовать существующий код для своих шейдеров, и им не нужно будет изобретать колесо. Следовательно, игры будут легко перенесены с одной платформы на другую.

Совместимость с несколькими платформами

Что касается платформ, большое преимущество Vulkan заключается в том, что он поддерживает Windows, Linux, Mac OS, Android и iOS. DirectX 12 с другой стороны, поддерживается только в Windows 10 и Xbox One. Чтобы использовать усовершенствования, предлагаемые DirectX 12, нам нужно либо обновить нашу операционную систему до Windows 10, либо получить новую консоль компании.

Если вы хотите попробовать DirectX 12, и вам не удалось получить Windows 10 во время бесплатного обновления, ознакомьтесь с нашим пошаговым руководством по свободным методам модернизации, которые доступны:

Возвращаясь к предыдущей теме, игровой порт, поддерживаемый API Vulkan, будет значительно проще по сравнению с портом, поддерживаемым DirectX.

С одной стороны, мы можем иметь названия на нескольких платформах, а с другой разные операционные системы имеют возможность размещать наши игры. Одна из причин, почему Linux не так популярен, как Windows, связана с тем, что последняя отличается от игр.

Распределение Linux может быть лучшим выбором для размещения наших игр, поскольку он может быть скорректирован для этой цели. Например Steam OS – это специализированная операционная система, предназначенная исключительно для игр.

Также подумайте: компания думает о создании программного обеспечения для разработки игр и хочет поддерживать API. Кто бы вы выбрали?

Оба имеют схожие мощности оба лучшие, чем их предшественники, и оба обеспечивают явное использование видеокарт. Vulkan поддерживает все платформы, включая Windows 10 и Xbox One, в то время как DirectX поддерживает только последние две.

Виртуальная реальность

Необходимо сказать, что Vulkan является примером больших улучшений в области виртуальной реальности. Приложение VR должно отображать определенную 3D-сцену с двух разных точек зрения – по одному для каждого глаза.

До этого момента вышесказанное было возможно, отправив все необходимые команды на нашу графическую карту, чтобы сформировать трехмерное изображение для одной перспективы. Подход такой же для перспективы нашего второго глаза.

Версия 1.1 Vulkan предлагает набор команд рендеринга для формирования нескольких, немного разных выходов (изображений), которые в конечном итоге дают лучшую производительность в приложениях VR.

Развитие и будущее

Было бы упущением, не говоря уже о ходе разработки двух API. С одной стороны, у нас есть ветеран DirectX с более чем 20-летним развитием. С другой стороны, Вулкану едва будет 3 года с 2015 года. Тот факт, что Vulkan является открытым исходным кодом, может немного повлиять на его темпы роста. Конечно игроки Khronos, похоже серьезно относятся к разработке API, так как уровни улучшения впечатляют.

Все мы можем создавать новые инструменты и модификации и предоставлять их сообществу, помогая API расти быстрее. Наконец следует упомянуть, что DirectX не имеет вышеуказанной функции. Несмотря на свои годы развития, около 40 игр в настоящее время используют Vulkan, занимая большую часть рынка. Некоторые из них – Quake, Roblox, Talos и Dota 2. Что касается производительности, Vulkan приближается к DirectX, и в некоторых случаях он превосходит его. Самые захватывающие примеры работы Вулкана – игра Doom.

Vulkan расширил свою поддержку названий AAA, таких как Wolfenstein II, не пренебрегая названиями VR, такими как Doom VFR и Serious Sam VR. Здесь вы можете увидеть подробный список поддерживаемых игр. Хотя здесь вы найдете игры с поддержкой DirectX 12.

Оба API значительно улучшили производительность. Лучшее использование нескольких графических карт и меньшее использование ЦП повысит общую производительность наших систем. По слухам, новые видеокарты от Nvidia будут выпущены к концу лета и значительно превзойдут сегодняшние высокопроизводительные графические карты. В целом, общее состояние вещей кажется довольно гибким. В любом случае, изменения в разработке игр скоро будут у нас, и оба API несомненно будут играть важную роль.

Как вы относитесь к двум API?

Вы уже узнали всю информацию, которую мы предоставили на Vulkan и DirectX? Со временем их соперничество усиливается, какой из двух API вы считаете более полезным для развития игры? Мы с нетерпением ждем ваших комментариев.

Поделитесь статьёй, помогите сайту!

Vulkan API (glNext) от Khronos Group / Хабр

Относительно недавно вышел новый Vulkan API — можно сказать, наследник OpenGL, хотя основан Vulkan на API Mantle от AMD.
Конечно, развитие и поддержка OpenGL не прекратилось, а также в свет вышел и DirectX 12. Что там с DirectX 12 и почему его поставили только на Windows 10 — я, к сожалению (а может и к счастью) не знаю. Но вот кроссплатформенный Vulkan меня заинтересовал. В чём же особенности Vulkan и как правильно его использовать я постараюсь рассказать вам в этой статье.

Итак, для чего нужен Vulkan и где он может быть использован? В играх и приложениях, работающие с графикой? Конечно! Вычислять, как это делает CUDA или OpenCL? Без проблем. Обязательно ли для этого нам нужно окно или дисплей? Конечно нет, вы можете сами указать, куда транслировать ваш результат или не транслировать его вообще. Но обо всём по порядку.

Оформление API и основы

Пожалуй, стоит начать с самого простого. Так как над Vulkan API работали Khronous Group, синтаксис весьма похож на OpenGL. Во всём API есть префикс vk. К примеру функции (порой даже с очень длинными названиями) выглядят так: vkDoSomething(…), имена структур или хэндлов: VkSomething, а все константные выражения (макросы, макровызовы и элементы перечислений): VK_SOMETHING. Также, есть особый вид функций — команды, которым добавляется префикс Cmd: vkCmdJustDoIt(…).

Писать на Vulkan можно как на C, так и на C++. Но второй вариант даст, конечно же, больше удобства. Есть (и будут создаваться) порты на другие языки. Кто-то уже сделал порт на Delphi, кто-то желает (зачем?) порт на Python.

Итак, как же создать рендер контекст? Никак. Здесь его нет. Вместо это придумали другие вещи с другими названиями, которые даже будут напоминать DirectX.

Начало работы и основные понятия

Vulkan разделяет два понятия — это устройство (device) и хост (host). Устройство будет выполнять все команды, отправленные ему, а хост будет их отправлять. Фактически, наше приложение и есть хост — у Vulkan такая терминология.

Для работы с Vulkan нам понадобится хэндлы на его экземпляр (instance), и может быть даже не один, а также на устройство (device), опять же, не всегда может хватать одного.

Vulkan может быть легко загружен динамически. В SDK (разработали LunarG), если был объявлен макрос VK_NO_PROTOTYPES и загружать библиотеку Vulkan своими руками (не линковщиком, а определёнными средствами в коде), то прежде всего нужна будет функция vkGetInstanceProcAddr, с помощью которой можно узнать адреса основных функций Vulkan — те которые работают без экземпляра, включая функцию его создания, и функции, которые работают с экземпляром, включая функцию его разрушения и функцию создания устройства. После создания устройства можно получить функции, которые работают с ним (а также его дочерними хэндлами) через vkGetDeviceProcAddr.

Интересный факт: в Vulkan всегда нужно заполнить определённую структуру данными, чтобы создать какой-либо объект. И всё в Vulkan работает примерно таким образом: заранее подготовил — можно использовать часто и с высокой производительностью. В информацию об экземпляре можно также поместить информацию о вашем приложении, версии движка, версии используемого API и другую информацию.

Слои и расширения

В чистом Vulkan нет сильных проверок входящих данных на правильность. Ему сказали что-то сделать — он сделает. Даже если это приведёт к ошибке приложения, драйвера или видеокарты. Это сделали ради производительности. Тем не менее, можно без проблем подключить проверочные слои, а также расширения к экземпляру и/или устройству, если это необходимо.

Слои (layers)

В основном, предназначение слоёв — проверить входящие данные на ошибки и отслеживать работу Vulkan. Работают они очень просто: допустим, вызываем функцию, и попадает она в самый верхний слой, заданный при создании устройства или экземпляра ранее. Он всё проверяет на правильность, после этого передаёт вызов в следующий. И так будет, пока дело не дойдёт до ядра Vulkan. Конечно же, можно создать собственные слои. Например, Steam выпустила слой SteamOverlay (хотя и не знаю, что он вообще делает). Тем не менее, слои будут молчать, но не доведут до краха приложения. Как узнать, правильно ли всё сделано? Для этого есть специальное расширение!

Расширения (extensions)

Как следует из названия, они расширяют работу Vulkan дополнительным функционалом. Например, одно расширение (debug report) будет выводить ошибки (и не только) со всех слоёв. Для этого нужно будет указать необходимую Callback функцию, а что делать с информацией, поступившей в эту функцию — решать уже вам. Учтите, что это Callback и задержка может вам дорого обойтись, особенно если выводить всю полученную информацию прямиком в консоль. После обработки сообщения, можно указать, передавать ли вызов функции дальше (в следующий слой) или нет — так можно избежать критических ошибок, но постараться работать дальше с менее опасными ошибками.
Есть также и другие расширения, о некоторых я расскажу позже в этой статье.

Устройство

Vulkan разделяет понятия физического устройства и логического. Физическим устройством может быть ваша видеокарта (и не одна) или процессор, поддерживающий графику. Логическое устройство создаётся на основе физического: собирается информацию о физических устройствах, выбирается нужное, подготавливается другая необходимая информация и создаётся устройство. Может быть несколько логических устройств на основе одного физического, но вот объединять для единой работы физические устройства (пока?) нельзя.

Итак, что же за информацию мы собираем? Это, конечно же, поддерживаемые форматы, память, возможности и, конечно же, семейства очередей.

Очереди (queue) и семейства очередей (queue family)

Устройство может (или не может) делать следующие 4 вещи: рисовать графику, производить разные вычисления, копировать данные, а также работать с разреженной памятью (sparse memory management). Эти возможности представлены в виде семейств очередей: каждое семейство поддерживает определённые (может быть все сразу) возможности. И если идентичные семейства были разделены, Vulkan всё равно представит их как одно семейство, чтобы мы не так сильно страдали с кодом и выбирали нужное семейство.

После того, как вы выбрали нужное (или нужные) семейства, из них можно получить очереди. Очереди — это место, куда будут поступать команды для устройства (потом устройство их будет брать из очередей и выполнять). Очередей и семейств, кстати, не сильно много. У NVIDIA обычно 1 семейство со всеми возможностями на 16 очередей. После того, как вы закончили с подбором семейств и количеством очередей, можно создавать устройство.

Команды, их исполнение и синхронизация

Все команды для устройства помещаются в специальный контейнер — командный буфер. Т.е. не существует ни одной функции в Vulkan, которая сказала бы устройству сделать что-либо сразу, и при завершении операции вернуть управление приложению. Есть только функции заполнения командного буфера определёнными командами (например, нарисовать что-либо или скопировать изображение). Только после записи командного буфера на хосте мы можем его отправить в очередь, которая, как уже известно, находится в устройстве.

Командный буфер бывает двух видов: первичный и вторичный. Первичный отправляется прямо в очередь. Вторичный же не может быть отправлен — он запускается в первичном. Записываются команды в таком же порядке, в каком были вызваны функции. В очередь они поступают в таком же порядке. А вот исполнятся они могут почти в «хаотичном» порядке. Чтобы не было полного хаоса в приложении разработчики Vulkan предусмотрели средства синхронизации.

Теперь, самое важное: хост не ожидает завершения исполнения команд и командных буферов. По крайней мере до того момента, пока не укажете это явным способом. После отправления командных буферов в очередь управление сразу возвращается приложению.

Есть 4 примитива синхронизации: забор (fence), семафор (semaphore), событие (event) и барьер (barrier).

Забор самый простой метод синхронизации — он позволяет хосту ожидать выполнение определённых вещей. Например, завершения выполнения командного буфера. Но используется забор редко.

Семафор — способ синхронизации внутри устройства. Никак нельзя посмотреть его состояние или подождать его на хосте, нельзя также ждать его внутри командного буфера, но можем указать, какой семафор должен подать сигнал при завершении исполнения всех команд буфера, и какой семафор ждать перед тем, как начать выполнение команд в буфере. Только ждать будет не весь буфер, а его определённая стадия.

Стадии конвейера (pipeline stages) и зависимости исполнения

Как уже было сказано, не обязательно команды в очереди будут исполнятся по порядку. Если быть точнее, то последующие команды не будут ждать завершения предыдущих. Они могут выполнятся параллельно, или исполнение предыдущей команды может завершиться намного позже последующих. И это вполне нормально. Но некоторые команды зависят от исполнения других. Вы можете разделить их на два берега: «до» и «после», и также указать, какие стадии берега «до» должны обязательно выполнится (т.е. команды могут завершиться не полностью или не все), прежде чем начнут выполняться указанные стадии команд берега «после». Например, отрисовка изображения может приостановиться, чтобы сделать определённые вещи, а потом снова продолжить делать рисовать. Также может быть и цепочка зависимостей, но не будем уходить глубоко в леса Сибири Vulkan.

События — элемент «тонкой» настройки. Подать сигнал можно как с хоста, так и с устройства, ждать можно также и на устройстве, и на хосте. Событие определяет зависимость двух сетов команд (до и после) в командном буфере. И для события есть также специальная псевдо-стадия, которая позволяет ждать хост.

Барьер опять может быть использован только в устройстве, а ещё точнее — в командном буфере, объявляя зависимости первого и второго сета команд. Также можно дополнительно указать барьеры памяти, которые бывают трёх видов: глобальный барьер, барьер буфера и барьер изображения. Они не дадут ненароком прочитать данные, которые в данный момент записываются и/или наоборот, в зависимости от указанных параметров.

Конвейеры

Ниже показаны два конвейера Vulkan:

Т.е. в Vulkan есть два конвейера: графический и вычислительный. С помощью графического, мы, конечно же, можем рисовать, а вычислительный… вычислять. Что же ещё? Результаты вычислений могут потом отправится в графический конвейер. Так можно с лёгкостью сэкономить время на системе частиц, например.

Изменить порядок или изменить сами стадии конвейера нельзя. Исключение составляют программируемые стадии (шейдеры). Также можно отправлять разновидные данные в шейдеры (и не только) через дескрипторы.

Для конвейера можно создать кэш, который может быть использован (снова и снова) и в других конвейерах и даже после перезапуска приложения.

Конвейер необходимо настроить и ассоциировать с командным буфером, прежде чем последний будет использовать команды конвейера.

Наследование конвейеров

Так как конвейер, это фактически вся информация о том, как нужно работать с поступающими данными, то смена конвейера (а это информация о шейдерах, дескрипторах, растеризации и прочее) может дорого обойтись по времени. Поэтому разработчики предоставили возможность наследования конвейера. При смене конвейера на дочерний, родительский или между дочерними уйдёт меньше затрат производительности. Но это также и удобство для разработчиков, как например ООП.

Проход отрисовки, графический конвейер и фреймбуфер

Итак, получаем следующую матрёшку:

Для того, чтобы можно было использовать команды отрисовки, нужен графический конвейер. В графическом конвейере необходимо указать проход отрисовки (Render Pass), который содержит информацию о подпроходах (subpass), их зависимостей друг от друга и прикреплениях (attachment). Прикрепление — информация о изображении, которое будет использоваться во framebuffer’ах. Framebuffer создаётся специально для определённого прохода отрисовки. Чтобы начать проход, нужно указать как сам проход (а также, если нужно, подпроход), так и framebuffer. После начала прохода можно рисовать. Можно также переключаться между подпроходами. После того, как рисование завершено, можно завершить проход.

Управление памятью и ресурсы

Память в Vulkan распределяется хостом и только хостом (за исключением swapchain). Если изображение (или другие данные) нужно поместить в устройство — выделяется память. Сначала создаётся ресурс определённых размеров, затем запрашивается его требования к памяти, выделяется для него память, затем ресурс ассоциируется с участком этой памяти и только потом можно копировать в этот ресурс необходимые данные. Также, есть память, которая может быть непосредственно изменена с хоста (host visible), есть локальная память устройства (память видеокарты, например) ну и также другие виды памяти, по своему влияющие на скорость доступа к ним.

В Vulkan можно также написать своё распределение памяти хоста, настроив Callback функции. Но учтите, что требования к памяти, это не только её размер, но и выравнивание (alignment).

Сами ресурсы бывают двух видов: буферы (buffers) и изображения (images). И те и другие разделяются по назначению, но если буфер — просто коллекция различных данных (вершинный, индексный или буфер констант), то изображение всегда имеет свой формат.

Наставление тем, кто пишет на Vulkan

Выделяйте участок памяти, в который можете поместить сразу несколько ресурсов. Количество выделений ограничено, и вам может не хватить. Зато количество ассоциаций не ограничено.

Шейдеры

Vulkan поддерживает 6 видов шейдеров: вершинный, контроль тесселяции, анализ тесселяции, геометрический, фрагментный (он же пиксельный) и вычислительный. Написать их можно на читаемом SPIR-V, а потом собрать в байт код, который в приложении мы запечатаем в модуль, т.е. создадим shader-модуль из этого кода. Конечно же, мы можем написать его на привычном GLSL и потом конвертировать в SPIR-V (транслятор уже есть). И, конечно же, вы можете написать свой транслятор и даже ассемблер — исходники и спецификации выложены в OpenSource, ничто не мешает написать вам сборщик для своего High Level SPIR-V. А может кто-то уже написал.
Байт код потом транслируется в команды, специфичные для каждой видеокарты, но делается это намного быстрее, чем из сырого GLSL кода. Подобная практика применяется и в DirectX — HLSL сначала преобразуются в байт код, и этот байт код может быть сохранён и потом использован, чтобы не компилировать шейдеры снова и снова.

Окна и дисплеи

А закончит эту статью рассказ о WSI (Window System Integration) и цепочке переключений (swapchain). Для того, чтобы выводить что-либо в окно или на экран — нужны специальные расширения.

Для окон это базовое расширение плоскости и расширение плоскости, специфичной для каждой из систем (win32, xlib, xcb, android, mir, wayland). Для дисплея (т.е. FullScreen) нужно расширение display, но в целом и то и другое используют расширение swapchain.

Цепочка переключений не связана с графическим конвейером, поэтому простой Clear Screen выходит без настройки всего этого. Всё достаточно просто. Есть определённый движок показа (presentation engine), в котором есть очередь изображений. Одно изображение показывается на экран, другие дожидаются своей очереди. Количество изображений мы также можем указать. Есть также несколько режимов, которые позволят дождаться сигнала вертикальной синхронизации.

Метод работы примерно таков: мы запрашиваем индекс свободного изображения, вызываем командный буфер, который скопирует результат из Framebuffer в это изображение, и отправляем команду о отправки изображения в очередь. Звучит легко, но с учётом того, что потребуется синхронизация — всё чуточку сложнее, так как единственное, чего ожидает хост — это индекс изображения, которое вскоре будет доступно. Командный буфер ждёт сигнала семафора, который будет свидетельствовать о доступности изображения, и потом сам подать сигнал через семафор о том, что выполнение буфера, в следствии и копирование, завершено. И изображение действительно поступит в очередь по сигналу последнего семафора. Всего два семафора: о доступности изображения для копирования и о доступности изображения для показа (т.е. о завершении копирования).

Кстати говоря, я проверил, что один и тот же командный буфер действительно отправлялся в очередь несколько раз. Можете подумать сами, что это значит.

В этой статье я попытался рассказать о наиболее важных частях Vulkan API, но многое всё ещё не рассказано и это вы можете узнать сами. Стабильного вам FPS и приятного кодинга.

Vulkan (API) — Википедия

Материал из Википедии — свободной энциклопедии

Vulkan — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015[2][3].

Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan[4]. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги на всех платформах, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12, Metal[5] и Mantle. Vulkan основан на технологиях AMD в Mantle[6][7][8][9][10].

Обзор

Целью Vulkan было превзойти другие API, включая его предшественника OpenGL, в части снижения накладных расходов, повышения степени прямого контроля над GPU и уменьшения нагрузки на CPU. Vulkan имеет предполагаемые преимущества:

  • OpenGL использует язык высокого уровня для написания шейдеров GLSL. Это вынуждает каждого производителя OpenGL драйвера реализовать свой собственный компилятор для GLSL, который работает во время выполнения графического приложения, компилируя шейдерные программы в исполняемый код целевой платформы. Vulkan вместо этого предлагает промежуточный двоичный формат SPIR-V (Standard Portable Intermediate Representation), аналогичный двоичному формату в который компилируются HLSL-шейдеры на платформе DirectX. Это снимает бремя с поставщиков драйверов, позволяя компилировать шейдеры на этапе разработки. Также позволяет разработчикам приложений писать шейдеры на других языках, кроме GLSL.
  • Кроссплатформенный API поддерживается на мобильных устройствах и высокопроизводительных видеокартах.
  • Улучшенная поддержка современных систем, использующих многопоточность.
  • Снижение нагрузки на центральный процессор в ситуациях, когда он является недостаточно производительным, что позволяет достичь более высокой пропускной способности для GPU-вычислений и визуализации.

Для упрощения разработки приложений на Vulkan в 2018 году AMD выпустила вспомогательную оболочку V-EZ, которая берёт на себя многие вспомогательные функции при разработке, так что разработчику необязательно сразу разбираться со всеми тонкостями работы Vulkan API[11][12].

История

Летом 2014 года Khronos Group начала проект по созданию следующего поколения графического API. В 2014 году на SIGGRAPH проект был публично анонсирован с призывом к участию.

Согласно ведомству США по патентам и товарным знакам, фирменный знак «Vulkan» был зарегистрирован 19 февраля 2015 года[13].

Vulkan был официально назван и анонсирован на Game Developers Conference 2015, хотя спекуляции и слухи вокруг нового API существовали заранее. Один из вариантов названий был «glNext»[14].

3 марта 2015 года Valve анонсировала Source 2, игровой движок с поддержкой графического API Vulkan[15][16].

В начале 2015 года LunarG (финансируется Valve) разработан и представлен драйвер Linux для Intel, который позволил Vulkan иметь совместимость с интегрированной графической системой HD 4000 серии, которая, несмотря на открытый драйвер Mesa, не полностью совместима с OpenGL 4.0[17][18]. Существует ещё возможность[19] поддержки Ivy Bridge, так как он поддерживает Direct3D 11.

10 августа 2015 года Google объявила о будущей версии Android с поддержкой Vulkan[20].

18 декабря 2015 года Khronos Group объявила о том, что спецификация версии Vulkan 1.0 практически завершена и будет выпущена, когда будут доступны совместимые драйверы.

16 февраля 2016 года выпущена публичная спецификация версии Vulkan 1.0[21] и экспериментальные драйверы для видеокарт AMD и Nvidia.

26 февраля 2018 года Kronos в рамках спецификации The Vulkan® Portability Initiative выпустили общедоступную версию Vulkan 1.0 SDK для работы на платформах MacOS и iOS[22].

7 марта 2018 года выпущена публичная спецификация версии Vulkan 1.1[23].

Использование Vulkan

Игры

  • The Talos Principle — первая игра от хорватской компании Croteam, использующая данную технологию на практике.[24]
  • Dota 2 — 23 марта 2016 года была добавлена экспериментальная поддержка Vulkan и попала в релиз в мае 2016.[25]
  • Doom — 11 июля 2016 года Id Software выпустили патч для игры Doom (2016), в котором отрисовка графики и расчёт физических взаимодействий были переделаны с OpenGL на Vulkan.[26][27][28]
  • vkQuake — порт игры Quake на Vulkan выпущен в июле 2016.[29][30]
  • Need for Speed: No Limits, Vainglory и Heroes of Incredible Tales — в июне 2016 года Samsung объявила о поддержке портирования игр с OpenGL ES на Vulkan для смартфона Samsung Galaxy S7.[31]
  • Mad Max (игра, 2015) — 30 марта 2017 года в бета-тест вышла версия игры для Linux, использующая Vulkan.
  • Olympus Rising — Поддержка добавлена 20 августа 2016.
  • Rust — Поддержка добавлена 13 января 2017.
  • Destinations — Поддержка добавлена 22 февраля 2017.
  • Wolfenstein II: The New Colossus — Поддержка добавлена 27 октября 2017.[32]
  • Побег из Таркова — объявлена поддержка Vulkan.[33]
  • X4 Foundations — объявлена поддержка Vulkan.[34]
  • Star Citizen — объявлена поддержка Vulkan.[35]

Игровые движки

  • Source 2 — В марте 2015, Valve Corporation анонсировала Source 2, который получил поддержку Vulkan.
  • Serious Engine 4 — В феврале 2016, Croteam объявила о поддержке Vulkan в Serious Engine.
  • Unreal Engine 4 — В феврале 2016, Epic Games анонсировала Unreal Engine 4 с поддержкой Vulkan.
  • Torque 3D[en] — В апреле 2016, разработчики объявили что добавили поддержку Vulkan.
  • Quake Engine — В июне 2016 была добавлена поддержка Vulkan.
  • id Tech 3 — В мае 2017 была добавлена поддержка Vulkan.
  • id Tech 4 — В августе 2017 была добавлена поддержка Vulkan.
  • id Tech 6 — В мае 2016 id Software объявили что Doom на движке id Tech 6 будет поддерживать Vulkan.
  • Xenko[en] — В июле 2016, была добавлена поддержка Vulkan.
  • Unity — Поддержка Vulkan появилась в версии 5.6.
  • CryEngine — Поддержка Vulkan появилась в версии 5.4.
  • Intrinsic — бесплатный кросс-платформенный игровой движок с открытым исходным кодом, который поддерживает Vulkan.
  • Unigine — В апреле 2017, Unigine Corp анонсировала поддержку Vulkan для своего движка Unigine.
  • Abyss Engine — В мае 2017, Manticore выпустила Galaxy on Fire 3 на Android с поддержкой Vulkan.
  • Banshee 3D — бесплатный кросс-платформенный игровой движок с открытым исходным кодом, который поддерживает Vulkan.
  • Godot Engine — Планируется в версии 3.2

Совместимость

Начальная спецификация утверждает, что Vulkan будет работать на оборудовании, которое в настоящее время поддерживает OpenGL ES 3.1 или OpenGL 4.x и выше[36]. В качестве поддержки Vulkan потребует новых графических драйверов, но это не обязательно означает, что все существующие устройства, которые поддерживают OpenGL ES 3.1 или OpenGL 4.X будут иметь доступные драйверы с поддержкой Vulkan.

См. также

Примечания

Литература

Api vulkan как включить — Вэб-шпаргалка для интернет предпринимателей!

Большинство из нас, геймеров, слышали о Microsoft DirectX. Однако, немногие из нас знакомы с его утилитами и как они влияют на видеоигры. В настоящее время, фактически, приобретя конкурента в форме Vulkan, вещи относящиеся к двум API, как правило, становятся еще более сложными. В этом руководстве мы увидим, что такое API, Vulkan и DirectX, и мы покажим метод, с помощью которого они влияют на наши игры.

Предварительная информация о API

Прежде чем мы начнем говорить о DirectX и Vulkan, нам нужно сначала понять, что такое API. Аббревиатура означает «Интерфейс прикладного программирования».

Интерфейс предназначен для обеспечения связи между двумя объектами. Одним из примеров является графический интерфейс Windows, который играет роль посредника между операционной системой и пользователем.

Интерфейс обеспечивает удобную среду. С помощью этой среды мы используем операционную систему, не зная, как ее функции реализованы в фоновом режиме. Интерфейс прикладного программирования (API) заполняет роль посредника. Однако на этот раз пользователь может быть ПК или другой программой и не обязательно человеком. API-интерфейсы гораздо более распространены, чем можно было бы подумать, предлагая программистам необходимые инструменты для создания своего программного обеспечения.

Ориентировочный пример, в котором мы используем API, – это когда мы автоматически регистрируемся в новом социальном средстве или онлайн-сервисе, используя наши ранее существующие учетные записи из Facebook или Google (вместо создания новой учетной записи вручную).

В таких случаях веб-сайт использует API, через который он связывается с конкретной услугой (например, Facebook или Twitter), чтобы собирать нашу личную информацию (имя (имена), адрес электронной почты, контактные номера и т. д.) Для создания нашего нового аккаунта.

Тем не менее существует множество других применений API для всех видов взаимодействия между приложениями и компьютерами, такими как системы баз данных, операционные системы и библиотеки программного обеспечения.

В таких случаях использование API-интерфейсов применимо к нашему компьютерному оборудованию и в частности, к нашей графической карте (видеокартам).

DirectX и Vulkan фактически улучшают связь между приложением (игрой) и графическим процессором, чтобы повысить производительность графики.

Microsoft DirectX

С выпуском Windows 95 и модели защищенной памяти разработчики не имели такого же доступа к ресурсам, как в MS-DOS. DirectX впервые появился в виде набора конкретных API для разработки мультимедийных приложений, таких как игры.

Термин «DirectX» начинается со слова «Direct», ссылаясь на прямой доступ к ресурсам системы. Некоторые примеры включают Direct3D для графики и DirectSound для аудио. Часть «Х» относится к API в общей коллекции; таким образом объединив все API-интерфейсы под названием DirectX. Вышеупомянутое название также вдохновило название популярной видеоигр компании Xbox.

Вышеприведенное иллюстрирует тесную связь между DirectX и консолью Microsoft. Его последняя версия, DirectX 12, имеет большие улучшения. Тем не менее он поддерживается только Windows 10 и новейшей игровой консолью компании Xbox One.

Direct3D является жемчужиной DirectX и полезен для создания 3D-объектов на нашем экране. Он также позволяет просматривать игры в полноэкранном режиме, а также использовать аппаратные ускорители. Последний метод позволяет реализовать некоторые функции более эффективно, чем они работают в программном обеспечении. Это может быть достигнуто за счет более эффективного использования аппаратного обеспечения нашего компьютера. В этом случае это будет наша видеокарта.

Вулкан AMD

В 2015 году Kronos Group разработала свой собственный API. Vulkan – это низкоуровневый API, используемый для разработки графически требующих приложений. Его первая стабильная версия дебютировала в августе 2016 года.

Следует четко указать, что «низкий уровень» не относится к качеству. Вместо этого этот термин описывает способность Вулкана работать на аппаратном уровне.

Хронос окружает себя одними из самых больших имен в ИТ-индустрии. Некоторые из них – Google, Intel, Sony, Nvidia и AMD. Последние два дали API, свести к минимуму время разработки Vulkan.

OpenGL – популярный API среди графических дизайнеров. Фактически он был разработан Хроносом, и он также включает в себя многие характеристики Вулкана. Однако его прием игровыми дизайнерами был непредвиденным.

Одним из самых сильных активов Vulkan является тот факт, что он с открытым исходным кодом. Кроме того, совместимость Vulkan с несколькими платформами вместе с общей производительностью – это два дополнительных актива, которые делают его более прибыльным, чем DirectX.

Здесь вы можете найти полный список с именами, которые содержат Khronos. Мантия обеспечила основную базу, на которой был разработан Вулкан. Наконец Vulkan в настоящее время находится в версии 1.1.

Как они влияют на игры

До этого момента мы рассмотрели некоторые основы, касающиеся API, Microsoft и Khronos. Но как они влияют на игры?

Эти два API значительно улучшили производительность. До сих пор DirectX, по-видимому, обеспечивал лучшую производительность, чем Vulcan, что на самом деле он не так далеко позади.

Microsoft утверждает, что DirectX 12 снижает потребление на 50% при использовании DirectX 11. С другой стороны, Vulkan также демонстрирует лучшую гибкость, чем его предшественник. Говоря о предшественниках, DirectX 11 и OpenGL были созданы с учетом одноядерных процессоров; что означает, что они не были точно настроены с использованием новых, многоядерных процессоров.

В результате одно ядро ​​управляет большинством различных процессов, в то время как остальные работают с низкой скоростью, а иногда и вовсе отключены. Оба API (DirectX 12 и Vulkan) поддерживают процессоры с несколькими ядрами и потоками, чтобы максимально эффективно использовать свои возможности. Более того, они передают большую часть требуемых задач от процессора к графической карте (видеокартам), предлагая более сбалансированный опыт.

Взаимодействие между этими двумя элементами может существенно повлиять на будущие сборки ПК. Графические карты в значительной степени важнее, чем процессоры, когда дело доходит до игр. С дальнейшим развитием игровых API маловероятно, что процессоры могут стать еще менее важными, когда дело доходит до него. Таким образом, даже с простым процессором мы можем получить хорошую производительность без каких-либо узких мест.

Поддержка нескольких графических карт

Здесь Khronos Group столкнулась со значительным разрывом между двумя API-интерфейсами с поддержкой использования нескольких графических карт (использование явного многоканального GPU). Мы можем использовать разные карты, если их чипы имеют аналогичную архитектуру и используют один и тот же драйвер. Это позволит различным картам обрабатывать другую часть экрана.

Microsoft здесь еще на один шаг впереди, позволяя использовать несколько графических карт даже у другого производителя, что часто бывает, поскольку большинство систем имеют независимый и интегрированный графический процессор. Важно подчеркнуть тот факт, что эти реализации отличаются от возможностей SLI и Crossfire от Nvidia и AMD, которые реализованы с помощью драйверов, и в частности, в случае SLI требуют идентичные графические карты.

Шейдеры

Шейдеры – это небольшие программы, которые запускаются на наших видеокартах. Они отвечают за определенные функции различных объектов в 3D-среде. Тени, туман и освещение в игре являются результатом шейдера.

Vulkan использует промежуточное представление для шейдеров под названием SPIR-V. Его двоичная форма похожа на байт-код DirectX DX.

SPIR-V версия 1.3 отличается SPIR-V opt, инструментом для уменьшения размера шейдеров. Максимальный размер достигает + 40% от байт-кода DX соответствующего представления для DirectX.

Кроме того, некоторые структуры в HLSL (высокоуровневый шейдерный язык), которые были разработаны Microsoft, не поддерживались непосредственно некоторыми видеокартами.

HLSL широко используется DirectX с версии 9. Он использовался в качестве дополнения к существующему языку ассемблера шейдеров. С новой версией SPIR-V Vulkan также поддерживает ее.

Таким образом, разработчики смогут использовать существующий код для своих шейдеров, и им не нужно будет изобретать колесо. Следовательно, игры будут легко перенесены с одной платформы на другую.

Совместимость с несколькими платформами

Что касается платформ, большое преимущество Vulkan заключается в том, что он поддерживает Windows, Linux, Mac OS, Android и iOS. DirectX 12 с другой стороны, поддерживается только в Windows 10 и Xbox One. Чтобы использовать усовершенствования, предлагаемые DirectX 12, нам нужно либо обновить нашу операционную систему до Windows 10, либо получить новую консоль компании.

Если вы хотите попробовать DirectX 12, и вам не удалось получить Windows 10 во время бесплатного обновления, ознакомьтесь с нашим пошаговым руководством по свободным методам модернизации, которые доступны:

Возвращаясь к предыдущей теме, игровой порт, поддерживаемый API Vulkan, будет значительно проще по сравнению с портом, поддерживаемым DirectX.

С одной стороны, мы можем иметь названия на нескольких платформах, а с другой разные операционные системы имеют возможность размещать наши игры. Одна из причин, почему Linux не так популярен, как Windows, связана с тем, что последняя отличается от игр.

Распределение Linux может быть лучшим выбором для размещения наших игр, поскольку он может быть скорректирован для этой цели. Например Steam OS – это специализированная операционная система, предназначенная исключительно для игр.

Также подумайте: компания думает о создании программного обеспечения для разработки игр и хочет поддерживать API. Кто бы вы выбрали?

Оба имеют схожие мощности оба лучшие, чем их предшественники, и оба обеспечивают явное использование видеокарт. Vulkan поддерживает все платформы, включая Windows 10 и Xbox One, в то время как DirectX поддерживает только последние две.

Виртуальная реальность

Необходимо сказать, что Vulkan является примером больших улучшений в области виртуальной реальности. Приложение VR должно отображать определенную 3D-сцену с двух разных точек зрения – по одному для каждого глаза.

До этого момента вышесказанное было возможно, отправив все необходимые команды на нашу графическую карту, чтобы сформировать трехмерное изображение для одной перспективы. Подход такой же для перспективы нашего второго глаза.

Версия 1.1 Vulkan предлагает набор команд рендеринга для формирования нескольких, немного разных выходов (изображений), которые в конечном итоге дают лучшую производительность в приложениях VR.

Развитие и будущее

Было бы упущением, не говоря уже о ходе разработки двух API. С одной стороны, у нас есть ветеран DirectX с более чем 20-летним развитием. С другой стороны, Вулкану едва будет 3 года с 2015 года. Тот факт, что Vulkan является открытым исходным кодом, может немного повлиять на его темпы роста. Конечно игроки Khronos, похоже серьезно относятся к разработке API, так как уровни улучшения впечатляют.

Все мы можем создавать новые инструменты и модификации и предоставлять их сообществу, помогая API расти быстрее. Наконец следует упомянуть, что DirectX не имеет вышеуказанной функции. Несмотря на свои годы развития, около 40 игр в настоящее время используют Vulkan, занимая большую часть рынка. Некоторые из них – Quake, Roblox, Talos и Dota 2. Что касается производительности, Vulkan приближается к DirectX, и в некоторых случаях он превосходит его. Самые захватывающие примеры работы Вулкана – игра Doom.

Vulkan расширил свою поддержку названий AAA, таких как Wolfenstein II, не пренебрегая названиями VR, такими как Doom VFR и Serious Sam VR. Здесь вы можете увидеть подробный список поддерживаемых игр. Хотя здесь вы найдете игры с поддержкой DirectX 12.

Оба API значительно улучшили производительность. Лучшее использование нескольких графических карт и меньшее использование ЦП повысит общую производительность наших систем. По слухам, новые видеокарты от Nvidia будут выпущены к концу лета и значительно превзойдут сегодняшние высокопроизводительные графические карты. В целом, общее состояние вещей кажется довольно гибким. В любом случае, изменения в разработке игр скоро будут у нас, и оба API несомненно будут играть важную роль.

Как вы относитесь к двум API?

Вы уже узнали всю информацию, которую мы предоставили на Vulkan и DirectX? Со временем их соперничество усиливается, какой из двух API вы считаете более полезным для развития игры? Мы с нетерпением ждем ваших комментариев.

7,466уникальных посетителей
76добавили в избранное

Если вы столкнулись с проблемой низкого FPS в DOOM и вам хочется ее исправить, то вы пришли как раз по адресу.
Магическая штука Vulkan API поднимает FPS в среднем на 15-25 кадров (зависит от конфигурации вашего компа), превращая некомфортные 20-30 FPS в совершенно играбельные 50-60.

ВНИМАНИЕ! ПРЕЖДЕ ЧЕМ ВЫПОЛНЯТЬ ДЕЙСТВИЯ, ОПИСАННЫЕ В РУКОВОДСТВЕ, НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО ВАШ КОМПЬЮТЕР СООТВЕТСТВУЕТ ХОТЯ БЫ МИНИМАЛЬНЫМ СИСТЕМНЫМ ТРЕБОВАНИЯМ!

Что это вообще за зверь и как ему удается так ощутимо повысить производительность?

Vulkan API — графический интерфес программирования, созданный для отображения 3D и 2D графики на ваших мониторчиках. Проще говоря, эта шняга использует ресурсы вашего компа для построения графики в играх. OpenGL и DirectX из той же оперы.

Почему он дает такой прирост к FPS? Я, конечно, могу начать вам рассказывать о супер-пупер технологиях, использующихся в нем, но для простоты просто скажу, что он использует компьютерное железно намного эффективнее, чем его предшественник OpenGL.

Все очень просто, начнем с первого шага:

Обновите драйвера вашей видеокарты до последней возможной версии. Если не знаете, как это сделать — спросите у Гугла [google.gik-team.com] , потому что инструкции по их обновлению довольно длинные, да и руководство совсем не про это.

Запускаем сам DOOM. Заходим в Параметры>Расширенные и в пункте «Графический API» выбираем «Vulkan API» вместо «OpenGL». Перезапускаем игру.

Заходим в игру и радуемся повышению производительности!

Вы не обновили драйвера, либо скачали не ту их версию. Перекачиваем более новую/стабильную версию.

Ваша видеокарта не может в Vulkan API. Такое тоже может случиться, но вероятность довольно мала. Если видеокарта подходит под минимальные требования — она точно может работать с Vulkan API. Если нет — откатываем игру к настройкам по умолчанию и мучаемся с OpenGL’ом

Если игра после перехода на Vulkan отказывается запускаться — вот способ перехода обратно на OpenGL:
Первым делом нужно зайти в папку сохранений, она находится по этому пути:
C:Users Saved Gamesid SoftwareDOOMase
Далее находим в ней файл DOOMConfig.local и открываем его блокнотом.
Ищем параметр r_renderapi и меняем в его значении 1 на (1 — VulkanAPI, 0 — OpenGL)
Сохраняем файл и закрываем его. Теперь игра должна запуститься.

Огромное спасибо пользователю arikuto за найденную инструкцию!

Не забудьте оценить руководство или оставить свою критику/пожелания!

Относительно недавно вышел новый Vulkan API — можно сказать, наследник OpenGL, хотя основан Vulkan на API Mantle от AMD.
Конечно, развитие и поддержка OpenGL не прекратилось, а также в свет вышел и DirectX 12. Что там с DirectX 12 и почему его поставили только на Windows 10 — я, к сожалению (а может и к счастью) не знаю. Но вот кроссплатформенный Vulkan меня заинтересовал. В чём же особенности Vulkan и как правильно его использовать я постараюсь рассказать вам в этой статье.

Итак, для чего нужен Vulkan и где он может быть использован? В играх и приложениях, работающие с графикой? Конечно! Вычислять, как это делает CUDA или OpenCL? Без проблем. Обязательно ли для этого нам нужно окно или дисплей? Конечно нет, вы можете сами указать, куда транслировать ваш результат или не транслировать его вообще. Но обо всём по порядку.

Оформление API и основы

Пожалуй, стоит начать с самого простого. Так как над Vulkan API работали Khronous Group, синтаксис весьма похож на OpenGL. Во всём API есть префикс vk. К примеру функции (порой даже с очень длинными названиями) выглядят так: vkDoSomething(. ), имена структур или хэндлов: VkSomething, а все константные выражения (макросы, макровызовы и элементы перечислений): VK_SOMETHING. Также, есть особый вид функций — команды, которым добавляется префикс Cmd: vkCmdJustDoIt(. ).

Писать на Vulkan можно как на C, так и на C++. Но второй вариант даст, конечно же, больше удобства. Есть (и будут создаваться) порты на другие языки. Кто-то уже сделал порт на Delphi, кто-то желает (зачем?) порт на Python.

Итак, как же создать рендер контекст? Никак. Здесь его нет. Вместо это придумали другие вещи с другими названиями, которые даже будут напоминать DirectX.

Начало работы и основные понятия

Vulkan разделяет два понятия — это устройство (device) и хост (host). Устройство будет выполнять все команды, отправленные ему, а хост будет их отправлять. Фактически, наше приложение и есть хост — у Vulkan такая терминология.

Для работы с Vulkan нам понадобится хэндлы на его экземпляр (instance), и может быть даже не один, а также на устройство (device), опять же, не всегда может хватать одного.

Vulkan может быть легко загружен динамически. В SDK (разработали LunarG), если был объявлен макрос VK_NO_PROTOTYPES и загружать библиотеку Vulkan своими руками (не линковщиком, а определёнными средствами в коде), то прежде всего нужна будет функция vkGetInstanceProcAddr, с помощью которой можно узнать адреса основных функций Vulkan — те которые работают без экземпляра, включая функцию его создания, и функции, которые работают с экземпляром, включая функцию его разрушения и функцию создания устройства. После создания устройства можно получить функции, которые работают с ним (а также его дочерними хэндлами) через vkGetDeviceProcAddr.

Интересный факт: в Vulkan всегда нужно заполнить определённую структуру данными, чтобы создать какой-либо объект. И всё в Vulkan работает примерно таким образом: заранее подготовил — можно использовать часто и с высокой производительностью. В информацию об экземпляре можно также поместить информацию о вашем приложении, версии движка, версии используемого API и другую информацию.

Слои и расширения

В чистом Vulkan нет сильных проверок входящих данных на правильность. Ему сказали что-то сделать — он сделает. Даже если это приведёт к ошибке приложения, драйвера или видеокарты. Это сделали ради производительности. Тем не менее, можно без проблем подключить проверочные слои, а также расширения к экземпляру и/или устройству, если это необходимо.

Слои (layers)

В основном, предназначение слоёв — проверить входящие данные на ошибки и отслеживать работу Vulkan. Работают они очень просто: допустим, вызываем функцию, и попадает она в самый верхний слой, заданный при создании устройства или экземпляра ранее. Он всё проверяет на правильность, после этого передаёт вызов в следующий. И так будет, пока дело не дойдёт до ядра Vulkan. Конечно же, можно создать собственные слои. Например, Steam выпустила слой SteamOverlay (хотя и не знаю, что он вообще делает). Тем не менее, слои будут молчать, но не доведут до краха приложения. Как узнать, правильно ли всё сделано? Для этого есть специальное расширение!

Расширения (extensions)

Как следует из названия, они расширяют работу Vulkan дополнительным функционалом. Например, одно расширение (debug report) будет выводить ошибки (и не только) со всех слоёв. Для этого нужно будет указать необходимую Callback функцию, а что делать с информацией, поступившей в эту функцию — решать уже вам. Учтите, что это Callback и задержка может вам дорого обойтись, особенно если выводить всю полученную информацию прямиком в консоль. После обработки сообщения, можно указать, передавать ли вызов функции дальше (в следующий слой) или нет — так можно избежать критических ошибок, но постараться работать дальше с менее опасными ошибками.
Есть также и другие расширения, о некоторых я расскажу позже в этой статье.

Устройство

Vulkan разделяет понятия физического устройства и логического. Физическим устройством может быть ваша видеокарта (и не одна) или процессор, поддерживающий графику. Логическое устройство создаётся на основе физического: собирается информацию о физических устройствах, выбирается нужное, подготавливается другая необходимая информация и создаётся устройство. Может быть несколько логических устройств на основе одного физического, но вот объединять для единой работы физические устройства (пока?) нельзя.

Итак, что же за информацию мы собираем? Это, конечно же, поддерживаемые форматы, память, возможности и, конечно же, семейства очередей.

Очереди (queue) и семейства очередей (queue family)

Устройство может (или не может) делать следующие 4 вещи: рисовать графику, производить разные вычисления, копировать данные, а также работать с разреженной памятью (sparse memory management). Эти возможности представлены в виде семейств очередей: каждое семейство поддерживает определённые (может быть все сразу) возможности. И если идентичные семейства были разделены, Vulkan всё равно представит их как одно семейство, чтобы мы не так сильно страдали с кодом и выбирали нужное семейство.

После того, как вы выбрали нужное (или нужные) семейства, из них можно получить очереди. Очереди — это место, куда будут поступать команды для устройства (потом устройство их будет брать из очередей и выполнять). Очередей и семейств, кстати, не сильно много. У NVIDIA обычно 1 семейство со всеми возможностями на 16 очередей. После того, как вы закончили с подбором семейств и количеством очередей, можно создавать устройство.

Команды, их исполнение и синхронизация

Все команды для устройства помещаются в специальный контейнер — командный буфер. Т.е. не существует ни одной функции в Vulkan, которая сказала бы устройству сделать что-либо сразу, и при завершении операции вернуть управление приложению. Есть только функции заполнения командного буфера определёнными командами (например, нарисовать что-либо или скопировать изображение). Только после записи командного буфера на хосте мы можем его отправить в очередь, которая, как уже известно, находится в устройстве.

Командный буфер бывает двух видов: первичный и вторичный. Первичный отправляется прямо в очередь. Вторичный же не может быть отправлен — он запускается в первичном. Записываются команды в таком же порядке, в каком были вызваны функции. В очередь они поступают в таком же порядке. А вот исполнятся они могут почти в «хаотичном» порядке. Чтобы не было полного хаоса в приложении разработчики Vulkan предусмотрели средства синхронизации.

Теперь, самое важное: хост не ожидает завершения исполнения команд и командных буферов. По крайней мере до того момента, пока не укажете это явным способом. После отправления командных буферов в очередь управление сразу возвращается приложению.

Есть 4 примитива синхронизации: забор (fence), семафор (semaphore), событие (event) и барьер (barrier).

Забор самый простой метод синхронизации — он позволяет хосту ожидать выполнение определённых вещей. Например, завершения выполнения командного буфера. Но используется забор редко.

Семафор — способ синхронизации внутри устройства. Никак нельзя посмотреть его состояние или подождать его на хосте, нельзя также ждать его внутри командного буфера, но можем указать, какой семафор должен подать сигнал при завершении исполнения всех команд буфера, и какой семафор ждать перед тем, как начать выполнение команд в буфере. Только ждать будет не весь буфер, а его определённая стадия.

События — элемент «тонкой» настройки. Подать сигнал можно как с хоста, так и с устройства, ждать можно также и на устройстве, и на хосте. Событие определяет зависимость двух сетов команд (до и после) в командном буфере. И для события есть также специальная псевдо-стадия, которая позволяет ждать хост.

Барьер опять может быть использован только в устройстве, а ещё точнее — в командном буфере, объявляя зависимости первого и второго сета команд. Также можно дополнительно указать барьеры памяти, которые бывают трёх видов: глобальный барьер, барьер буфера и барьер изображения. Они не дадут ненароком прочитать данные, которые в данный момент записываются и/или наоборот, в зависимости от указанных параметров.

Конвейеры

Ниже показаны два конвейера Vulkan:

Т.е. в Vulkan есть два конвейера: графический и вычислительный. С помощью графического, мы, конечно же, можем рисовать, а вычислительный… вычислять. Что же ещё? Результаты вычислений могут потом отправится в графический конвейер. Так можно с лёгкостью сэкономить время на системе частиц, например.

Изменить порядок или изменить сами стадии конвейера нельзя. Исключение составляют программируемые стадии (шейдеры). Также можно отправлять разновидные данные в шейдеры (и не только) через дескрипторы.

Для конвейера можно создать кэш, который может быть использован (снова и снова) и в других конвейерах и даже после перезапуска приложения.

Конвейер необходимо настроить и ассоциировать с командным буфером, прежде чем последний будет использовать команды конвейера.

Проход отрисовки, графический конвейер и фреймбуфер

Итак, получаем следующую матрёшку:

Для того, чтобы можно было использовать команды отрисовки, нужен графический конвейер. В графическом конвейере необходимо указать проход отрисовки (Render Pass), который содержит информацию о подпроходах (subpass), их зависимостей друг от друга и прикреплениях (attachment). Прикрепление — информация о изображении, которое будет использоваться во framebuffer’ах. Framebuffer создаётся специально для определённого прохода отрисовки. Чтобы начать проход, нужно указать как сам проход (а также, если нужно, подпроход), так и framebuffer. После начала прохода можно рисовать. Можно также переключаться между подпроходами. После того, как рисование завершено, можно завершить проход.

Управление памятью и ресурсы

Память в Vulkan распределяется хостом и только хостом (за исключением swapchain). Если изображение (или другие данные) нужно поместить в устройство — выделяется память. Сначала создаётся ресурс определённых размеров, затем запрашивается его требования к памяти, выделяется для него память, затем ресурс ассоциируется с участком этой памяти и только потом можно копировать в этот ресурс необходимые данные. Также, есть память, которая может быть непосредственно изменена с хоста (host visible), есть локальная память устройства (память видеокарты, например) ну и также другие виды памяти, по своему влияющие на скорость доступа к ним.

В Vulkan можно также написать своё распределение памяти хоста, настроив Callback функции. Но учтите, что требования к памяти, это не только её размер, но и выравнивание (alignment).

Сами ресурсы бывают двух видов: буферы (buffers) и изображения (images). И те и другие разделяются по назначению, но если буфер — просто коллекция различных данных (вершинный, индексный или буфер констант), то изображение всегда имеет свой формат.

Шейдеры

Vulkan поддерживает 6 видов шейдеров: вершинный, контроль тесселяции, анализ тесселяции, геометрический, фрагментный (он же пиксельный) и вычислительный. Написать их можно на читаемом SPIR-V, а потом собрать в байт код, который в приложении мы запечатаем в модуль, т.е. создадим shader-модуль из этого кода. Конечно же, мы можем написать его на привычном GLSL и потом конвертировать в SPIR-V (транслятор уже есть). И, конечно же, вы можете написать свой транслятор и даже ассемблер — исходники и спецификации выложены в OpenSource, ничто не мешает написать вам сборщик для своего High Level SPIR-V. А может кто-то уже написал.
Байт код потом транслируется в команды, специфичные для каждой видеокарты, но делается это намного быстрее, чем из сырого GLSL кода. Подобная практика применяется и в DirectX — HLSL сначала преобразуются в байт код, и этот байт код может быть сохранён и потом использован, чтобы не компилировать шейдеры снова и снова.

Окна и дисплеи

А закончит эту статью рассказ о WSI (Window System Integration) и цепочке переключений (swapchain). Для того, чтобы выводить что-либо в окно или на экран — нужны специальные расширения.

Для окон это базовое расширение плоскости и расширение плоскости, специфичной для каждой из систем (win32, xlib, xcb, android, mir, wayland). Для дисплея (т.е. FullScreen) нужно расширение display, но в целом и то и другое используют расширение swapchain.

Цепочка переключений не связана с графическим конвейером, поэтому простой Clear Screen выходит без настройки всего этого. Всё достаточно просто. Есть определённый движок показа (presentation engine), в котором есть очередь изображений. Одно изображение показывается на экран, другие дожидаются своей очереди. Количество изображений мы также можем указать. Есть также несколько режимов, которые позволят дождаться сигнала вертикальной синхронизации.

Метод работы примерно таков: мы запрашиваем индекс свободного изображения, вызываем командный буфер, который скопирует результат из Framebuffer в это изображение, и отправляем команду о отправки изображения в очередь. Звучит легко, но с учётом того, что потребуется синхронизация — всё чуточку сложнее, так как единственное, чего ожидает хост — это индекс изображения, которое вскоре будет доступно. Командный буфер ждёт сигнала семафора, который будет свидетельствовать о доступности изображения, и потом сам подать сигнал через семафор о том, что выполнение буфера, в следствии и копирование, завершено. И изображение действительно поступит в очередь по сигналу последнего семафора. Всего два семафора: о доступности изображения для копирования и о доступности изображения для показа (т.е. о завершении копирования).

Кстати говоря, я проверил, что один и тот же командный буфер действительно отправлялся в очередь несколько раз. Можете подумать сами, что это значит.

В этой статье я попытался рассказать о наиболее важных частях Vulkan API, но многое всё ещё не рассказано и это вы можете узнать сами. Стабильного вам FPS и приятного кодинга.

Рекомендуем к прочтению

Влияние API Vulkan на FPS в Dota 2

Мы провели небольшой тест на производительность Vulkan в Dota 2, а именно сравнили значения FPS с данным API и без него. Результат окажется ожидаемым для многих, поскольку изменения вышли практически незаметными.

После появления Vulkan в Dota 2 мы конечно же не могли это пройти стороной и решили проверить, есть ли вообще хоть какая-то польза от него. Тесты проводились на разном «железе» и можно заявить, что серьезных изменений от появления данного API попросту нет. Возможно, в дальнейшем все начнет работать лучше, но на данный момент нет особого смысла качать DLC и играть с Vulkan.

Все настройки видео в Dota 2 на максимальных показателях, каждый скриншот кликабелен.

  • Процессор: AMD Phenom II X3 Black Edition 720, 2800 MHz
  • Видеокарта: Gigabyte GTX 950 2 Gb

Разница, все показатели в FPS

#СтандартVulkanРазница
Фонтан5866+8
Ульт6166+5
Река5962+3
High ground6569+4
  • Процессор: Intel® Core™ i7-4790 Processor (8M Cache, up to 4.00 GHz)
  • Видеокарта: GeForce GTX 970

Разница, все показатели в FPS

#СтандартVulkanРазница
Фонтан155148-7
Ульт136111-25
Река140139-1
High ground152154+2
  • Процессор: Intel® Core™ i3-3220 Processor (3M Cache, 3.30 GHz)
  • Видеокарта: GeForce GT 640

Разница, все показатели в FPS

#СтандартVulkanРазница
Фонтан4536-9
Ульт3632-6
Река4230-12
High ground3934-5

Если кто-то еще не знает как установить DLC, то вот инструкция в несколько простых шагов:

  • Нажать ПКМ по Dota 2 в Библиотеке и выбрать пункт «Дополнительный контент»
  • Поставить галочку напротив Dota 2 — Support Vulkan, загрузка начнется сама
  • В параметрах запуска прописать -vulkan
    Image not found
  • Если имеются данные настройки dx9/-dx11/-gl, то их нужно удалить и нажать «Ок»
  • Минимальные требования
    Windows 7/8/10 64-bit: NVIDIA 600+ (365.18+ драйвера), AMD 7700+ (Crimson 16.5.2.1+ драйвера)
    Linux 64-bit: NVIDIA 600+ (364.16+ драйвера), AMD GCN 1.2 (16.20.3 драйвера)
    Память GPU не менее 2 ГБ

Следите за новостями у нас на сайте и в нашей группе Вконтакте!

Состоялся релиз API Vulkan 1.2, улучшающий производительность графических процессоров

©

Khronos Group объявили о выпуске спецификации Vulkan 1.2 для графических процессоров. Новая версия включает 23 проверенных расширения в ядро ​​Vulkan API, предоставляя доступ к новым аппаратным функциям, о которых очень сильно просили разработчики. Также была улучшена производительность приложений и повышение удобства использования API.

Том Олсон, инженер Arm и председатель рабочей группы Vulkan, сказал:

«Vulkan 1.2 объединяет около двух десятков высокоприоритетных функций, разработанных за последние два года, в один унифицированный базовый стандарт Vulkan, устанавливая передовую планку функциональности в единственном в отрасли открытом API графического процессора для кросс-платформенного 3D и ускорения вычислений. Khronos будет продолжать предоставлять регулярные обновления Vulkan с этой проверенной методикой, ориентированной на разработчиков. Мы стремимся как удовлетворить потребности, так и расширить горизонты реальных приложений ».

К концу января 2020 года Khronos и сообщество Vulkan также будут поддерживать Vulkan 1.2 в широком спектре компиляторов, инструментов и отладчиков с открытым исходным кодом. Это включает в себя инструмент захвата и отладки фреймов RenderDoc, набор тестов на соответствие Vulkan и SDK Vulkan с поддержкой уровней проверки «GPU Assisted» и «Best Practices».

Наконец, все графические процессоры, которые поддерживают предыдущие версии Vulkan, способны поддерживать Vulkan 1.2, обеспечивая его широкую доступность. На сегодняшний день пять поставщиков графических процессоров имеют версии Vulkan 1.2, прошедшие тесты на соответствие Khronos. Это AMD, Arm, Imagination Technologies, Intel, NVIDIA, а также драйвер Mesa RADV с открытым исходным кодом для AMD.

об авторе

Пользователь пока ничего не написал о себе.

Вышла первая версия Vulkan API

В разработке 3D-приложений, видеоигр и систем виртуальной реальности наступает новый этап. Совместными усилиями разработчики сделали важный шаг на пути к унификации кода и более эффективному использованию аппаратных ресурсов. Консорциум Khronos Group, насчитывающий более ста компаний, официально представил первую версию открытого кроссплатформенного API под названием Vulkan (ранее – GLNext). Он обеспечивает непосредственный контроль над ГП и ЦП, устраняя «узкие места» и повышая общую производительность.

На форумах часто можно увидеть однотипные вопросы о том, раскроет ли процессор X видеокарту Y и какая конфигурация при одинаковом бюджете будет производительнее в конкретных приложениях. Он возникает из-за того, что современные ГП обладают большей производительностью, чем ЦП того же уровня и поколения. В играх и других 3D-приложениях временами возникают ситуации, когда на ЦП приходится большая нагрузка, а ГП простаивает. Например, процессор обсчитывает взаимодействие игроков и объектов, а видеокарта ждёт от него данные, чтобы отрисовать следующий кадр. Из-за несбалансированности нагрузки возникают задержки, а динамичная игра может превратиться в покадровое слайд-шоу даже с мощной видеокартой.

Указанные проблемы характерны для платформы PC и практически незнакомы владельцами игровых консолей. Разработчики консольных игр всегда знают детальные спецификации приставок и могут выполнять глубокую оптимизацию кода с учётом их особенностей. Компьютеры, ноутбуки, планшеты – это зоопарк не только из разных конфигураций, но и принципиально отличных архитектур. При создании игр для столь разношёрстной платформы приоритетом становится универсальность кода, что негативно сказывается на скорости его исполнения.

Сравнение Vulkan API и OpenGL (изображение: Khronos Group).

Разработчики операционных систем по-разному пытаются решить проблему низкой эффективности кода сторонних приложений. Microsoft начала искать пути оптимизации графических вычислений давно, однако реальная поддержка низкоуровневых операций появилась только в DirectX 12. Этот API доступен лишь в одной ОС – Windows 10. В свою очередь, положение Apple оказалось ближе к таковому у производителей игровых консолей. Когда одна и та же компания выпускает мобильные процессоры и софт, его согласованной работы добиться куда легче. Тем не менее, пути оптимизации самой разработки игр и приложений у Apple далеко не исчерпаны. В iOS 8 появился Metal API, также ориентированный на использование низкоуровневых операций.

Остальные крупные компании предпочитают действовать совместно и в рамках открытых стандартов. Появившийся 16 лет назад консорциум Khronos Group объединил более ста производителей, включая таких кровных друзей, как AMD, Nvidia и Intel. В своё время консорциум явил на свет открытые стандарты OpenGL, OpenCL, OpenCV и многие другие.

Khronos Group насчитывает более ста участников.

По сравнению с OpenGL, Vulkan даёт разработчикам возможность использовать низкоуровневые операции без ущерба для переносимости кода. С помощью Vulkan на разных платформах можно достичь почти такого же сбалансированного алгоритма, как на специализированных игровых консолях. Этот API помогает эффективнее использовать аппаратные возможности дискретных видеокарт и интегрированных графических чипов в 2D и 3D-режимах.

Подобно DirectX 12, Vulkan поддерживает прямой доступ к памяти GPU. Дополнительно Vulkan снижает зависимость скорости отрисовки от качества драйверов. За счёт трансляции кода шейдерных программ в промежуточный двоичный формат, их компиляцию можно выполнять уже на этапе разработки, а не во время запуска 3D-приложения.

Vulkan разрабатывается с середины 2014 года. В его основу легли графические библиотеки другого низкоуровневого API – AMD Mantle. Компания AMD также выступала в роли редактора официальных спецификаций. Помимо них Khronos group опубликовала ряд тестов, демонстрирующих преимущество нового API. Все они доступны на портале GitHub.

«У Vulkan есть огромный потенциал, – говорит Дин Секулик (Dean Sekulic), программист Croteam. – Если сказать о нём в одном предложении, то с появлением Vulkan завершилось давнее противостояние между борцами за производительность и переносимость кода. Сейчас мы портируем на него The Talos Principle в подтверждение новой концепции разработки».

Компания Valve спонсирует создание открытого SDK LunarG с поддержкой API Vulkan. Однако несмотря на открытые спецификации, доступные инструменты разработки, возможность глубокой оптимизации кода и другие преимущества, Vulkan ещё какое-то время будет редко используемым API. Большинство игроделов останутся верны DirectX 11/12 и OpenGL. Куда проще повысить системные требования или снизить качество графики, чем осваивать новые способы разработки. Понимая это, консорциум Khronos Group стремиться обеспечить поддержку Vulkan не только в новых ОС и графических решениях, но и на морально устаревших системах.

Сейчас Vulkan поддерживается в среде Windows (начиная с седьмой версии), Linux, SteamOS и Android. В ближайшее время ожидается добавление поддержки ОС Tizen от Samsung. Бета-версии драйверов с поддержкой API Vulkan уже выпустили AMD и Nvidia. На очереди Intel, Qualcomm, ARM и другие производители, входящие в консорциум Khronos Group. Демонстрацию Vulkan на графическом чипе ARM Mali можно увидеть в ролике ниже.

В настоящее время Vulkan можно протестировать на видеокартах с графическими чипами Nvidia GeForce GT 630 и выше, AMD Radeon HD 7700 и новее. Также API Vulkan поддерживает гибридные процессоры AMD с графическим ядром Radeon HD 8500 – 8900 и R2 – R9. Встроенная графика десктопных и мобильных процессоров Intel поддерживается Vulkan начиная с семейства Core пятого поколения.

В полной мере возможности нового API раскроются перспективными графическими процессорами Nvidia серии Pascal и AMD с архитектурой GCN четвёртого поколения. Соответствующие видеокарты предположительно войдут в серию GTX 1xxx и Radeon Rx 400. По неофициальным данным начало их продаж планируется на второй квартал 2016 года.

Vulkan

Начните работать быстро с Vulkan, передовым 3D API от Khronos, со статьями, презентациями, примерами кода и вспомогательными библиотеками от NVIDIA, мирового лидера в области визуальных и ускоренных вычислений.

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

Мы использовали оборудование и драйверы NVIDIA как для Windows, так и для Android для разработки Vulkan, и снижение нагрузки на процессор было впечатляющим.

Джон Кармак, технический директор, Oculus

Драйверы Vulkan

Образцы Vulkan и код

Чтобы помочь разработчикам быстро освоить Vulkan и продемонстрировать некоторые преимущества Vulkan API, инженеры службы поддержки разработчиков NVIDIA подготовили несколько примеров и исходных материалов.Со временем NVIDIA планирует выпустить дополнительные образцы и код, поэтому следите за обновлениями на этой странице.

Рекомендуемые образцы и код
Сцена CAD с резьбой

Пример Vulkan & OpenGL Threaded CAD Scene — это демонстрация того, как Vulkan API может использоваться для рендеринга класса рабочих станций, где требуются высокая производительность и точность.

Подробнее

Вулкан Чоппер

Демо Chopper использует API Vulkan для рендеринга десятков высококачественных вертолетов с высокой частотой кадров и низкими нагрузками на процессор.Демонстрационная версия доступна в день запуска для Windows, Linux и Embedded (L4T) и будет доступна в ближайшие дни для Android.

Подробнее

Оболочка Vulkan C ++

Чтобы помочь разработчикам быстро внедрить Vulkan, NVIDIA создала низкоуровневую оболочку C ++ для API. Оболочка обеспечивает базовую функциональность и согласованную цель, используя кроссплатформенный и легкий подход.

Подробнее

Подводная лодка Вулкан

В этом примере показано, как визуализировать 3D-модели в Vulkan с помощью потоковых рабочих для эффективного построения различных частей сцены.Для сравнения образец также содержит обычную реализацию OpenGL, а также реализацию OpenGL с использованием расширения NVIDIA Command-lists.

Подробнее

Суперсэмплинг Vulkan

В этом примере используется Vulkan для визуализации сцены в сверхдискретизированном закадровом буфере и применяется высококачественная понижающая дискретизация для окончательного результата. Качество зависит от сочетания множественной выборки, супервыборки и фильтра ядра, который выполняет более точную работу, чем обычная операция «разрешения».

Подробнее

В прошлом мы успешно сотрудничали с группой поддержки драйверов NVIDIA, но я был поражен их работой над Vulkan. Они незамедлительно предоставили нам последние бета-версии драйверов, так что мы смогли быстро внедрить новый API в Serious Engine и сделать The Talos Principle одной из первых игр, поддерживающих Vulkan. Гладкий; плавный!

Дин Секулюк, старший программист, Croteam

Особенности сообщества Vulkan

Вулкан Рыбный Торнадо

Fish Tornado от команды Cinder в полной мере использует API Vulkan для визуализации косяка большого глаза.Первоначально написанная Робертом Ходжином и основанная на исследованиях моделирования поведения животных, проведенных Крейгом Рейнольдсом и профессором Иэном Кузином, демонстрация демонстрирует различные модели обучения. Периодически их мирное плавание прерывается хищным приближением проходящей акулы.

Подробнее

Материалы проявителя Vulkan

Vulkan Presentations

GTC 2016

GDC 2016

Siggraph 2015

GTC 2015 г.

NVIDIA Vulkan Training Day

Khronos Group Vulkan Вебинар

.Поддержка драйверов

Vulkan | NVIDIA Разработчик

Присоединяйтесь к нам онлайн с 5 по 9 октября на конференции по технологиям графических процессоров (GTC), включающей сеансы в реальном времени и по запросу, обучение в Институте глубокого обучения NVIDIA со скидкой и возможность пообщаться с отраслевыми экспертами. Предложения в этом году включают:

Эта страница содержит ссылки как на драйверы общего выпуска Vulkan 1.2 , так и на драйверы для разработчиков бета-версии .

Vulkan 1.2 Общая версия драйвера загрузки

Вулкан 1.2 доступна для Windows и Linux в наших драйверах общего выпуска, доступных здесь:

Windows

Linux

NVIDIA SHIELD TV

Бета-версия драйвера Vulkan Загрузки

Драйвер Windows версии 456.62 и драйвер Linux версии 455.22.04 содержат недавно выпущенные функции Vulkan и исправления ошибок для разработчиков Vulkan.

Окна 456.62

Linux 455.22.04

Примечания к выпуску бета-драйвера Vulkan

Вулкан 1.2 можно найти здесь: https://www.khronos.org/registry/vulkan/

NVIDIA обеспечивает полную поддержку Vulkan 1.2 и функциональность на видеокартах NVIDIA GeForce и Quadro с одним из следующих графических процессоров на базе Turing, Volta, Pascal, Maxwell (первое и второе поколение) и Kepler:

    Ампер Архитектура графического процессора
    • GeForce RTX: GeForce RTX 3090, GeForce RTX 3080;
    Архитектура графического процессора Turing

    Графические процессоры, начиная с семейства Turing, предоставляют несколько расширений Vulkan, предоставляющих разработчикам доступ к расширенным функциям, таким как трассировка лучей, шейдеры сетки, затенение с переменной скоростью и затенение пространства текстуры.

    • ТИТАН: NVIDIA ТИТАН RTX
    • GeForce RTX: GeForce RTX 2080 Ti, GeForce RTX 2080 SUPER, GeForce RTX 2080, GeForce RTX 2070 SUPER, GeForce RTX 2070, GeForce RTX 2060 SUPER, GeForce RTX 2060
    • GeForce GTX: GeForce GTX 1660 Ti, GeForce GTX 1660 SUPER, GeForce GTX 1660, GeForce GTX 1650 SUPER, GeForce GTX 1650, GeForce MX250, GeForce MX230
    • Quadro: Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Quadro RTX 4000, Quadro RTX 3000, Quadro T2000, Quadro T1000
    Архитектура графического процессора Volta
    • ТИТАН: NVIDIA ТИТАН V
    • Quadro: Quadro GV100;
    Архитектура графического процессора Pascal
    • TITAN: NVIDIA TITAN Xp, NVIDIA TITAN X (Паскаль)
    • GeForce: GeForce GTX 1080 Ti, GeForce GTX 1080, GeForce GTX 1070 Ti, GeForce GTX 1070, GeForce GTX 1060, GeForce GTX 1050 Ti, GeForce GTX 1050, GeForce GT 1030, GeForce MX150,
    • Quadro: Quadro GP100, Quadro P6000, Quadro P5200, Quadro P5000, Quadro P4200, Quadro P4000, Quadro P3200, Quadro P3000, Quadro P2200, Quadro P2000, Quadro P1000, Quadro P620, Quadro P600, Quadro P520, Quadro P500, Quadro P500, Quadro P500 P400
    Архитектура графического процессора Maxwell 2
    • TITAN: GeForce GTX TITAN X;
    • GeForce: GeForce GTX 980 Ti, GeForce GTX 980, GeForce GTX 980M, GeForce GTX 970, GeForce GTX 970M, GeForce GTX 965M, GeForce GTX 960, GeForce GTX 950,
    • Quadro: Quadro M6000 24 ГБ, Quadro M6000, Quadro M5500, Quadro M5000, Quadro M5000M, Quadro M4000, Quadro M4000M, Quadro M3000M, Quadro M2200, Quadro M2000
    Архитектура графического процессора Maxwell 1
    • GeForce: GeForce GTX 960M, GeForce GTX 950M, GeForce 945M, GeForce 940MX, GeForce 930MX, GeForce 920MX, GeForce 940M, GeForce 930M, GeForce GTX 860M, GeForce GTX 850M, GeForce 845M, GeForce 840M, GeForce 830M, GeForce GTX 750 Ti, GeForce GTX 750, GeForce GTX 745, GeForce MX130
    • Quadro: Quadro M2000M, Quadro M1000M, Quadro M600M, Quadro M500M, Quadro M1200, Quadro M620, Quadro M520, Quadro K2200M, Quadro K620M
    Архитектура графического процессора Kepler
    • TITAN: GeForce GTX TITAN, GeForce GTX TITAN Black, GeForce GTX TITAN Z
    • GeForce: GTX 780 Ti, GeForce GTX 780, GeForce GTX 770, GeForce GTX 760, GeForce GTX 760 Ti (OEM), GeForce GT 740, GeForce GT 730, GeForce GT 720, GeForce GT 710, GeForce GTX 690, GeForce GTX 680, GeForce GTX 670, GeForce GTX 660 Ti, GeForce GTX 660, GeForce GTX 650 Ti BOOST, GeForce GTX 650 Ti, GeForce GTX 650, GeForce GTX 645, GeForce GT 640, GeForce GT 635, GeForce GT 630, GeForce MX110
    • Quadro: Quadro K6000, Quadro K5200, Quadro K5000, Quadro K4000, Quadro K4200, Quadro K2200, Quadro K2000, Quadro K2000D, Quadro K1200, Quadro K620, Quadro K600, Quadro K420, Quadro 410

Vulkan Ray Tracing

В дополнение к Vulkan 1.2, эти бета-драйверы для разработчиков Vulkan также поддерживают временное расширение Khronos VK_KHR_ray_tracing. Базовая функция трассировки лучей, на что указывает бит функции VkPhysicalDeviceRayTracingFeaturesKHR.rayTracing, доступна на следующих графических процессорах:

  • Графические процессоры Ampere и Turing с ядрами RT: TITAN RTX и все графические процессоры GeForce RTX и Quadro RTX
  • Turing без ядер RT: GeForce GTX 1660 Ti, GeForce GTX 1660 Super и GeForce GTX 1660
  • Volta: графических процессоров NVIDIA TITAN V и Quadro GV100
  • Pascal с видеопамятью 6 ГБ или больше: NVIDIA TITAN Xp, NVIDIA TITAN, GeForce GTX 1080 Ti, GeForce GTX 1080, GeForce GTX 1070 Ti, GeForce GTX 1070, GeForce GTX 1060 6 ГБ, Quadro P6000, Quadro P5x00, Quadro P4x00 и Quadro P3200

При возникновении любых ошибок или проблем, пожалуйста, сообщите об ошибке через веб-сайт разработчика: https: // devtalk.nvidia.com/

Обновления бета-версии драйвера Vulkan

29 сентября 2020 г. — Windows 456.62, Linux 455.22.04

  • Новое:
  • Исправления:

    • Исправлена ​​ошибка в оптимизации барьера, из-за которой некоторые последовательные копии могли выполняться неупорядоченно.

9 сентября 2020 г. — Windows 452.28, Linux 450.56.11

  • Исправления:

    • Исправлена ​​ошибка в оптимизации SPIR-V, из-за которой условные блоки не выполнялись.
    • Исправлена ​​ошибка, из-за которой вызовы vkGetRandROutputDisplayEXT с неожиданным вводом приводили к ошибкам протокола X11 [Linux]

7 августа 2020 г .— Windows 451.98, Linux 450.56.06

20 июля 2020 г. — Windows 451.79, Linux 450.56.02

  • Новое:
  • Исправления:

    • Исправлено переворачивание свопчейнов X11, содержащих более двух образов [Linux]

9 июля 2020 г. — Windows 451.74, Linux 450.56.01

  • Новое:
  • Исправления:

    • Сделайте параметры pSizes для vkCmdBindVertexBuffers2EXT относительными к pBuffers + pOffsets
    • Исправлен потенциальный сбой при первом вызове vkQueuePresentKHR () после создания нового VkSwapchainKHR с ненулевым oldSwapchain
    • Исправлен потенциальный сбой в vkCmdBeginRenderPass () при использовании VK_EXT_sample_locations

23 июня 2020 г. — Windows 443.41, Linux 440.66.17

  • Новое:
  • Исправления:

    • Повышена производительность vkCmdMultiDraw * IndirectCount на Pascal и более ранних графических процессорах.

26 мая 2020 г. — Windows 443.24, Linux 440.66.15

  • Исправления:

    • Фиксированный 16-битный SMin / SMax
    • Улучшение производительности процессора для создания и использования VkFence [Linux]
    • Исправлена ​​ошибка, из-за которой vkUpdateDescriptorSetWithTemplate игнорировал параметр шага для некоторых значений VkDescriptorType.
    • Исправлена ​​ошибка, из-за которой слой Optimus выбирал iGPU при наличии профиля приложения с автоматическим выбором в качестве предпочтительного графического процессора [Windows]
    • Исправлена ​​компоновка разделяемой памяти вычислительного шейдера, которая могла привести к сбою компилятора.
    • Исправлена ​​ошибка, из-за которой vkCreateSampler не работал без данных borderColor, даже если они не нужны.
    • Исправлена ​​проблема компилятора при обработке изображения с дополнительными неиспользуемыми компонентами операнда координат.
    • Исправлена ​​запись в динамически индексируемые выходные цвета фрагментов vec2 и vec3.

11 мая 2020 г. — Windows 443.15, Linux 440.66.14

  • Новое:
  • Исправления:

    • Исправлено возвращаемое значение pCheckpointDataCount для vkGetQueueCheckpointDataNV, когда значений меньше запрошенных.
    • Правильно обработать структуру VkTimelineSemaphoreSubmitInfo для vkQueueBindSparse
    • Исправлена ​​немедленная индексация vec3 в шейдерах трассировки лучей

4 мая 2020 г. — Windows 443.09, Linux 440.66.12

  • Новое:
  • Исправления:

    • Исправлен визуальный сбой с приложениями Vulkan при падении из-под переворачивания на определенных рабочих столах, таких как GNOME [Linux]

24 апреля 2020 г. — Linux 440.66.11

  • Исправления:

    • Исправлено несколько ошибок синхронизации, которые могли на мгновение заблокировать X-сервер при перемещении / изменении размера / фокусировке окон OpenGL и Vulkan при включенной синхронизации PRIME [Linux]
    • Исправлена ​​ошибка, из-за которой горизонтальные линии приводили к повреждению полноэкранных приложений Vulkan [Linux]

18 апреля 2020 г. — Windows 442.98, Linux 440.66.09

  • Новое:

    • Добавлена ​​поддержка большего количества форматов вершин структуры ускорения.
  • Исправления:

    • Исправлено некорректное объявление некоторых VkPhysicalDeviceRayTracingFeaturesKHR для текущего графического процессора.
    • Исправлен потенциальный сбой, когда конвейер pInputAssemblyState имеет значение NULL для шейдеров сетки
    • Исправлено выравнивание памяти и тип для оперативной памяти с трассировкой лучей
    • Исправлены некоторые проблемы с запросами трассировки лучей.
    • Исправлена ​​проблема с созданием конвейера трассировки лучей с помощью конвейерных библиотек.
    • Исправлены некоторые переходы между состояниями окна при использовании HDR [Windows]

2 апреля 2020 г. — Windows 442.88, Linux 440.66.08

  • Новое:
  • Исправления:

    • Повышение производительности больших выделений VkDeviceMemory, видимых на хосте
    • Исправлена ​​копия YCbCr многоплоскостных изображений

1 апреля 2020 г. — Windows 442.86, Linux 440.66.07

  • Новое:

    • Создание многопоточного конвейера отложенной трассировки лучей
    • Разрешить представление из семейств очередей, которые предоставляют VK_QUEUE_COMPUTE_BIT только при использовании XCB в дополнение к поверхностям Xlib [Linux]
  • Исправления:

    • Добавлен обходной путь для Linux Steam Play с названием DOOM Eternal, который переопределяет запрошенные приложением области памяти, чтобы обеспечить размещение критически важных для производительности ресурсов в видеопамяти [Linux]
    • Правильно ограничьте drawCount для vkCmdDrawIndirectCount и vkCmdDrawIndexedIndirectCount на графических процессорах Turing
    • Фиксированная индексация дескриптора с большими массивами и большими блоками

24 марта 2020 г. — Windows 442.81, Linux 440.66.04

  • Исправления:

    • Исправлена ​​обработка смещений в VkAccelerationStructureBuildOffsetInfoKHR
    • Исправлена ​​ошибка, которая могла приводить к сбою приложений DXVK при работе на ноутбуках Optimus [Windows]

19 марта 2020 г. — Windows 442.77, Linux 440.66.03

17 марта 2020 г .— Windows 442.75, Linux 440.66.02

  • Новое:
  • Исправления:

    • Исправления для презентации HDR в Windows

19 февраля 2020 г .— Linux 440.58,02

  • Исправлена:

    • Исправлена ​​регрессия, которая добавляла синтаксические ошибки в файл конфигурации профилей приложений по умолчанию [Linux]

15 февраля 2020 г. — Windows 442.36, Linux 440.58.01

.

Введение — Учебное пособие по Vulkan

Около

Это руководство научит вас основам использования Vulkan.
графика и вычислительный API. Vulkan — это новый API от группы Khronos
(известен OpenGL), который обеспечивает гораздо лучшую абстракцию современной графики
карты. Этот новый интерфейс позволяет вам лучше описать, что ваше приложение
собирается сделать, что может привести к повышению производительности и менее удивительному драйверу
поведение по сравнению с существующими API, такими как OpenGL
и Direct3D.Идеи, лежащие в основе Vulkan
аналогичны Direct3D 12
и металл, но у Вулкана есть
Преимущество полностью кроссплатформенности и позволяет разрабатывать для Windows,
Linux и Android одновременно.

Однако цена, которую вы платите за эти преимущества, заключается в том, что вам придется работать с
значительно более подробный API. Каждая деталь, связанная с требованиями графического API
для настройки с нуля вашим приложением, включая начальный буфер кадра
создание и управление памятью для таких объектов, как буферы и изображения текстур.В
графический драйвер будет намного меньше держать руку, а это означает, что у вас будет
чтобы проделать больше работы в вашем приложении для обеспечения правильного поведения.

Вывод: Vulkan не для всех. Он нацелен на
программисты, увлеченные высокопроизводительной компьютерной графикой, и
готовы поработать. Если вас больше интересует разработка игр,
а не компьютерной графики, тогда вы можете придерживаться OpenGL или Direct3D,
который в ближайшее время не будет заменен на Vulkan.Другая
альтернатива — использовать движок вроде Unreal Engine
или Unity, который будет
возможность использовать Vulkan, открывая вам API гораздо более высокого уровня.

Разобравшись с этим, давайте рассмотрим некоторые предпосылки для выполнения этого
руководство:

  • Графическая карта и драйвер, совместимые с Vulkan (NVIDIA, AMD, Intel)
  • Опыт работы с C ++ (знакомство с RAII, списками инициализаторов)
  • Компилятор с достойной поддержкой функций C ++ 17 (Visual Studio 2017+, GCC 7+ или Clang 5+)
  • Имеющийся опыт работы с 3D компьютерной графикой

Это руководство не предполагает знания концепций OpenGL или Direct3D, но оно
требует от вас знания основ 3D компьютерной графики.Это не объяснит
математика, лежащая в основе перспективной проекции, например. См. Эту онлайн-книгу
за отличное введение в концепции компьютерной графики. Некоторые другие замечательные ресурсы компьютерной графики:

Вы можете использовать C вместо C ++, если хотите, но вам придется использовать другой
библиотека линейной алгебры, и вы будете сами по себе с точки зрения структурирования кода.
Мы будем использовать функции C ++, такие как классы и RAII, для организации логики и ресурсов.
жизни. Существует также альтернативная версия этого руководства, доступная для разработчиков на Rust.

Чтобы упростить работу разработчикам, использующим другие языки программирования, и получить некоторый опыт работы с базовым API, мы будем использовать исходный API C для работы с Vulkan. Однако, если вы используете C ++, вы можете предпочесть новые привязки Vulkan-Hpp, которые устраняют часть грязной работы и помогают предотвратить определенные классы ошибок.

Электронная книга

Если вы предпочитаете читать это руководство как электронную книгу, вы можете загрузить EPUB
или PDF-версию здесь:

Структура учебного пособия

Мы начнем с обзора того, как работает Vulkan, и работы, которую нам предстоит выполнить.
чтобы получить первый треугольник на экране.Цель всех маленьких шагов
станут более понятными после того, как вы поймете их основную роль в целом
картина. Далее мы настроим среду разработки с Vulkan SDK,
библиотека GLM для операций линейной алгебры и
GLFW для создания окон. В руководстве будет рассказано, как
чтобы настроить их в Windows с помощью Visual Studio и в Ubuntu Linux с GCC.

После этого мы реализуем все основные компоненты программы Vulkan, которая
необходимы для визуализации вашего первого треугольника.Каждая глава будет следовать примерно
следующая структура:

  • Представьте новую концепцию и ее цель
  • Используйте все соответствующие вызовы API, чтобы интегрировать его в свою программу
  • Преобразование его частей в вспомогательные функции

Хотя каждая глава написана как продолжение предыдущей, она также
можно читать главы как отдельные статьи, знакомящие с определенными
Особенность Вулкана. Это означает, что сайт также можно использовать в качестве справочного материала.Все
функции и типы Vulkan связаны со спецификацией, поэтому вы можете нажать
им, чтобы узнать больше. Vulkan — это очень новый API, поэтому могут быть некоторые недостатки
в самой спецификации. Предлагаем вам отправить отзыв на
это хранилище Хроноса.

Как упоминалось ранее, API Vulkan имеет довольно подробный API со многими
параметры, чтобы дать вам максимальный контроль над графическим оборудованием. Это вызывает
базовые операции, такие как создание текстуры, чтобы сделать много шагов, которые должны быть
повторяется каждый раз.Поэтому мы будем создавать нашу собственную коллекцию помощников
функции на протяжении всего учебника.

Каждая глава также завершается ссылкой на полный список кодов до этого
точка. Вы можете обратиться к нему, если у вас есть сомнения по поводу структуры
код, или если вы столкнулись с ошибкой и хотите сравнить. Все файлы кода
были протестированы на видеокартах от нескольких поставщиков для проверки правильности.
В конце каждой главы также есть раздел комментариев, где вы можете спросить
вопросы, относящиеся к конкретной теме.Укажите ваш
платформа, версия драйвера, исходный код, ожидаемое поведение и фактическое поведение для
помогите нам помочь вам.

Это руководство предназначено для сообщества. Вулкан все еще очень новый
API и лучшие практики еще не созданы. Если у тебя есть
тип отзыва об учебнике и самом сайте, тогда, пожалуйста, не стесняйтесь
отправить вопрос или запрос на перенос в репозиторий GitHub.
Вы можете посмотреть репозиторий , чтобы получать уведомления об обновлениях учебника.

После того, как вы пройдете ритуал рисования вашего самого первого Vulkan с питанием
треугольник на экране, мы начнем расширять программу, чтобы включить линейные
трансформации, текстуры и 3D модели.

Если вы раньше играли с графическими API, то знаете, что может быть
много шагов, пока на экране не появится первая геометрия. Есть много
эти начальные шаги в Vulkan, но вы увидите, что каждый из отдельных шагов
легко понять и не кажется лишним.Также важно сохранить
помните, что как только у вас будет скучный треугольник, рисование полностью текстурировано
3D-модели не требуют так много дополнительной работы, и каждый шаг после этого
гораздо больше вознаграждения.

Если вы столкнетесь с какими-либо проблемами при следовании руководству, сначала проверьте
FAQ, чтобы узнать, есть ли там ваша проблема и ее решение. Если ты
все еще застрял после этого, тогда не стесняйтесь обращаться за помощью в разделе комментариев
ближайшая по теме глава.

Готовы окунуться в будущее высокопроизводительных графических API? Пошли!

Пожалуйста, включите JavaScript, чтобы просматривать комментарии от Disqus..

Vulkan — ArchWiki

Из википедии: Vulkan (API):

Vulkan — это кроссплатформенный API для работы с трехмерной графикой и вычислений с низкими издержками.

Узнайте больше на Khronos.

Установка

Примечание: Для гибридной графики (NVIDIA Optimus / AMD Dynamic Switchable Graphics):

Для запуска приложения Vulkan вам необходимо установить пакет vulkan-icd-loader (и lib32-vulkan-icd-loader, если вы также хотите запускать 32-битные приложения), а также драйверы Vulkan для вашей видеокарты. (s):

Вместо этого можно установить другие драйверы:

Для разработки приложений Vulkan установите vulkan-headers и, при необходимости, vulkan-validation-Layers и vulkan-tools (вы можете найти инструмент vulkaninfo здесь).

Проверка

Чтобы узнать, какие реализации Vulkan в настоящее время установлены в вашей системе, используйте следующую команду:

 $ ls /usr/share/vulkan/icd.d/
 

Выбор вулкана-водителя

В некоторых случаях устанавливается несколько драйверов vulkan (например, RADV и AMDVLK). Вы можете выбрать предпочтительный драйвер, установив переменную окружения VK_ICD_FILENAMES .
Запуск Steam с драйвером radv выполняется

 $ VK_ICD_FILENAMES = / usr / share / vulkan / icd.d / radeon_icd.i686.json: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json Steam
 

Чтобы избежать сбоев в 32-битных играх, можно назначить 32-битный вариант и 64-битный вариант переменной окружения.

База данных оборудования Vulkan

База данных оборудования Vulkan содержит сообщения о комбинациях графического процессора и драйвера, о которых сообщает пользователь. Предоставление собственной информации возможно с помощью vulkan-caps-viewer AUR .

Устранение неисправностей

Ошибка

— vulkan: Нет поддержки DRI3

Если вы получили сообщение выше и используете графику Intel, вам может потребоваться принудительно запустить DRI3 и перезапустить Xorg:

 / и т. Д. / X11 / xorg.conf.d / 20-intel.conf 
 Раздел «Устройство»
   Идентификатор «Intel Graphics»
   Драйвер "интел"
   Вариант «DRI» «3»
EndSection
 

Nvidia — vulkan не работает и не может инициализироваться

Проверьте, установлен ли у вас vulkan-intel, это может помешать обнаружению драйвера vulkan от Nvidia.

В качестве альтернативы установите переменную среды VK_ICD_FILENAMES на /usr/share/vulkan/icd.d/nvidia_icd.json .

Устройство для графического процессора дисплея не найдено.Установлены ли драйверы intel-mesa?

Попробуйте перечислить конфигурации intel_icd и primus_vk_wrapper в VK_ICD_FILENAMES

 экспорт VK_ICD_FILENAMES = / usr / share / vulkan / icd.d / intel_icd.x86_64.json: /usr/share/vulkan/icd.d/nv_vulkan_wrapper.json
 

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *