Vulkan — это низкоуровневый, малонакладный кроссплатформенный API и открытый стандарт для 3D-графики и вычислений . [15] [16] [17] Он был призван устранить недостатки OpenGL и предоставить разработчикам больше контроля над графическим процессором. Он разработан для поддержки широкого спектра графических процессоров, центральных процессоров и операционных систем, а также для работы с современными многоядерными центральными процессорами.
Vulkan нацелен на высокопроизводительные приложения 3D-графики в реальном времени, такие как видеоигры и интерактивные медиа , а также высокопараллельные вычисления . Vulkan призван обеспечить более высокую производительность и более эффективное использование CPU и GPU по сравнению со старыми API OpenGL и Direct3D 11. Он делает это, предоставляя значительно более низкоуровневый API для приложения, чем старые API, который больше напоминает работу современных GPU.
Vulkan сопоставим с Metal API от Apple и Direct3D 12 от Microsoft . Помимо более низкого использования ЦП, Vulkan разработан, чтобы позволить разработчикам лучше распределять работу между несколькими ядрами ЦП . [18]
Vulkan был впервые анонсирован некоммерческой организацией Khronos Group на GDC 2015. [13] [19] [20] Первоначально API Vulkan назывался Khronos « инициативой OpenGL следующего поколения » или «OpenGL next» [21] , но использование этих названий было прекращено, когда было анонсировано «Vulkan». [22]
Vulkan создан на основе компонентов API Mantle компании AMD , который был передан компанией AMD компании Khronos с целью предоставить Khronos основу для начала разработки API низкого уровня, который они могли бы стандартизировать в отрасли. [13]
Vulkan призван обеспечить ряд преимуществ по сравнению с другими API, а также со своим предшественником OpenGL . Vulkan предлагает меньшие накладные расходы, более прямой контроль над графическим процессором и меньшее использование центрального процессора. [20] Общая концепция и набор функций Vulkan аналогичны концепциям, представленным в Mantle и позднее принятым Microsoft с Direct3D 12 и Apple с Metal .
Предполагаемые преимущества Vulkan по сравнению с API предыдущего поколения включают в себя следующее:
Vulkan доступен на нескольких современных операционных системах и архитектурах [ требуется ссылка ] и предоставляет единый API как для настольных, так и для мобильных графических устройств, тогда как ранее они были разделены между OpenGL и OpenGL ES соответственно. Как и OpenGL, и в отличие от Direct3D 12, API Vulkan не привязан к одной ОС или форм-фактору устройства. Vulkan изначально работает на Android , Linux , BSD Unix , QNX , Haiku , [23] Nintendo Switch , Raspberry Pi , Stadia , Fuchsia , Tizen и Windows 7 , 8 , 10 и 11. MoltenVK предоставляет свободно лицензированную [24] [25] [26] стороннюю поддержку для macOS , iOS и tvOS, обертываясь над API Metal от Apple. [27]
Vulkan снижает нагрузку на ЦП за счет использования пакетной обработки и других низкоуровневых оптимизаций, тем самым снижая нагрузку на ЦП и оставляя его свободным для выполнения большего количества вычислений или рендеринга, чем это было бы возможно в противном случае. [28] [29]
Direct3D 11 и OpenGL 4 изначально были разработаны для использования с одноядерными процессорами и получили только расширение для выполнения на многоядерных процессорах. Даже когда разработчики приложений используют расширения, эти API обычно не масштабируются на многоядерных процессорах. Vulkan предлагает улучшенную масштабируемость на многоядерных процессорах благодаря модернизированной архитектуре потоков. [30] [31]
OpenGL использует высокоуровневый язык GLSL для написания шейдеров , что заставляет каждый драйвер OpenGL реализовывать собственный компилятор для GLSL. Затем он выполняется во время выполнения приложения для перевода шейдеров программы в машинный код графического процессора. Напротив, драйверы Vulkan должны принимать шейдеры, уже переведенные в промежуточный двоичный формат, называемый SPIR-V (Standard Portable Intermediate Representation), аналогичный двоичному формату, в который шейдеры HLSL компилируются в Direct3D . Благодаря разрешению предварительной компиляции шейдеров повышается скорость инициализации приложения, и для каждой сцены можно использовать большее количество шейдеров. Драйверу Vulkan требуется только выполнить специфическую для графического процессора оптимизацию и генерацию кода, что упрощает обслуживание драйвера и потенциально уменьшает размер пакетов драйверов. [32] Разработчики приложений теперь также могут легче скрывать собственный код шейдера, поскольку шейдеры не хранятся непосредственно в виде исходного кода, однако предоставляются инструменты, которые могут декомпилировать SPIR-V в человекочитаемый высокоуровневый код. [31] [17]
В 2016 году NVIDIA заявила, что «OpenGL по-прежнему является отличным вариантом для многих случаев использования, поскольку он гораздо менее сложен и требует меньше обслуживания, чем Vulkan, при этом во многих случаях обеспечивая отличную общую производительность». [35]
AMD заявляет, что «Vulkan поддерживает управление, близкое к металлу, что обеспечивает более высокую производительность и лучшее качество изображения в Windows 7, Windows 8.1, Windows 10 и Linux. Никакой другой графический API не предлагает такого же мощного сочетания совместимости с ОС, функций рендеринга и эффективности оборудования». [36]
Vulkan 1.0 был выпущен в феврале 2016 года.
На SIGGRAPH 2016 Khronos объявил, что Vulkan получит поддержку автоматических функций multi-GPU, аналогичных тем, что предлагаются в Direct3D 12. [37] Поддержка multi-GPU, включенная в API, устраняет необходимость в SLI или Crossfire, для которых требуются видеокарты одной модели. Вместо этого API multi-GPU позволяет API разумно распределять рабочую нагрузку между двумя или более совершенно разными GPU. [38] Например, интегрированные GPU, включенные в CPU, могут использоваться в сочетании с высокопроизводительным выделенным GPU для небольшого повышения производительности.
7 марта 2018 года Khronos Group выпустила Vulkan 1.1. [39] Это первое крупное обновление API стандартизировало несколько расширений, таких как многовидовой режим, группы устройств, кросс-процессный и кросс-API-совместный доступ, расширенные вычислительные функции, поддержка HLSL и поддержка YCbCr. [40] В то же время оно также обеспечило лучшую совместимость с DirectX 12, явную поддержку нескольких GPU, поддержку трассировки лучей [41] [42] и заложило основу для следующего поколения GPU. [43] Наряду с Vulkan 1.1, SPIR-V был обновлен до версии 1.3. [40]
15 января 2020 года Khronos Group выпустила Vulkan 1.2 [44] . [45] Это второе крупное обновление API интегрирует 23 дополнительных широко используемых проверенных расширения Vulkan в базовый стандарт Vulkan. Некоторые из наиболее важных функций — «семафоры временной шкалы для легко управляемой синхронизации», «формальная модель памяти для точного определения семантики синхронизации и операций с памятью в разных потоках» и «индексация дескрипторов для обеспечения повторного использования макетов дескрипторов несколькими шейдерами». Дополнительные функции Vulkan 1.2 повышают его гибкость при реализации других графических API поверх Vulkan, включая «стандартную компоновку единого буфера», «скалярную компоновку блока» и «отдельное использование трафарета». [46]
25 января 2022 года Khronos Group выпустила Vulkan 1.3. [47] Это третье крупное обновление API интегрирует 23 дополнительных широко используемых проверенных расширения Vulkan в базовый стандарт Vulkan. [48] Vulkan 1.3 фокусируется на снижении фрагментации, делая новые функции необязательными для того, чтобы устройство считалось совместимым с Vulkan 1.3. [47] [49] Новые функции в Vulkan 1.3 включают динамический рендеринг, дополнительное динамическое состояние, улучшенный API синхронизации и профили устройств.
При выпуске OpenCL 2.2 группа Khronos объявила, что OpenCL будет конвергировать с Vulkan, где это возможно, чтобы обеспечить гибкость развертывания программного обеспечения OpenCL через оба API. [50] [51] Это было теперь продемонстрировано в Premiere Rush от Adobe с использованием компилятора с открытым исходным кодом clspv [52] для компиляции значительных объемов кода ядра OpenCL C для запуска в среде выполнения Vulkan для развертывания на Android. [53]
Группа Khronos начала проект по созданию графического API следующего поколения в июле 2014 года с установочной встречи в Valve . [54] На SIGGRAPH 2014 проект был публично анонсирован с призывом к участию. [13]
По данным Бюро по патентам и товарным знакам США, регистрация товарного знака Vulkan была произведена 19 февраля 2015 года. [55]
Vulkan был официально назван и анонсирован на Game Developers Conference 2015, хотя предположения и слухи, связанные с новым API, существовали и раньше и назывались « glNext ». [56]
В начале 2015 года LunarG (финансируемая Valve ) разработала и продемонстрировала драйвер Linux для Intel, который обеспечил совместимость с Vulkan на интегрированной графике серии HD 4000, несмотря на то, что драйверы Mesa с открытым исходным кодом не были полностью совместимы с OpenGL 4.0 до конца того же года. [57] [58] Все еще существует возможность [59] поддержки Sandy Bridge, поскольку он поддерживает вычисления через Direct3D11.
10 августа 2015 года Google объявила, что будущие версии Android будут поддерживать Vulkan. [60] Android 7.x «Nougat» запустил поддержку Vulkan 22 августа 2016 года. Android 8.0 «Oreo» имеет полную поддержку.
18 декабря 2015 года Khronos Group объявила, что версия 1.0 спецификации Vulkan почти завершена и будет выпущена, когда появятся соответствующие драйверы. [20]
Полная спецификация Vulkan и открытый исходный код Vulkan SDK были выпущены 16 февраля 2016 года. [1]
26 февраля 2018 года Khronos Group объявила, что API Vulkan стал доступен всем на macOS и iOS через библиотеку MoltenVK , которая позволяет Vulkan работать поверх Metal . [61] Другие новые разработки были показаны на SIGGRAPH 2018. [62] Ранее MoltenVK был проприетарным и коммерчески лицензированным решением, но Valve заключила соглашение с разработчиком Brenwill Workshop Ltd об открытии исходного кода MoltenVK под лицензией Apache 2.0, и в результате библиотека теперь доступна на GitHub. Valve также объявила, что с 26 февраля 2018 года Dota 2 может работать на macOS с использованием API Vulkan, который основан на MoltenVK. [63]
25 февраля 2019 года было объявлено о создании рабочей группы Vulkan Safety Critical (SC), которая будет внедрять ускорение Vulkan GPU в отраслях, критически важных для безопасности. [64]
Облачный игровой сервис Google Stadia использовал Vulkan на серверах Linux с графическими процессорами AMD . [65]
15 января 2020 года вышел Vulkan 1.2.
Наряду с выпуском Vulkan 1.2 группа Khronos опубликовала сообщение в блоге, в котором говорилось, что поддержка HLSL в Vulkan достигла статуса «готова к производству», учитывая улучшения в компиляторе DXC от Microsoft и компиляторе glslang от Khronos, а также новые функции в Vulkan 1.2, которые улучшают поддержку HLSL. [66]
3 февраля 2020 года Raspberry Pi Foundation объявила, что работает над драйвером Vulkan с открытым исходным кодом для своего Raspberry Pi , популярного одноплатного компьютера. [67] 20 июня 2020 года графический инженер сообщил, что после двух лет работы он создал драйвер, способный запускать VkQuake3 со скоростью более 100 кадров в секунду на этом небольшом компьютере. [68]
17 марта 2020 года Khronos Group выпустила расширения Ray Tracing , основанные на фирменном расширении Nvidia, с некоторыми крупными расширениями и множеством мелких изменений, которые, в свою очередь, были основаны на API OptiX от Nvidia. [ 69] [70] 23 ноября 2020 года эти расширения Ray Tracing были завершены. [71]
24 ноября 2020 года Raspberry Pi Foundation объявила, что их драйвер для Raspberry Pi 4 совместим с Vulkan 1.0. [72]
25 января 2022 года вышел Vulkan 1.3.
1 марта 2022 года был выпущен Vulkan SC 1.0, который принес графику и вычисления Vulkan для отраслей, критически важных для безопасности, и при этом был основан на стандарте Vulkan 1.2. [73]
1 августа 2022 года Raspberry Pi Foundation объявила, что их драйвер для Raspberry Pi 4 совместим с Vulkan 1.2. [74]
1 сентября 2022 года был выпущен Mesh Shading для Vulkan. [75] [76]
Новая дорожная карта Vulkan была анонсирована 25 января. [77] Новое расширение для декодирования видео AV1 было выпущено 1 февраля. [78]
Первоначальные спецификации гласили, что драйверы Vulkan могут быть реализованы на любом оборудовании, поддерживающем OpenGL ES 3.1 или OpenGL 4.x и выше. [79] Поскольку поддержка Vulkan требует новых графических драйверов, это не обязательно означает, что каждое существующее устройство, поддерживающее OpenGL ES 3.1 или OpenGL 4.x, будет иметь доступные драйверы Vulkan.
По состоянию на март 2023 года Intel разделила поддержку драйверов Vulkan для Windows [80] и Linux . [81] Все драйверы разработаны Intel.
В Windows Skylake to Ice Lake поддерживает версии до Vulkan 1.3 [82] с ограниченной поддержкой после июля 2022 года, поскольку будущие обновления будут охватывать только исправления безопасности. [80] Iris Xe и более новые версии полностью поддерживаются с марта 2023 года. [83]
В Linux по состоянию на март 2023 года поддержка Vulkan для Haswell неполная [84], поскольку он не совместим с Vulkan 1.0. [85] Помимо Haswell, Ivy Bridge и Broadwell также поддерживаются устаревшим драйвером Vulkan в Mesa под названием HASVK. [81] Skylake и более новые версии поддерживаются драйвером в Mesa под названием ANV. [81]
В Windows Vulkan 1.2 поддерживается от GCN 1.0 до GCN 3.0, [86] [87] [88], и никаких дальнейших обновлений не запланировано после июня 2021 года. [89] GCN 4.0 и более новые версии поддерживают Vulkan 1.3. [90]
В Linux есть различные драйверы Vulkan с различной и перекрывающейся поддержкой оборудования. Существует драйвер Vulkan с открытым исходным кодом, называемый AMDVLK, разработанный AMD, который отражает поддержку Windows. [91] Существует также проприетарный драйвер, называемый AMDGPU-PRO, который не рекомендуется использовать большинству пользователей по состоянию на март 2023 года. [92]
Также существует рекомендуемый драйвер RADV в Mesa, разработанный Valve, Red Hat, [93] Google [94] и другими. Этот драйвер по состоянию на март 2023 года поддерживает все карты GCN и RDNA . [95] Поддержка этим драйвером RADV GCN 1.0 через GCN 2.0 требует включения его экспериментальной поддержки в модуле ядра amdgpu . [96]
В Windows и Linux имеется разработанный NVIDIA драйвер Vulkan, который поддерживает Vulkan 1.2 на картах Kepler [97], и никаких дальнейших обновлений после сентября 2021 года не запланировано. [98] Maxwell и более новые версии поддерживают Vulkan 1.3. [99]
NVK, экспериментальный драйвер Vulkan с открытым исходным кодом для Linux на основе nouveau , был анонсирован в октябре 2022 года. [100] Он был объединен с основной веткой Mesa в августе 2023 года. [101] В настоящее время драйвер поддерживает Vulkan 1.3 [102]
Большинство современных устройств Android поддерживают Vulkan. Android 7.0 Nougat включает дополнительную поддержку Vulkan 1.0, [103] Android 9.0 Pie включает дополнительную поддержку Vulkan 1.1, а Android 10 ожидает (но не требует), что все 64-разрядные устройства с немалым объемом памяти поддерживают Vulkan 1.1. [104] [105] [106] Android 13 ожидает при тех же условиях поддержки Vulkan 1.3. [107] На устройствах Linux и некоторых ChromeOS драйвер Mesa с открытым исходным кодом обеспечивает поддержку оборудования Arm Mali (Midgard и Bifrost), Qualcomm Adreno и Broadcom VideoCore VI . [108]
По состоянию на июнь 2022 года устройства Apple не поддерживают API Vulkan. [109] Поддержка Vulkan доступна через библиотеку с открытым исходным кодом MoltenVK , которая обеспечивает реализацию Vulkan поверх графического API Metal , предоставляемого на устройствах iOS и macOS, хотя она имеет некоторые ограничения в отношении некоторых расширенных функций API. [27]
В июне 2022 года версия 1.3.217 Vulkan добавила поддержку объектов Metal, что облегчило импорт и экспорт между двумя API. [110] В декабре 2022 года версия 1.3.236 Vulkan добавила небольшие исправления для взаимодействия с Apple Metal. [111]
По состоянию на август 2023 года Huawei предоставляет поддержку для собственного Vulkan NAPI с отраслевым стандартным шейдером SPIR-V с HarmonyOS 4.0 API 10 и расширенного в систему HarmonyOS NEXT . Он был принят в качестве расширения в проекте OpenAtom с открытым исходным кодом, OpenHarmony с более новым графическим стеком для системы, движком программного обеспечения ArkGraphics 3D , который был недавно открыт с мая 2024 года в OpenHarmony 5.0 beta 1, который ранее был эксклюзивным для фирменного комплекта разработчика HarmonyOS NEXT, на пользовательских графических конвейерах функций. [112]
Vulkan не имеет обратной совместимости с OpenGL , [113] [17] [примечание 1], хотя существуют определенные проекты, реализующие OpenGL поверх Vulkan, такие как ANGLE от Google и Zink от Mesa . [114]
Vulkan также несовместим с другими графическими API, такими как Direct3D , Metal и Mantle , однако реализации этих API существуют поверх Vulkan:
Платформоспецифичные графические API, реализованные поверх Vulkan, также могут работать на альтернативных платформах. Например, DXVK предоставляет альтернативную общую библиотеку, предназначенную для использования в Linux изначально (без слоя совместимости с Wine ) для помощи в портировании игр.
Спасибо AMD!