Поддержка 3D для видеокарт на чипах ATI


Сергей А. ЯРЕМЧУК grinder@ua.fm

Linux потихоньку пробивается на компьютеры пользователей, а среди них, как известно, находятся любители поиграть - для них важна поддержка 3D. Владельцам видеокарт на базе чипов nVidia легче - скачиваем драйверы с сайта компании http://www.nvidia.com/ под вашу версию ядра Linux, а далее устанавливаем согласно инструкции. Но в последнее время стали пользоваться популярностью, и вполне заслужено, видеокарты на чипах конкурента - ATI. О настройке поддержки 3D в Radeon'ax и пойдет далее речь.

Самое интересное, что в большинство дистрибутивов такая поддержка включена изначально, и для ее активации не хватает всего лишь пары строк в конфигурационных файлах. Но сейчас понемногу растет популярность самосборных дистрибутивов - для их владельцев остановимся на этом вопросе детальнее.

В четвертой версии XFree86 (http://www.xfree86.org/), как и в ядре серии 2.4.*, реализована технология DRI (Direct Rendering Infrastructure), позволяющая включить аппаратную поддержку 3D-графики. Это специальная программная архитектура для координации работы ядра Linux, системы X-Window (см. статью "Настройка X-Window" МК "26-27 (249-250)), аппаратной поддержки 3D-графики и OpenGL-движка. В отличие от nVidia, которая предоставляет уже откомпилированные версии своих драйверов, ATI всячески поддерживает DRI-проект, и драйвера для ее карт поставляются в исходных текстах, что позволяет встроить их в ядро. В настоящее время ядром 2.4.20 поддерживается DRI для следующих карт: 3dfx Banshee/Voodoo3+, ATI Rage 128, ATI Radeon, Intel I810, Intel 830M, Matrox g200/g400 и SiS, поэтому большинство нижесказанного касается и их, за исключением разве что опций конфигурирования X-Window. Но и это не все: при компиляции ядра с поддержкой DRI для соответствующей карты есть возможность вместо старых драйверов установить/подменить более свежую версию, и никто не догадается о подвохе. Но обо всем по порядку. Для всех действий понадобятся права root, и желательно, но для любителей острых ощущений необязательно, сделать бэкап всех упоминаемых в статье каталогов, чтобы в случае неудачи можно бы было спокойно вернуться к рабочей конфигурации.

Установка библиотек OpenGL.

Для начала необходимы библиотеки поддержки OpenGL (о DirectX, как вы понимаете, и речи быть не может). Марка OpenGL является зарегистрированным торговым знаком Silicon Graphics, Inc, в простонародье просто SGI. Естественно, за библиотеки такого уровня обычно требуют баксюки, причем иногда немалые, но нас это мало должно волновать, так имеется свободная версия библиотек, совместимых с API OpenGL от SGI - Mesa от Брайана Пауля (Brian Paul). Проект существует и развивается уже давно, с августа 1993 года, первая версия библиотек увидела свет в феврале 1995, после чего у Брайана появилось довольно много добровольных помощников. Эти библиотеки эмулируют API библиотек OpenGL и разрабатываются с разрешения Silicon Graphics, но автор предупреждает, что не имеет лицензии от этой компании, также упоминает о возможной несовместимости продукта. В ноябре 2002 вышла в свет пятая версия Mesa, которая эмулирует API OpenGL версии 1.4. Если в вашем дистрибутиве нет Mesa-библиотек (что очень легко проверить, убедившись в наличие файлов libGL и/или libMesa, которые обычно находятся в /usr/X11R6/lib), их, естественно, придется сначала установить. В различных дистрибутивах пакеты могут называться по-разному, например, в RedHat 9 это XFree86-Mesa-libGL-4.3.0-2.i386.rpm, в АLTLinux - Mesa-4.0.2-alt1.i586.rpm, так что придется немного поискать. Зато, собрав OpenGL-библиотеки из исходников, можно увеличить производительность 3D процентов этак на двадцать. А посему идем на сайт http://www.mesa3d.org/ и скачиваем оттуда последнюю версию (1.58 Мб), для интереса можно скачать и демки (870 Кб) которые предлагаются на сайте, или трехмерный анализатор спектра в виде плагина к XMMS. Далее все просто:

Поздравляю, вы сделали это. Теперь проверяем результат:

Эта команда выдаст все, что она думает об установленном OpenGL. А чтобы воочию увидеть результат своей деятельности и заодно измерить fps, даем команду # glxgears.

Единственная неприятность может подстерегать при запуске приложений. Выглядит она примерно так:

Т.е. программа не может найти библиотеку libGL.so.1. Решается проблема в большинстве случаев очень просто - создается символическая ссылка с требуемым именем: # ln -s /usr/X11R6/lib/libGL.so.1.2 /usr/X11R6/lib/libGL.so.1 (или сразу в /usr/lib) и дается команда /sbin/ldconfig.

В принципе, можно теперь приступать к конфигурированию собственно X-Window, чтобы та смогла обнаружить нововведения. Но мы ведь договорились, что собираем дистрибутив с нуля, а потому скажем еще пару слов об опциях компиляции ядра.

В секции Character Devices необходимо выбрать пункты /dev/agpgart(AGP Support), Direct Rendering Infrastructure и, наконец, определить используемую видеокарту - в нашем случае это ATI Radeon DRI 4.x driver. Все это должно компилироваться как модули. Дополнительно, для того чтобы указать процессору, что некоторые участки памяти (framebuffer и апертуры регистра видеокарточки) должны обрабатываться иначе - это ускоряет вывод 2D и рекомендуется для 3D, - во вкладке Processor type and features включаем MTRR (Memory Type Range Register). MTRR - это регистры, определяющие тип кэширования памяти для процессоров Intel Pentium Pro и выше (а также K6-2 и выше).

После этого ядро собрано и загружается без всяких там Kernel Panic. Признаю, что это получается не сразу, иногда приходится долго подбирать опции. У меня первая сборка удалась раза с десятого, зато сейчас отконфигурировать ядро - как два бита передать. В готовых же дистрибутивах обычно все уже включено, и можно переходить к следующему этапу.

Конфигурирование системы X-Window

Открываем файл XF86Config/XF86Config-4 в любимом текстовом редакторе и правим. В секции Section "Module" добавляем следующие строки:

А в Section "Device" проследите, чтобы обязательно было написано:

Впрочем, я встречал в рекомендациях и Driver "radeon" - если не будет получаться, то попробуйте и этот вариант, хотя, как мне кажется, это ошибка. Для карт Matrox пропишите Driver "mga", 3dfx Voodoo - tdfx, Intel - i810. Все, сохраняемся и выходим. После чего убиваем Х-сервер при помощи Ctrl+Alt+Backspase и наслаждаемся результатом. Для этого снова запускаем glxgears. При этом в /var/log/XFree86.0.log должно появиться "dri enabled". Если что-то не получилось, пробуем загрузить модуль ядра вручную - теоретически, Х-сервер должен сам его разыскать и загрузить. Все имеющиеся на данный момент модули можно найти в /lib/modules/2.4.x/kernel/drivers/char/drm/. Модуль для Radeon имеет нехитрое название radeon.o. Драйвер же DRI для Radeon (и остальных карт, поддерживающих эту технологию) должен быть в /usr/X11R6/lib/modules/dri/ и называется он radeon_dri.so. Он будет автоматически при необходимости загружен libGL.so. Для информации - 2D-драйвер Radeon имеет путь /usr/X11R6/lib/modules/drivers/radeon_drv.o.

Проверяем при помощи /sbin/lsmod (или сat /proc/dri/0), загружен ли необходимый модуль. Если нет, загружаем:

Если все ОК, то добавляем (для RedHat и К) в файл /etc/modules.conf всего одну строку - radeon, после чего необходимый модуль будет загружаться автоматически при запуске системы. Поклонникам BSD-стиля (Slackware или CRUX) придется вписать строку полностью, т.е. /sbin/modprobe radeon, в файл rc.modules, который лежит либо в /etc либо в /etc/rc.d. После всех этих действий можно спокойно и, главное, без тормозов гонять либо пингвинов на пузе, либо монстров по кваке (а кто сказал, что в Linux не играют в Квейк? Брехня!)

Как правило, после выхода очередной моей статьи я обязательно получаю несколько писем от тех читателей, у кого "гранаты не той системы" (цитата из "Белого солнца пустыни" :-)). Это может быть связано с несколькими причинами: либо у них новая версия видеокарты, не поддерживаемая ядром (хоть вообще-то базовые функции все равно должны работать), либо отсутствует желание возиться с компиляцией ядра, либо - это уже серьезнее - драйвер предусматривает какие-то новые возможности, которые отсутствуют в свежей версии ядра. Выходом в данной ситуации будет установка правильных драйверов - незачем полностью скачивать (около 50 Мб) и затем пересобирать ядро, новые версии которого выходят не так уж и часто. Драйвера для ATI'шных карт можно откопать в Интернете аж в двух местах. Первое, что приходит в голову, - это официальный сайт ATI (http://www.ati.com/), на котором можно взять как закрытые драйвера, так и свободные их версии. Но я бы лучше пошел сразу на сайт проекта DRI (http://dri.sourceforge.net/home.phtml), где обычно лежат snapshots самых свежих версий драйверов. Качаем нужный (для Radeon'ов самый большой архив - 3.13 Мб), после чего распаковываем и запускаем скрипт install.sh (любители могут распихать по каталогам и вручную). Все. Свежак! Опции настройки для других видеокарт можно подсмотреть в DRI User Guide, который лежит тут же на сайте, в разделе 10. Hardware-Specific Information and Troubleshooting.

