Драйвер AMD с открытым исходным кодом для Vulkan® — это драйвер Vulkan с открытым исходным кодом для графических адаптеров Radeon™ в Linux®. Он построен на основе библиотеки абстракции платформы AMD (PAL), общего компонента, предназначенного для инкапсуляции определенного оборудования и деталей программирования, специфичных для ОС, для многих 3D- и вычислительных драйверов AMD. Использование PAL может помочь обеспечить единообразную работу на всех платформах, включая поддержку недавно выпущенных графических процессоров и совместимость с инструментами разработчика AMD.
Шейдеры, составляющие конкретный объект VkPipeline
, компилируются как единый объект с использованием библиотеки компилятора конвейеров на основе LLVM (LLPC). LLPC опирается на существующую инфраструктуру компиляции шейдеров LLVM для графических процессоров AMD для создания объектов кода, совместимых с конвейером ABI PAL. Примечательно, что драйвер Vulkan с закрытым исходным кодом AMD в настоящее время использует другой компилятор конвейера, что является основным отличием между драйверами Vulkan с открытым и закрытым исходным кодом AMD.
Драйвер AMD с открытым исходным кодом для Vulkan предназначен для поддержки следующих графических процессоров AMD:
Примечание. Для графических процессоров до GFX10 используйте версию v-2023.Q3.3 или более раннюю версию.
Драйвер AMD с открытым исходным кодом для Vulkan предназначен для поддержки следующих дистрибутивов и версий как в стеке восходящих драйверов AMDGPU, так и в стеке драйверов AMDGPU Pro:
Драйвер не был тщательно протестирован на других дистрибутивах и версиях. Вы можете попробовать его в других дистрибутивах и версиях по вашему выбору.
Примечание. Чтобы запустить драйвер Vulkan со стеком восходящих драйверов AMDGPU на графических процессорах поколений SI и CI, в ядре необходимо включить amdgpu.si_support и amdgpu.cik_support.
Драйвер AMD с открытым исходным кодом для Vulkan предназначен для поддержки следующих функций:
Следующие функции и улучшения запланированы в будущих выпусках (пожалуйста, обратитесь к примечаниям к выпуску для обновления каждого выпуска):
uname -r
uname -r
или sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Вы можете присылать свой код для драйвера AMD с открытым исходным кодом для Vulkan.
Драйвер собран из исходного кода в пяти репозиториях: LLVM, XGL, LLPC, GPURT и PAL.
Для внесения изменений в LLVM вам следует внести свой вклад в магистраль LLVM. Коммиты там будут периодически оцениваться для слияния с веткой amd-gfx-gpuopen-master.
Для внесения изменений в XGL, LLPC, GPURT и PAL создайте запрос на включение в ветку dev . После того как ваше изменение будет проверено и принято, оно будет оценено для включения в главную ветку при последующем регулярном повышении.
ВАЖНО : Создавая запрос на включение, вы соглашаетесь разрешить лицензирование вашего вклада владельцами проекта в соответствии с условиями лицензии MIT.
При работе с XGL, LLPC, GPURT и PAL ваш код должен:
Пожалуйста, делайте каждый вклад разумно небольшим. Если вы хотите внести большой вклад, например, создать новую функцию или расширение, сначала поднимите вопрос, чтобы можно было спланировать оценку и обзор вашей работы.
Примечание. Поскольку PAL является общим компонентом, который должен поддерживать другие API, другие операционные системы и предсерийное оборудование, вас могут попросить пересмотреть изменения PAL по причинам, которые могут быть неочевидны с точки зрения чистого драйвера Linux Vulkan.
В вашей системе сборки рекомендуется установить не менее 16 ГБ ОЗУ.
sudo apt-get install build-essential cmake curl g++-multilib gcc-multilib git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml
sudo apt-get install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
dpkg --add-architecture i386
sudo apt-get install libssl-dev:i386 libx11-dev:i386 libxcb1-dev:i386 libxcb-dri3-dev:i386 libxcb-dri2-0-dev:i386 libxcb-present-dev:i386 libxshmfence-dev:i386 libwayland-dev libwayland-dev:i386 libxrandr-dev:i386
sudo yum -y install openssl-devel gcc-c++ python3 python3-pip curl glibc-devel libstdc++-devel libxcb-devel libX11-devel libxshmfence-devel libXrandr-devel wayland-devel
pip3 install jinja2 ruamel.yaml
sudo yum -y install openssl-devel.i686 gcc-c++ python3 python3-pip curl glibc-devel.i686 libstdc++-devel.i686 libxcb-devel.i686 libX11-devel.i686 libxshmfence-devel.i686 libXrandr-devel.i686 wayland-devel.i686
pip3 install jinja2 ruamel.yaml
Для создания поддержки трассировки лучей необходимо установить инструменты компилятора шейдеров, такие как DirectXShaderCompiler и glslang.
Рекомендуется устанавливать их из VulkanSDK 1.3.290 или выше.
Ubuntu 22.04 (Джемми)
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
sudo apt update
sudo apt install vulkan-sdk
Получите исходный код DirectXShaderCompiler и glslang и создайте инструменты локально.
#!/bin/bash
if [ ! -d DirectXShaderCompiler ]; then
git clone --depth=1 -b release-1.8.2403 https://github.com/microsoft/DirectXShaderCompiler.git
fi
if [ ! -d glslang ]; then
git clone --depth=1 -b vulkan-sdk-1.3.290.0 https://github.com/KhronosGroup/glslang.git
fi
cd DirectXShaderCompiler
git submodule init
git submodule update
cmake -H. -Bbuilds -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake
cmake --build builds
cd ..
cd glslang
cmake -H. -Bbuilds -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='builds/install'
cd builds
make -j8 install
cd ../../
Установите env PATH и LD_LIBRARY_PATH перед сборкой драйвера amdvlk.
export PATH=/builds/bin:/install/bin:$PATH
export LD_LIBRARY_PATH=/builds/lib:$LD_LIBRARY_PATH
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:"$PATH"
mkdir vulkandriver
cd vulkandriver
repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master
repo sync
Примечание. Исходный код в ветке dev можно получить, указав «-b dev» в команде «repo init».
cmake -G Ninja -S xgl -B builds/Release64
cmake --build builds/Release64
cmake -G Ninja -S xgl -B builds/Release32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
cmake --build builds/Release32
Примечание
- Для отладочной сборки используйте
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(связывание отладочной сборки llvm требует очень много памяти, поэтому мы используем только два параллельных задания).- Если вы хотите создавать инструменты (например, amdllpc) вместе с драйвером, добавьте
-m build_with_tools.xml
в init репозитория и добавьте параметр сборки-DXGL_BUILD_TOOLS=ON
.
Вы можете скачать и установить пакет SDK здесь.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
Если вы хотите установить драйвер в настроенный каталог, вы можете добавить «-DCMAKE_INSTALL_PREFIX={каталог установки}» в команду сборки cmake. Файлы JSON будут установлены в /etc/vulkan/icd.d, а другие файлы будут установлены в указанный вами каталог установки.
Если в системе также установлен RADV, драйвер AMDVLK будет включен по умолчанию после установки. Вы можете переключить драйвер между AMDVLK и RADV с помощью переменной среды AMD_VULKAN_ICD = AMDVLK или RADV.
Примечание. Остальные шаги необходимы только при запуске стека восходящих драйверов AMDGPU.
Добавьте следующие строки в /usr/share/X11/xorg.conf.d/10-amdgpu.conf:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
И убедитесь, что следующая строка НЕ включена в раздел:
Driver "modesetting"
В стеке восходящих драйверов AMDGPU с версией libdrm ниже 2.4.92 максимальное количество IB на отправку ДОЛЖНО быть ограничено до 4 (настройка по умолчанию в драйвере AMD с открытым исходным кодом для Vulkan — 16). Это можно сделать с помощью механизма настроек времени выполнения, добавив в amdPalSettings.cfg следующую строку:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
Вы можете создать установочный пакет с помощью следующей команды при сборке драйвера:
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
Вы также можете загрузить готовый пакет с https://github.com/GPUOpen-Drivers/AMDVLK/releases для каждого продвижения кода в основной ветке.
Ниже представлена инструкция по установке:
sudo dpkg -r amdvlk # If old version is installed on the machine, remove it first
sudo dpkg -i amdvlk_x.x.x_amd64.deb
sudo apt-get -f install
sudo rpm -e amdvlk # If old version is installed on the machine, remove it first
sudo rpm -i amdvlk-x.x.x.x86_64.rpm
Для Ubuntu вы также можете установить последнюю версию драйвера с https://repo.radeon.com:
sudo wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main > /etc/apt/sources.list.d/amdvlk.list'
sudo apt-get remove amdvlk # If old version is installed on the machine, remove it first
sudo apt update
sudo apt-get install amdvlk
Драйвер предоставляет множество настроек, которые позволяют настроить поведение драйвера и облегчить отладку. Вы можете добавлять/редактировать настройки в файле amdVulkanSettings.cfg или amdPalSettings.cfg по одному из следующих путей, отформатированных с использованием одного name,value
в строке:
Некоторые примеры настроек перечислены ниже:
Имя настройки | Допустимые значения | Комментарий |
---|---|---|
AllowVkPipelineCachingToDisk | 0: запретить 1: по умолчанию | 1 — значение по умолчанию, которое включает кэширование Pal на основе архивных файлов. Архивный файл хранится в папке ~/.cache/AMD/VkCache. |
ShaderCacheMode | 0: отключить кеш 1: кэш времени выполнения 2: кэш на диск | Кэш времени выполнения — это режим по умолчанию. Для «кеша на диск» файл кэша создается в папке $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache или $XDG_CACHE_HOME/AMD/LlpcCache или $HOME/.cache/AMD/LlpcCache. |
IFH | 0: по умолчанию 1: удалить все отправки | Бесконечно быстрое оборудование. Вызовы отправки сбрасываются перед отправкой на оборудование. Полезно для измерения производительности, ограниченной процессором. |
EnableVmAlwaysValid | 0: отключить 1: по умолчанию 2: принудительное включение | 1 — это настройка по умолчанию, которая включает функцию «всегда действительна виртуальная машина» для ядра 4.16 и выше. Эта функция может снизить накладные расходы на отправку команд в буфер, связанные с управлением виртуальной памятью. |
IdleAfterSubmitGpuMask | Битовая маска графических процессоров (т. е. бит 0 — это GPU0 и т. д.) | Заставляет ЦП немедленно ожидать завершения каждой отправки графического процессора на указанном наборе графических процессоров. |
Все доступные настройки можно определить, изучив ниже исходные файлы, которые их определяют.
Настройки времени выполнения считываются только при инициализации устройства и не могут быть изменены без перезапуска приложения. Если вы работаете в системе с несколькими графическими процессорами, ко всем из них будут применяться одни и те же настройки. Строки в файле настроек, начинающиеся с ;
будут рассматриваться как комментарии.
Разрабатываемые расширения по умолчанию не включены в драйвере. Вы можете включить их через переменную среды:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
или
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
Имя расширения не чувствительно к регистру.
GpuProfiler — это дополнительный уровень, предназначенный для перехвата интерфейса PAL и обеспечения базовой поддержки профилирования графического процессора. В настоящее время этот слой управляется исключительно через настройки времени выполнения и выводит результаты в файл.
Вы можете использовать следующие настройки времени выполнения для создания файлов .csv с таймингами работы графического процессора, выполняемой во время определенных кадров приложения (один файл для каждого кадра):
Имя настройки | Ценить | Комментарий |
---|---|---|
GpuProfilerMode | 0: отключить 1: включить с выключенным sqtt 2: включить с помощью sqtt трассировку потока 3: включить с помощью sqtt для RGP | Включает и устанавливает режим SQTT для уровня профилировщика производительности графического процессора. Фактический захват данных о производительности должен быть указан через номер кадра с помощью GpuProfilerConfig_StartFrame или нажатием клавиши Shift-F11. |
GpuProfilerConfig.LogDirectory | <путь к каталогу> | Путь к каталогу указывается относительно $AMD_DEBUG_DIR, $TMPDIR или /var/tmp/, значение по умолчанию — «amdpal/». Ваше приложение должно иметь права на запись в каталог. Журналы профилирования выводятся в подкаталог с именем в формате |
GpuProfilerConfig.Granularity | 0: за розыгрыш 1: для каждого cmdbuf | Определяет, что измеряется/профилируется. Для каждой отрисовки время отдельных команд (таких как отрисовка, отправка и т. д.) внутри командных буферов, тогда как для каждого cmdbuf профилируются только целые командные буферы в совокупности. |
GpuProfilerConfig.StartFrame | Положительное целое число | Первый кадр для захвата данных. Если StartFrame и FrameCount не заданы, профилируются все кадры. |
GpuProfilerConfig.FrameCount | Положительное целое число | Количество кадров для захвата данных. |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | Собирает данные запроса статистики конвейера для каждой записи, если этот параметр включен. |
Вы можете использовать скрипт TimingReport.py для анализа журнала профилирования:
python timingReport.py
Вывод timeReport.py включает информацию о верхних конвейерах, как показано ниже:
Top Pipelines (>= 1%)
Compiler Hash | Type | Avg. Call Count | Avg. GPU Time [us] | Avg. Frame %
1. 0xd91d15e42d62dcbb | VsPs | 43 | 11,203.15 | 10.20 %
2. 0x724e9af55f2adf1b | Cs | 1 | 9,347.50 | 8.51 %
3. 0x396e5ad6f7a789f7 | VsHsDsPs | 468 | 8,401.35 | 7.65 %
Вы можете добавить следующие настройки в amdPalSettings.cfg, чтобы выгружать информацию каждого конвейера:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir — это подпуть относительно $AMD_DEBUG_DIR или $TMPDIR или /var/tmp/, значение по умолчанию — «spvPipeline/». Файл дампа конвейера имеет имя в формате Pipeline
Оверлей отладки PAL можно включить для отображения статистики и информации в реальном времени поверх работающего приложения. Сюда входит среднее значение FPS, время кадра процессора и графического процессора, а также реестр, отслеживающий, сколько видеопамяти было выделено из каждой доступной кучи. Бенчмаркинг (т. е. «Бенчмарк (F11)») в настоящее время не поддерживается.
Имя настройки | Ценить | Комментарий |
---|---|---|
DebugOverlayEnabled | 0, 1 | Включает наложение отладки. |
DebugOverlayConfig.DebugOverlayLocation | 0: вверху слева 1: вверху справа 2: внизу слева 3: внизу справа | Определяет, где должен отображаться накладываемый текст. Может использоваться, чтобы избежать конфликтов с важным рендерингом приложения. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | Сообщает текущий номер кадра. Полезно при определении подходящего диапазона кадров для профилирования с помощью слоя GpuProfiler. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | Включает отрисовку графика последнего времени кадров процессора и графического процессора. |
Драйвер AMD с открытым исходным кодом для Vulkan содержит код, написанный третьими лицами.
Информация, содержащаяся здесь, предназначена только для информационных целей и может быть изменена без предварительного уведомления. Этот документ может содержать технические неточности, упущения и опечатки, и AMD не обязана обновлять или иным образом исправлять эту информацию. Компания Advanced Micro Devices, Inc. не делает никаких заявлений и не дает никаких гарантий в отношении точности или полноты содержания настоящего документа и не принимает на себя никакой ответственности, включая подразумеваемые гарантии ненарушения прав, коммерческой ценности или пригодности для конкретных целей в отношении эксплуатация или использование оборудования, программного обеспечения или других продуктов AMD, описанных здесь. Настоящий документ не предоставляет никакой лицензии, в том числе подразумеваемой или возникающей в результате возражения, на какие-либо права интеллектуальной собственности. Условия и положения, применимые к покупке или использованию продуктов AMD, изложены в подписанном соглашении между сторонами или в Стандартных условиях продажи AMD.
AMD, логотип AMD Arrow, Radeon, FirePro и их комбинации являются товарными знаками Advanced Micro Devices, Inc. Другие названия продуктов, используемые в данной публикации, предназначены только для целей идентификации и могут быть товарными знаками соответствующих компаний.
Vega — это кодовое название архитектуры AMD, а не название продукта.
Linux является зарегистрированной торговой маркой Линуса Торвальдса в США и других странах.
Vulkan и логотип Vulkan являются зарегистрированными торговыми марками Khronos Group, Inc.