С чего начался проект
28 июля 2026 года инженер Collabora Луи-Франсис Ратте-Булиан (Louis-Francis Ratte-Boulianne) опубликовал отчёт о переносе RADV на Windows. Работы профинансировала Valve – компания уже несколько лет содержит штат разработчиков, занятых RADV и остальным графическим стеком Linux, а теперь дополнительно оплатила исследовательскую фазу проекта у Collabora.
RADV – открытый драйвер Vulkan для видеокарт AMD, входящий в состав Mesa. На Linux он давно стал основным: в сентябре 2025 года AMD закрыла собственный проект AMDVLK на базе библиотеки PAL и передала роль официального открытого драйвера Vulkan именно RADV. На нём же работают Steam Machine и Steam Deck.
На Windows у владельцев Radeon альтернативы нет – доступен только проприетарный AMD Radeon Software Adrenalin. Цель проекта – дать Windows ту же реализацию Vulkan, что уже проверена на Linux.
Зачем переносить RADV на Windows
Collabora перечисляет доводы:
- единая кодовая база для обеих систем;
- упрощённая отладка и эксперименты с драйвером;
- быстрый выпуск исправлений;
- возможность для сообщества и разработчиков игр сообщать о проблемах и присылать правки, которые попадут ко всем пользователям независимо от операционной системы.
Как проект дошёл до запуска первой игры
Основу заложила Фейт Экстранд (Faith Ekstrand): она первой проверила принципиальную возможность запуска RADV на Windows и представила результаты на конференции XDC 2024.
Ключевой тезис её доклада: начиная с Windows 10 интерфейс WDDM2 задаёт понятную модель взаимодействия драйвера пользовательского режима (UMD) с операционной системой и драйвером режима ядра (KMD), поэтому сторонний драйвер туда встроить реально. Но вызовы D3DKMT могут переносить приватные данные драйвера – непрозрачные блоки, формат которых полностью определяет производитель. Это жёстко связывает UMD и KMD между собой, а сам интерфейс нигде не описан.
Чтобы обойти проблему, Экстранд написала утилиту wddm2-pdd-re, которая протоколирует вызовы WDDM2 и содержимое приватных данных для приложений D3D12. По этим журналам удалось восстановить достаточную часть закрытого интерфейса – запрос сведений об адаптере, выделение буферов, создание очередей и отправку команд – и вывести на экран вращающуюся трёхмерную модель.
Collabora продолжила работу с тремя задачами: сделать код гибче (убрать жёстко заданные значения ради поддержки разного железа), перенести его на Windows без обязательной прослойки WSL и добиться устойчивости – прежняя сборка падала через две минуты тестов deqp-vk.
Что сделано:
- переработана обработка потоков команд и синхронизация;
- добавлена поддержка разреженных привязок (sparse bindings), тесселяции и task-шейдеров;
- реализован динамический запрос свойств графического процессора;
- запущена первая игра – Counter-Strike 2. Переключение на Vulkan выполняется аргументом запуска
-vulkan.
С какими трудностями столкнулись разработчики
Разные поколения видеокарт
Collabora экспериментировала на Radeon RX 7900 XT, тогда как Экстранд работала с Radeon RX 7800 XT. Из-за архитектурных различий результаты долго не воспроизводились: система зависала при любой операции сложнее очистки поверхности заранее заданным цветом.
Инструментов для разбора таких зависаний на Windows не существует, поэтому утилиту обратной разработки пришлось превратить в полноценный слой протоколирования WDDM2. Он способен анализировать любое приложение, запущенное на официальном драйвере Vulkan, и выгружать потоки команд, значения регистров и код шейдеров.
Компилятор MSVC
Mesa разрабатывается с расчётом на GCC и Clang, и часть допущений в коде под MSVC не работает. Пример из отчёта: MSVC иначе трактует перечисления – может считать значение знаковым и ограничить его 32 битами, что приводит к неожиданному поведению.
Вызов D3DKMTEscape
WDDM2 позволяет производителю добавлять собственные обработчики через метод D3DKMTEscape, содержимое которого не структурировано вообще никак. Единственное ограничение – такой вызов не должен дублировать уже стандартизированный. Пока эти вызовы удалось проигнорировать: судя по всему, они отвечают за дополнительные возможности вроде рендеринга на нескольких графических процессорах.
Главное препятствие
Собственный драйвер режима ядра разработчики писать не собираются, значит RADV обязан общаться с драйвером AMD. Сейчас это общение построено на восстановленных методом обратной разработки приватных структурах данных, что ненадёжно по своей природе: UMD и KMD поставляются единым комплектом без гарантий обратной совместимости, поэтому структуры могут меняться от выпуска к выпуску без предупреждения.
Для превращения проекта в поддерживаемый продукт нужно одно из двух:
- стабильный документированный интерфейс к проприетарному драйверу режима ядра;
- прослойка (shim), которая берёт на себя обмен приватными данными с KMD и даёт RADV неизменную точку опоры, пока формат блоков меняется.
Что ещё предстоит сделать
Второй крупный участок работ – вывод кадров на экран. Джесси Натали (Jesse Natalie) ранее реализовал часть WSI для Windows в рамках драйвера Dozen, но RADV пока умеет только медленный путь через центральный процессор.
- Следующий шаг – задействовать цепочки буферов DXGI. Для этого нужно научиться импортировать изображение из D3D12, а это снова непрозрачные метаданные.
- Дальше идёт обмен буферами без копирования (zero-copy). По оценке Collabora, для приложений, не упирающихся в графический процессор, выигрыш может достигать трёхкратного.
- Последний шаг невозможен без прямого участия AMD и, вероятно, Microsoft – есть ограничения, связанные с совместным использованием изображений.
Исходный код проекта
Наработки лежат в отдельной ветке wddm2 репозитория Mesa на GitLab freedesktop.org. Это экспериментальный код без гарантий работоспособности, в основную ветку Mesa он не принят.
Смотрите также
- Релиз Mesa 26.0 улучшает производительность трассировки лучей в драйвере RADV для видеокарт AMD
- Графический стек Mesa для Linux получил новые улучшения трассировки лучей для видеокарт AMD
- Valve рассказала о поставках Steam Machine, поддержке FSR 4.1 и открыла CAD-файл корпуса
- Proton 10 и Proton 11 получили поддержку Steamworks SDK 1.65 для Steam Machine, Steam Frame и Steam Deck