Работа с VIVO

Теперь следующая проблема. Большинство производителей оснащают видеокарты с чипами Radeon видеовходом/выходом - грех было бы не воспользоваться возможностью посмотреть фильм на телевизоре или захватить пару интересных кадров. Есть проектец, который помогает решить и эти проблемы - GATOS (http://gatos.sourceforge.net/), предусматривающий поддержку большинства распространенных чипов. По этому адресу можно найти усовершенствованный драйвер ati.2, позволяющий воспользоваться этой возможностью, при этом поддерживаются на настоящий момент карты от Mach64 до Radeon 9700. Единственное - надо быть внимательным и скачивать драйвер именно под свою версию Х-Window, например, для 4.3.0 это будет ATI-4.3.0-9.i386.tar.gz. Установка заключается в распаковке архива и копировании образовавшегося каталога X11R6 в /usr, после чего все необходимые файлы в /usr/X11R6/lib/modules будут заменены новыми. Единственным дистрибутивом из попадавшихся мне в последнее время, в котором засветились gatos-драйвера, был ALTLinux. Для просмотра видео и ТВ здесь же на сайте лежит программа Avview, требующая наличия Tcl/Tk-библиотек; в большинстве дистрибутивов они уже имеются, а если нет - вперед, на http://tcl.sf.net/. Кстати, входящая в состав большинства дистрибутивов Xawtv (http://www.strusel007.de/linux/xawtv) тоже работает. При этом для захвата видео понадобится "very fast video and audio" конвертер FFmpeg (http://sourceforge.net/projects/ffmpeg) и ALSA-драйвера (http://www.alsa-project.org/), а также модули ядра km (http://gatos.sourceforge.net/km.php). После стандартных #./configure && make && make install можно попробовать захватить изображение с ТВ-входа. В простейшем случае это выглядит так (в более сложном придется повозится):

Можно при помощи данной программы и собрать, например, все .jpg-изображения в один видеофайл, при этом задаются шаблоны в стиле С:

Таким образом можно даже анимированные gif'ы создавать. Программа поддерживает большинство видео- и аудиокодеков. Имеется еще одна возможность, о которой стоит упомянуть, - трансляция захваченного видео в поток, который можно транслировать в Интернет. Для этого запускается программа ffserver.

Теперь смотрим.

Здесь же на сайте дополнительно можно найти GATOS-версию DRM-модулей ядра для Radeon. Так что выбирать есть из чего.

Для управления TV-out для карт Radeon предназначена еще одна утилита командной строки - atitvout, которую можно найти http://www.stud.uni-hamburg.de/users/lennart/projects/atitvout. Но самое интересное, что 3D можно наслаждаться не только под X-Window, есть также проект для framebuffer-консоли - -FBDRI (http://fbdri.sourceforge.net/), необходимые драйвера можно скачать с (http://prdownloads.sourceforge.net/fbdri/fbdri.031202.tar.bz2). Скорость работы приложений в консоли, естественно, выше, так что пользователи более слабых компьютеров смогут наслаждаться 3D.

Вот, в принципе, и все, на чем я хотел заострить внимание. Решение возникающих по ходу проблем можно найти в документации, доступной на перечисленных ресурсах. За чтением которой я вас и оставляю.

Linux forever!




Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости