3dfx умерла четверть века назад, но Voodoo 3 еще не забыта
Linux 7.3 получит неожиданное обновление для одной из самых культовых видеокарт в истории — 3dfx Voodoo 3, выпущенной в 1999 году. Спустя более четверти века ядро ОС сможет самостоятельно запускать ускоритель даже на компьютерах, BIOS которых не умеет инициализировать старую видеопрошивку.

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