Как ранее сообщалось, на проходящей в городе Бордо (Bordeaux, Франция) конференции XDC компания AMD собиралась анонсировать новую стратегию разработки графический драйверов для Linux. Разработчики AMD сдержали свои обещания и представили наглядные слайды, описывающие их видение процесса, проблемы встреченные на этом пути и дальнейшие планы.
Основная идея изменений сводится к тому, что выполняемый на уровне ядра модуль и его "обвязка", касающаяся DRM и KMS, будет целиком базироваться на открытом коде. Разработчики называют такой подход "Base Graphics", а драйвер получил название "amdgpu". Эта часть будет основана на уже существующем коде Radeon. Тем не менее, это скорее всего коснется только новых GPU, предположительно начиная с серии Pirate Islands. Отмечается, что обкатка идей на уровне прототипа делается на уже существующих GPU семействах Sea Islands.
Важным изменением станет то, что теперь работающая на уровне ядра открытая часть драйвера станет разрабатываться параллельно с разработкой нового оборудования, с использованием инженерных прототипов и взаимодействием с командой разработчиков оборудования. В "классический" Catalyst поддержка новых GPU скорее всего добавляться не будет - вместо этого будет развиваться драйвер amdgpu, за основу которого будет взят Radeon.
Пользуясь случаем, дополнительно можно отметить планы реорганизации устройства драйвера, работающего на уровне ядра. Теперь вместо множественных ветвей кода (code paths), различных для разных чипов, деление на компоненты драйвера будет выполняться на основе версий IP-блоков (IP, Intellectual Property) оборудования (например, декодера UVD) и для каждой версии будет будет своя реализация работы с этим блоком. При взаимодействии с тем или иным чипом драйвер будет задействовать модули, соответствующие версиям блоков из которых состоит чип.
По мнению сотрудников AMD можно выделить 3 варианта графического стека на основе этого подхода:
- Полностью открытый стек ("All Open"): открытый драйвер уровня ядра, библиотека drm и run-time KFD и HSA. С ними взаимодействуют компоненты MESA, DDX драйвер, различные state tracker Gallium-а и так далее, в основном отмечаются VA-API, VDPAU, clover OpenCL, OpenMAX и реализация OpenGL из MESA. В таком виде графический стек достаточно похож на уже существующие R600g/RadeonSI.
- "Non pro". Обычный графический стек для игровых десктопов и тому подобных применений. От предыдущего отличается в основном заменой реализации OpenGL и OpenCL проприетарными компонентами. Проприетарные компоненты взаимодействуют с упомянутой подсистемой "Base Graphics" аналогично открытым компонентам, используя те же интерфейсы. Ожидается, что никаких доработок открытой части графического стека не потребуется - компоненты должны работать поверх основных реализаций и не требовать для себя никаких изменений. DDX-драйвер открытый и является тем же драйвером, что и в варианте "All Open".
- "Pro". Нацелен на сегмент графических станций, использующих профессиональные адаптеры семейства FirePro. По устройству аналогичен предыдущему стеку, однако в открытых компонентах могут быть дополнения, специфичные для FirePro. Они будут с открытым исходным кодом, однако неизвестно насколько это получится интегрировать в mainline-версии компонентов (например, в mainline ядре Linux разработчики отрицательно относятся к коду который нужен только проприетарным компонентам в user space). В крайнем случае такие компоненты будут оформлены отдельными открытыми компонентами.
Сложности с которыми пришлось столкнуться разработчикам:
- Плохая/неполная/неточная документация по работе оборудования, форматам пакетов и прочего.
- Код Catalyst закрытый и открыт не будет.
- На данный момент юридический отдел проводит рецензирование открываемого кода и документации, что тормозит процесс разработки открытых компонентов. Теперь открытые компоненты будут разрабатываться параллельно с разработкой новых чипов. Ожидается, что это приведет к тому, что на момент выпуска чипа он уже будет поддерживаться открытым драйвером.
- Внутренние разработчики AMD не имеют опыта работы "на публику". Предполагается, что будет некий переходный период ("ramp up"), при котором внутренние сотрудники не будут напрямую работать с открытыми репозиториями, а разработчики открытых драйверов постепенно введут их в курс дела.
Почему не все компоненты открыты:
- Некоторым потребителям ряд возможностей нужны уже сегодня, из таких возможностей отмечается полная реализация OpenCL и OpenGL. Открывать эти реализации не планируется из-за опасений, что конкуренты могут использовать ряд трюков в своих продуктах. Тем не менее, отмечается, что в будущем планируется переносить фокус в сторону открытых компонентов.
Текущее состояние дел:
- Прототип драйвера amdgpu уже существует и отлаживается на семействе Sea Islands. Более новые семейства GPU, в частности, Pirate Islands, скорее всего не будут добавляться в классический Catalyst и вместо этого для них будет выпущен драйвер amdgpu.
Разработчики отмечают заинтересованность в ответной реакции сообщества. Их интересуют пожелания к возможностям нового драйвера, мнения на чем сфокусироваться, участие в тестировании и в целом улучшение взаимодействия с другими открытыми проектами.