Vulkan: различия между версиями

Материал из ALT Linux Wiki
(актуализировал данные)
 
(не показано 18 промежуточных версий 6 участников)
Строка 4: Строка 4:
Из [https://ru.wikipedia.org/wiki/Vulkan_(API) Wikipedia]: ''Vulkan — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015.
Из [https://ru.wikipedia.org/wiki/Vulkan_(API) Wikipedia]: ''Vulkan — кроссплатформенный API для 2D- и 3D-графики, впервые представленный Khronos Group в рамках конференции GDC 2015.


Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги на всех платформах, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12, Metal[en] и Mantle. Vulkan основан на технологиях AMD в Mantle.
Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать на всех платформах в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12, Metal и Mantle. Vulkan основан на технологиях AMD в Mantle.
''
''
На текущий момент для Linux существует т.н. Vulkan SDK kit, который представляет собой библиотеку для загрузки низкоуровневых драйверов (ICD loader), заголовочные файлы для разработчиков (Vulkan Headers), специальную библиотеку для проверки корректности работы всех компонентов (Validation layers).
На текущий момент для Linux существует т.н. Vulkan SDK, который представляет собой библиотеку для загрузки низкоуровневых драйверов (ICD loader), заголовочные файлы для разработчиков (Vulkan Headers), специальную библиотеку для проверки корректности работы всех компонентов (Validation layers).


Т.к. Vulkan API в чем-то схож с Direct3D, появилось достаточное количество трансляторов Direct3D->Vulkan, которые значительно улучшают качество поддержки игр и приложений Windows под Linux. Самый известный пример такого транслятора - [https://github.com/doitsujin/dxvk DXVK], который реализует в wine поддержку D3D11 через Vulkan.
Т.к. Vulkan API в чем-то схож с Direct3D, появилось достаточное количество трансляторов Direct3D->Vulkan, которые значительно улучшают качество поддержки игр и приложений Windows под Linux. Самый известный пример такого транслятора - [https://github.com/doitsujin/dxvk DXVK], который реализует в wine поддержку D3D11 через Vulkan.


Vulkan еще часто используют как альтернативу для реализации 2D/3D функций в графике, см. например, GTK+4 и Qt.
Vulkan часто используют как альтернативу для реализации 2D/3D-функций в графике; см., например, GTK+4 и Qt.


Текущая доступная версия спецификации API: [https://www.khronos.org/registry/vulkan/specs/1.1/html/vkspec.html '''1.1.124''']<br>
Текущая доступная версия спецификации API по состоянию на 27.06.2024 г.: [https://www.khronos.org/registry/vulkan/specs/1.3/html/vkspec.html '''1.3.286''']<br>
Текущая доступная версия ICD/Headers/Validation layers в Сизифе: '''1.1.121'''<br>
Текущая доступная версия ICD/Headers/Validation layers в Сизифе: '''1.3.283'''<br>


===Поддержка API на аппаратном уровне===
===Уровень поддержки API на аппаратном уровне===


{| class="wikitable"
Mesa - . [https://mesamatrix.net/ сайт Mesa matrix]
|-
Nvidia - см. [https://developer.nvidia.com/vulkan-driver Nvidia Vulkan Driver]
! Производитель !! AMD !! Intel !! Nvidia
|-
| Реализация в MesaLib stable (19.x) || RADV 1.1.90<ref>актуально для Mesa 19.1.7</ref> || ANV 1.1.96<ref>актуально для Mesa 19.1.7</ref>|| N/A
|-
| Реализация в [http://www.unsafe.ru/lakostis/RPMS/ALTLinux/glvnd/ MesaLib unstable] (19.3.x) || RADV 1.1.107 || ANV 1.1.102 || N/A
|-
| Open-Source реализация от производителя || AMDVLK 1.1.119<ref>актуально для версии 2019.Q3.5</ref> || ANV (см. выше) || N/A
|-
| Closed-Source реализация от производителя || AMDGPU-PRO 1.1.97<ref>актуально для версии 19.10</ref> || N/A || nvidia_glx 1.1.82<ref>актуально для версии 410.104</ref>/1.1.95<ref>актуально для версии [http://www.unsafe.ru/lakostis/RPMS/ALTLinux/glvnd/ 418.56]</ref>
|}


====AMD====
====AMD====
Самая разнообразная поддержка, есть много вариантов, которые можно попробовать для различных приложений. Изначально поддержка Vulkan для AMD появилась в MesaLib, написана не разработчиками из AMD и называется RADV (RADeon Vulkan). В настоящий момент является наиболее стабильной, гарантировано поддерживается многими приложениями и играми, но не обладает всеми возможностями в отличие от оф. версии от AMD (AMDVLK/AMDGPU-PRO).<br>
Самая разнообразная поддержка, есть много вариантов, которые можно попробовать для различных приложений. Изначально поддержка Vulkan для AMD появилась в MesaLib, написана не разработчиками из AMD и называется RADV (RADeon Vulkan). В настоящий момент является наиболее стабильной, гарантировано поддерживается многими приложениями и играми, но не обладает всеми возможностями в отличие от оф. версии от AMD (AMDVLK/AMDGPU-PRO).<br>
Также имеется [https://gitlab.freedesktop.org/Triang3l/mesa/-/tree/Terakan?ref%20type=heads экспериментальный драйвер] для GPU предыдущего (R600) поколения, который входит в состав [https://lakostis.unsafe.ru/RPMS/ALTLinux/glvnd/ сборок MesaLib с unsafe.ru].


'''команды для установки:'''<br>
'''команды для установки:'''<br>
'''RADV/MesaLib'''<ref>для MesaLib unstable пакет называется vulkan-radeon</ref><br>
'''RADV/MesaLib'''<ref>в сборке MesaLib с unsafe.ru пакет называется vulkan-radeon</ref><br>
<source lang="text">
<source lang="text">
$ apt-get install xorg-dri-radeon
$ apt-get install xorg-dri-radeon
Строка 42: Строка 33:
$ apt-get install vulkan-amdgpu
$ apt-get install vulkan-amdgpu
</source>
</source>
'''ВАЖНО''' В amdvlk начиная с 2021.Q3.x стали убирать поддержку старых (до-Polaris) GPU, поэтому для этих карт рекомендуется оставаться на RADV.


'''ВАЖНО''' В свежей версии AMDVLK появились новые экспериментальные расширения, которые можно включить указав переменную окружения '''AMDVLK_ENABLE_DEVELOPING_EXT=<val>''', где <val> может принимать некоторые значения, см. [https://github.com/GPUOpen-Drivers/AMDVLK#enable-extensions-under-development оф. документацию].
'''ВАЖНО''' В свежей версии AMDVLK появились новые экспериментальные расширения, которые можно включить указав переменную окружения '''AMDVLK_ENABLE_DEVELOPING_EXT=<val>''', где <val> может принимать некоторые значения, см. [https://github.com/GPUOpen-Drivers/AMDVLK#enable-extensions-under-development оф. документацию].
Строка 60: Строка 53:
</source>
</source>


'''ВАЖНО''' В unstable версии Mesa (19.3.x) появилась альтернативная реализация компилятора шейдеров для Vulkan (ACO), которая написана при поддержке Valve и не использует LLVM. Судя по результатам [https://www.phoronix.com/scan.php?page=article&item=radv-aco-okt&num=1 тестов], она работает чуть быстрее, чем стандартная реализация на базе LLVM. ACO можно включить, объявив его через переменную окружения RADV_PERFTEST:
'''ВАЖНО''' В Mesa начиная с 20.x стала использоваться реализация компилятора шейдеров для Vulkan (ACO), которая написана при поддержке Valve и не использует LLVM. Судя по результатам [https://www.phoronix.com/scan.php?page=article&item=radv-aco-okt&num=1 тестов], она работает чуть быстрее, чем стандартная реализация на базе LLVM. Но как и любая оптимизация, иногда ACO может работать неправильно или вообще препятствовать нормальной работе. Работу ACO можно контролировать через след. переменные окружения:


<source lang="text">
<source lang="text">
$ RADV_PERFTEST=aco ....
# отключить ACO полностью и использовать LLVM для компиляции шейдеров
$ export RADV_DEBUG=llvm
# отключить оптимизации в коде ACO, решает 90% проблем в работе :)
$ ACO_DEBUG=noopt
</source>
</source>


====Intel====
====Intel====
Поддержка Vulkan в MesaLib осуществляется разработчиками из Intel, наиболее полная, но особо ничем не блещет. Просто работает(tm). Внутри MesaLib драйвер называется ANV<br>
Поддержка Vulkan в MesaLib осуществляется разработчиками из Intel, наиболее полная, но особо ничем не блещет. Просто работает(tm). Внутри MesaLib драйвер называется ANV<br>. Также имеется отдельный драйвер для карт Gen7/Gen9 (Haswell/Ivy Bridge) под названием vulkan_intel_hasvk.


'''команды для установки:'''<ref>для MesaLib unstable пакет называется vulkan-intel</ref><br>
'''команды для установки:'''<ref>в сборке MesaLib c unsafe.ru пакет называется vulkan-intel или vulkan-intel_hasvk для GPU Gen7/Gen9</ref><br>
<source lang="text">
<source lang="text">
$ apt-get install xorg-dri-intel
$ apt-get install xorg-dri-intel
Строка 83: Строка 79:
$ apt-get install nvidia_glx_<ver>, где <ver> может быть 390.xx или 410.xx
$ apt-get install nvidia_glx_<ver>, где <ver> может быть 390.xx или 410.xx
</source>
</source>
'''версия для разрабочиков'''<ref>доступна там же, где и MesaLib unstable</ref><br>
'''версия для разрабочиков'''<ref>доступна там же, где и MesaLib с unsafe.ru</ref><br>
<source lang="text">
<source lang="text">
$ apt-get install nvidia_glx=<ver>, где <ver> может быть 415.xx и выше
$ apt-get install nvidia_glx=<ver>, где <ver> может быть 415.xx и выше
Строка 92: Строка 88:
<source lang="text">
<source lang="text">
$ apt-get install vulkan-tools
$ apt-get install vulkan-tools
$ vulkaninfo|less
$ vulkaninfo --summary
==========
==========
VULKANINFO
VULKANINFO
==========
==========


Vulkan Instance Version: 1.1.96
Vulkan Instance Version: 1.3.211
....
 
Device Properties and Extensions :
 
==================================
Instance Extensions: count = 20
GPU0
-------------------------------
VkPhysicalDeviceProperties:
...
===========================
 
         apiVersion     = 0x40105a  (1.1.90)
Devices:
         driverVersion = 79691875 (0x4c00063)
========
         vendorID       = 0x1002
GPU0:
         deviceID       = 0x7300
         apiVersion         = 4206796 (1.3.204)
         deviceType     = DISCRETE_GPU
         driverVersion     = 92274689 (0x5800001)
         deviceName     = AMD RADV FIJI (LLVM 9.0.0)
         vendorID           = 0x1002
....
         deviceID           = 0x7300
         deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
         deviceName         = AMD RADV FIJI
        driverID          = DRIVER_ID_MESA_RADV
        driverName        = radv
        driverInfo        = Mesa 22.0.1
        conformanceVersion = 1.2.7.1
        deviceUUID        = 00000000-0100-0000-0000-000000000000
        driverUUID        = 414d442d-4d45-5341-2d44-525600000000
 
</source>
</source>


[[Категория:Hardware]]
[[Категория:Hardware]]
[[Категория:GPU]]
[[Категория:GPU]]
[[Категория:Видеокарты]]

Текущая версия от 10:13, 27 июня 2024

Статус поддержки Vulkan API в Сизифе

Что такое Vulkan API?

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

Vulkan API изначально был известен как «новое поколение OpenGL» или просто «glNext», но после анонса компания отказалась от этих названий в пользу названия Vulkan. Как и OpenGL, Vulkan позволяет с высокой производительностью отображать на всех платформах в реальном времени различные приложения с 3D-графикой, такие как игры или интерактивные книги, а также обеспечивает более высокую производительность и меньшую нагрузку на процессор, аналогично Direct3D 12, Metal и Mantle. Vulkan основан на технологиях AMD в Mantle. На текущий момент для Linux существует т.н. Vulkan SDK, который представляет собой библиотеку для загрузки низкоуровневых драйверов (ICD loader), заголовочные файлы для разработчиков (Vulkan Headers), специальную библиотеку для проверки корректности работы всех компонентов (Validation layers).

Т.к. Vulkan API в чем-то схож с Direct3D, появилось достаточное количество трансляторов Direct3D->Vulkan, которые значительно улучшают качество поддержки игр и приложений Windows под Linux. Самый известный пример такого транслятора - DXVK, который реализует в wine поддержку D3D11 через Vulkan.

Vulkan часто используют как альтернативу для реализации 2D/3D-функций в графике; см., например, GTK+4 и Qt.

Текущая доступная версия спецификации API по состоянию на 27.06.2024 г.: 1.3.286
Текущая доступная версия ICD/Headers/Validation layers в Сизифе: 1.3.283

Уровень поддержки API на аппаратном уровне

Mesa - cм. сайт Mesa matrix Nvidia - см. Nvidia Vulkan Driver

AMD

Самая разнообразная поддержка, есть много вариантов, которые можно попробовать для различных приложений. Изначально поддержка Vulkan для AMD появилась в MesaLib, написана не разработчиками из AMD и называется RADV (RADeon Vulkan). В настоящий момент является наиболее стабильной, гарантировано поддерживается многими приложениями и играми, но не обладает всеми возможностями в отличие от оф. версии от AMD (AMDVLK/AMDGPU-PRO).
Также имеется экспериментальный драйвер для GPU предыдущего (R600) поколения, который входит в состав сборок MesaLib с unsafe.ru.

команды для установки:
RADV/MesaLib[1]

$ apt-get install xorg-dri-radeon

AMDGPU-PRO/AMDVLK

$ apt-get install vulkan-amdgpu

ВАЖНО В amdvlk начиная с 2021.Q3.x стали убирать поддержку старых (до-Polaris) GPU, поэтому для этих карт рекомендуется оставаться на RADV.

ВАЖНО В свежей версии AMDVLK появились новые экспериментальные расширения, которые можно включить указав переменную окружения AMDVLK_ENABLE_DEVELOPING_EXT=<val>, где <val> может принимать некоторые значения, см. оф. документацию.

ВАЖНО По умолчанию в AMDVLK отключено сохранение шейдерного кеша на диск, т.е. шейдеры компилируются каждый раз на сеанс. Сделано это для совместимости, т.к. проверка работоспособности есть не для всех приложений/игр. Если вы уверены, что ваше приложение поддерживает работу с шейдерным кэшем, можете включить его самостоятельно:

$ cat ~/.config/amdPalSettings.cfg 
ShaderCacheMode,2 // включить запись шейдерного кеша на диск

Убедиться, что кеш создался, можно проверив каталог $HOME/.cache, где должен создаться каталог AMD:

$ ll ~/.cache/AMD/LlpcCache/
total 7620
...

ВАЖНО В Mesa начиная с 20.x стала использоваться реализация компилятора шейдеров для Vulkan (ACO), которая написана при поддержке Valve и не использует LLVM. Судя по результатам тестов, она работает чуть быстрее, чем стандартная реализация на базе LLVM. Но как и любая оптимизация, иногда ACO может работать неправильно или вообще препятствовать нормальной работе. Работу ACO можно контролировать через след. переменные окружения:

# отключить ACO полностью и использовать LLVM для компиляции шейдеров
$ export RADV_DEBUG=llvm
# отключить оптимизации в коде ACO, решает 90% проблем в работе :)
$ ACO_DEBUG=noopt

Intel

Поддержка Vulkan в MesaLib осуществляется разработчиками из Intel, наиболее полная, но особо ничем не блещет. Просто работает(tm). Внутри MesaLib драйвер называется ANV
. Также имеется отдельный драйвер для карт Gen7/Gen9 (Haswell/Ivy Bridge) под названием vulkan_intel_hasvk.

команды для установки:[2]

$ apt-get install xorg-dri-intel

NVidia

Поддержка Vulkan появилась и в закрытых драйверах от Nvidia, причем предлагается несколько версий на выбор:

  • Стабильная версия из long-term и short-term версий драйверов
  • Экспериментальная для разработчиков, доступная отдельно.

команды для установки:
стабильная версия

$ apt-get install nvidia_glx_<ver>, где <ver> может быть 390.xx или 410.xx

версия для разрабочиков[3]

$ apt-get install nvidia_glx=<ver>, где <ver> может быть 415.xx и выше

ВАЖНО Начиная с версии 39x NVidia изменила компилятор шейдеров для Vulkan на SPIR-V, в связи с этим в некоторых приложениях замечено падение производительности или ошибки отрисовки. Вернуться на предыдущую версию компилятора шейдеров можно через указание переменной окружения __GL_NextGenCompiler=0

Проверка версии и возможностей ICD

$ apt-get install vulkan-tools
$ vulkaninfo --summary
==========
VULKANINFO
==========

Vulkan Instance Version: 1.3.211


Instance Extensions: count = 20
-------------------------------
...

Devices:
========
GPU0:
        apiVersion         = 4206796 (1.3.204)
        driverVersion      = 92274689 (0x5800001)
        vendorID           = 0x1002
        deviceID           = 0x7300
        deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName         = AMD RADV FIJI
        driverID           = DRIVER_ID_MESA_RADV
        driverName         = radv
        driverInfo         = Mesa 22.0.1
        conformanceVersion = 1.2.7.1
        deviceUUID         = 00000000-0100-0000-0000-000000000000
        driverUUID         = 414d442d-4d45-5341-2d44-525600000000
  1. в сборке MesaLib с unsafe.ru пакет называется vulkan-radeon
  2. в сборке MesaLib c unsafe.ru пакет называется vulkan-intel или vulkan-intel_hasvk для GPU Gen7/Gen9
  3. доступна там же, где и MesaLib с unsafe.ru