Ядро Linux 7.3 научилось самостоятельно инициализировать культовую видеокарту 1999 года, а энтузиаст уже запустил на ней Quake с аппаратным ускорением.
Пока индустрия соревнуется в трассировке лучей и нейронных шейдерах, находится народ, который возвращает к жизни железо из 90-х. На этот раз в центре внимания оказалась культовая 3dfx Voodoo 3 — видеокарта, выпущенная в 1999 году. В грядущем ядре Linux 7.3 появится обновление драйвера tdfxfb, которое позволит системе самостоятельно инициализировать ускоритель. И нет, это не просто «чтобы консоль работала». Экспериментальный 3D-стек уже гоняет на карте классический Quake.
Проблема, о которой никто не вспоминал 25 лет
Старый драйвер tdfxfb работал по принципу «карта уже готова к труду». На классических материнках с BIOS так и происходило: системная прошивка запускала видео-BIOS видеокарты еще до загрузки операционной системы, и Linux получал уже настроенное устройство. Но на современных платформах, нестандартных системах вроде Amiga или конфигурациях с несколькими видеокартами эта цепочка ломалась. Система видела PCI-устройство, но карта не выводила изображение, потому что её внутренности никто не инициализировал.
Именно с этим столкнулся разработчик Дэниел Палмер, когда пытался завести Voodoo 3 на Commodore Amiga 4000 с PCI-мостом Mediator. Linux определял видеокарту на шине, но монитор честно сообщал «нет сигнала». Пришлось браться за патчи.
Что меняет Linux 7.3
Новая версия драйвера считывает данные из собственного Video BIOS Voodoo 3 и выполняет необходимые процедуры запуска силами ядра. Проще говоря, Linux теперь сам «оживляет» карту, не надеясь на прошивку материнской платы. Linux берёт найденное PCI-устройство и превращает его в полноценный видеоадаптер. Патч уже протестировали на современной системе x86-64 и на той самой Amiga 4000. Обе — рабочие.
Правда, есть нюанс: в обновление вошла только Voodoo 3. Модели Voodoo 4 и Voodoo 5 на чипе VSA-100 имеют другую структуру BIOS, поэтому их поддержку Палмер приберегает для отдельного патча.
Не только framebuffer: возвращение 3D
Сразу отрезвим тех, кто ждет полноценного воскрешения: tdfxfb остаётся драйвером framebuffer и годится в основном для вывода изображения и текстовой консоли. Никакого современного графического стека — Mesa и Wayland мимо, DRM/KMS мимо. Но Палмер на этом не остановился.
Гораздо интереснее его отдельный экспериментальный интерфейс /dev/tdfx3d, который открывает программам прямой путь к 3D-движку Voodoo 3. Поверх него работают библиотеки smoltdfx и smolminigl — компактная открытая реализация OpenGL 1.x, которой не нужны ни X11, ни Mesa, ни даже фирменный Glide. Всё максимально минималистично.
И это работает. Voodoo 3 запускает Quake с аппаратным 3D-рендерингом. Производительность пока не идеальна, часть функций (вроде мультитекстурирования) ещё в разработке, но сам факт впечатляет.
Как тестируют то, чему 27 лет
Для отладки Палмер создал эмулятор Voodoo 3 под QEMU. И вот тут начинается магия: одинаковые сцены одновременно запускаются на эмуляторе и на реальной видеокарте, после чего кадры автоматически сравниваются. Так находятся расхождения в реализации. Помогал в этом ассистент Claude — ИИ, который явно не ожидал, что его припашут к отладке железа эпохи Y2K.
В перспективе эмулятор открывает забавную возможность: теоретически PCI-версию Voodoo 3 можно передавать виртуальной машине с Windows 98 через PCI passthrough. Тогда классические игры будут крутиться на оригинальном «железе», а не на программных эмуляциях. Для фанатов ретро-ПК это настоящий подарок.
Итог: легенда жива
Linux 7.3 не делает Voodoo 3 современной видеокартой, и это нормально. Зато новая поддержка убирает давнее ограничение, мешавшее использовать легендарный ускоритель на нестандартных системах. А экспериментальный открытый 3D-стек уже дал карте вторую жизнь — и даже позволил снова запускать Quake. Четверть века после смерти компании, а школьный учитель из 1999 года всё ещё может показать, как надо работать с железом.