Компания AMD открыла исходные тексты драйвера AMDVLK с полной реализацией графического API Vulkan 1.0. Драйвер поставлялся в составе проприетарного набора драйверов AMDGPU-PRO и конкурировал с изначально открытым Vulkan-драйвером RADV, развиваемым проектом Mesa. Код драйвера AMDVLK открыт под лицензией MIT.
Новый открытый драйвер реализован с использованием прослойки PAL (Platform Abstraction Library), предоставляющей унифицированный набор средств для доступа к оборудованию и низкоуровневым функциям операционной системы. Прослойка применяется в драйверах AMDGPU-PRO для Linux и Windows и создана для абстрагирования взаимодействия высокоуровневого драйвера с операционными системами, GPU и инструментами разработки. Для взаимодействия с оборудованием PAL обращается к встроенному в ядро Linux штатному DRM-модулю amdgpu, который также используется драйверами Mesa.
Ключевым компонентом драйвера является компонент XGL (Vulkan API Layer), который занимается трансляцией команд API Vulkan в универсальные команды прослойки PAL, которые затем могут быть переданы для обработки в GPU. Для компиляции шейдеров применяется основанный на наработках проекта LLVM компилятор LLPC (LLVM Pipeline Compiler), который генерирует на выходе объекты VkPipeline, совместимые с ABI PAL. LLPC объединяет в себе три компонента:
- Транслятор промежуточного представления шейдеров SPIR-V в LLVM IR с дополнительными метаданными;
- Lower для трансляции полученного промежуточного кода LLVM IR с метаданными в вызовы функций;
- Patcher для замены всех внешних вызовов функций на вызовы, соответствующие PAL Pipeline ABI.
Основные возможности драйвера:
- Поддержка Vulkan 1.0 и более 30 расширений Vulkan;
- Возможность использованием системы трассировки Radeon GPUProfiler;
- Встроенные инструменты для отладки и профилирования;
- Упреждающий разбор буфера промежуточных команд и виртуализация SR-IOV;
- Поддержка серий GPU:
- Radeon HD 7000
- Radeon HD 8000M
- Radeon R5/R7/R9 200/300
- Radeon RX 400/500
- Radeon M200/M300/M400
- Radeon RX Vega
- AMD FirePro Workstation Wx000/Wx100/Wx300
- Radeon Pro WX x100
- Radeon Pro 400/500
Запланированные на будущее возможности:
- Поддержка находящихся в разработке спецификаций Vulkan API;
- Использование аппаратных счётчиков производительности для сбора информации через RenderDoc;
- Оптимизация LLPC для сокращения времени компиляции и увеличения производительности, упирающейся в возможности GPU;
- Оптимизация производительности операций, выполняемых на CPU;