Ядро Linux 7.3 готовит неожиданно ностальгическое обновление для 3dfx Voodoo 3 — одной из самых узнаваемых видеокарт конца 1990-х. Не стоит слишком радоваться: venerable PCI- и AGP-ускоритель внезапно не получит современный графический стек Linux, но существующий framebuffer-драйвер tdfxfb обновляется, чтобы он мог инициализировать Voodoo 3 самостоятельно, а не полагаться на то, что системная прошивка уже запустила видео-BIOS карты. Это небольшое изменение с удивительно конкретной целью, которое иллюстрирует, почему древнее «железо» иногда получает внимание в современном Linux.
Проблема в том, что драйвер tdfxfb исторически предполагал, что карта Voodoo уже инициализирована прошивкой ПК. Во времена его написания это было разумным допущением для обычного x86-ПК. Системная прошивка выполняла видео-BIOS карты во время загрузки, настраивала оборудование и передавала Linux уже готовое к отображению изображения. Это допущение перестаёт работать на новых и необычных платформах, где прошивка не может или не выполняет VGABIOS. В описании патча автор особо упоминает не-x86 компьютеры, системы, где основная видеокарта другая, и новые BIOS, которые не могут запустить старый видео-BIOS.
Разработчик патчей, Дэниел Палмер, использовал Voodoo 3 в Amiga 4000 с мостом PCI, когда возникла проблема. Linux мог обнаружить карту, но Voodoo оставалась полностью неинициализированной, оставляя его с сообщением «нет сигнала». Новый код использует информацию конфигурации из собственного видео-BIOS карты для выполнения инициализации из Linux, что позволяет драйверу запустить VGA-ядро и установить рабочий дисплей без зависимости от системной прошивки. Пока новый код ручной инициализации нацелен именно на Voodoo 3; изначально он отмечал поддержку карт Voodoo 4 и 5 на базе VSA-100, но их BIOS имеют другую структуру, поэтому поддержка была удалена из текущей серии патчей. Код протестирован как на современной системе x86-64, так и на Amiga 4000 с мостом Mediator PCI.
На обычном современном x86-64 ПК с установленной Voodoo 3 практический результат довольно скромен. Загрузите tdfxfb — и вы получите работающее устройство framebuffer Linux, обычно доступное как /dev/fb0, при этом Voodoo управляет дисплеем, на котором может отображаться виртуальная консоль Linux. Иными словами, этого достаточно, чтобы превратить Voodoo из «устройства PCI, которое Linux может опознать» в настоящий видеоадаптер, способный выводить пиксели на экран, даже если прошивка не инициализировала его заранее. Приложения, умеющие работать с интерфейсом framebuffer Linux, также могут рисовать на нём, как и на других старых framebuffer-устройствах.
Однако здесь же становятся очевидны и ограничения этой работы. Linux fbdev — это устаревший графический интерфейс, давно заменённый инфраструктурой DRM/KMS, так что это не воскрешение Voodoo 3 в качестве современного GPU Linux. Загрузка tdfxfb не даёт вам стек Mesa, современный OpenGL, ускорение Wayland или ту 3D-функциональность, которую можно было бы ожидать. Это, по сути, очень старомодная схема «выплевывания пикселей на дисплей», но она достаточно полезна для консоли Linux, встраиваемых framebuffer-приложений и, видимо, для людей, устанавливающих экзотические PCI-видеокарты в ещё более экзотические старые компьютеры, но это вряд ли веская причина устанавливать Voodoo 3 в современный настольный ПК.
Более интересная часть заключается в том, что Палмер работает над отдельным 3D-путем для Voodoo 3, и эта работа уже продвинулась гораздо дальше, чем можно предположить по одному лишь framebuffer. Экспериментальный интерфейс открывает доступ к регистровому пространству Voodoo через новое misc-устройство /dev/tdfx3d, чей интерфейс mmap() позволяет программам напрямую программировать 3D-оборудование карты. Поверх этого расположена smoltdfx — крошечная пользовательская библиотека для управления Voodoo 3, и smolminigl — небольшая реализация OpenGL 1.x, построенная на её основе. Палмер говорит, что тестировал проект на реальном оборудовании Voodoo 3, и он может рендерить напрямую через регистры карты без X, Mesa или Glide.
Палмер разрабатывает эту работу параллельно с эмуляцией Voodoo 3 в QEMU. Разработчик говорит, что Клод помог изначально построить эмулятор для отладки проблемы с запуском карты на его Amiga. Теперь тестовые программы могут запускаться как на эмулированной карте, так и на реальном оборудовании, а различия вносятся обратно в эмулятор до совпадения поведения. Проект smoltdfx теперь использует одни и те же тесты рендеринга на QEMU и физическом оборудовании Voodoo 3, сравнивая дайджесты кадров для выявления различий. По словам Палмера, получившаяся реализация MiniGL уже может запускать Quake на реальной карте, хотя производительность невелика, и остаются некоторые проблемы с мультитекстурированием Voodoo 3.
Очевидно, это гораздо интереснее, чем просто вывод консоли Linux на Voodoo 3. В итоге получается высокоэкспериментальный графический стек 3dfx, построенный снизу вверх: Linux предоставляет framebuffer и низкоуровневый доступ к устройствам, пользовательские программы напрямую программируют Voodoo, а поверх этого находится легковесная реализация OpenGL, обеспечивающая достаточную функциональность для классического 3D-ПО, чтобы управлять картой.
Действительно, для ретро-вычислений и виртуализации это может стать особенно интересным. PCI Voodoo 3 — это такое устройство, которое, по крайней мере концептуально, можно назначить виртуальной машине с помощью PCI passthrough, позволяя гостевой ОС напрямую общаться с реальным ускорителем, используя его исторически точный драйвер 3dfx. В фантазийной версии такой настройки можно было бы иметь современный хост Linux, передающий реальную Voodoo 3 гостю с Windows 98 или DOS, а затем позволить гостю использовать то самое оборудование, которое ожидало старое ПО. Инженерные детали гораздо сложнее, чем кажется на первый взгляд (особенно в части чистой перезагрузки и предоставления доступа к такому старому оборудованию), но новая возможность инициализировать иначе бездействующую Voodoo из Linux — это, по крайней мере, полезная часть головоломки.
Пока же заголовок важнее, чем непосредственный набор функций. Linux 7.3 внезапно не превращает 25-летнюю Voodoo 3 в полноценный GPU; он делает существующий framebuffer-драйвер способным оживить карту в системах, где прошивка не может этого сделать, — это очень маленькая, но вполне реальная дыра в поддержке оборудования. Что ещё более примечательно, те же усилия уже вылились в экспериментальное 3D-ускорение на реальном оборудовании, с пользовательской библиотекой Voodoo 3 и реализацией OpenGL, способной запускать Quake. Voodoo 3, возможно, уже более 25 лет, но кто-то всё ещё учит Linux новым трюкам с ней в 2026 году.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Zak Killian




