Руководство по аппаратному 3D ускорению Donnie Berkholz Jorge Paulo Joshua Saddler Анатолий Аржников Этот документ является руководством по настройке 3D ускорения с использованием DRM с Xorg в Gentoo Linux 1.9 2007-07-22 Введение
Что такое 3D ускорение и почему оно мне нужно?

С аппаратным 3D ускорением, трехмерные изображения создаются графическим процессором на вашей видеокарте, заместо использования ценных ресурсов ЦП. Это говорит в пользу "аппаратноного ускорения" заместо "программного ускорения", потому как без 3D ускорения процессор вынужден отрисовывать все самостоятельно, используя библиотеки Mesa, которые требуют значительной вычислительной мощности. Xorg стандартно поддерживает аппаратное 2D ускорение, но зачастую в нем нет аппаратного 3D ускорения. 3D ускорение важно в случаях, когда происходит отрисовка 3D объектов, как например игры, 3D CAD и моделирование.

Как мне получить аппаратное 3D ускорение?

Во многих случаях, одновременно существуют бинарные и открытые драйверы. Открытые драйверы предпочтительнее, так как мы используем Linux, а открытость есть один из основных его принципов. Иногда бинарные драйверы являются лишь дополнением, как в случае карт nVidia. Бинарые драйверы это x11-drivers/nvidia-drivers для карт nVidia и x11-drivers/ati-drivers для карт ATI. Открытые драйверы это media-video/ati-gatos для карт ATI, которые нацелены на более полную поддержку возможностей карт ATI.

What is DRI?

Direct Rendering Infrastructure, также известная как DRI, это платформа для предоставления прямого доступа к графическому оборудованию безопасным и эффективным методом. Она также включает модификации для X-сервера, для многих клиентских библиотек и для ядра. Основная же цель DRI - создание эффективной реализации OpenGL.

Что такое DRM и как он взаимодействует с Xorg?

DRM (Direct Rendering Manager) это дополнение к Xorg, которое добавляет поддержку 3D ускорения для видеокарт, путем добавления модуля ядра, специально предназначенного для поддержки аппаратного ускорения.

Конечная цель

Это руководство для тех, кто не может заставить аппаратное ускорение работать с Xorg. DRM поддерживает следующие драйверы:

  • 3dfx
  • i8x0
  • matrox
  • rage128
  • radeon
  • mach64
  • sis300
  • via

Смотрите домашнюю страницу DRI за более подробной информацией и документацией.

Обратная связь

Вопросы, предложения итп направляйте на e-mail Donnie Berkholz.

Установка Xorg и конфигурация ядра
Установка Xorg

Пожалуйста воспользуйтесь Описанием настройки X-сервера чтобы получить рабочий Xorg.

Настройка вашего ядра

Выясним какой у вас набор микросхем и включим его в сборку.

# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
(Ваш вывод может не совпадать с приведенным выше из-за различий в оборудовании.)

Если ваш набор микросхем не поддерживается ядром, возможно вам поможет использование agp=try_unsupported как параметра ядра. В результате будут использованы стандартные правила Intel для поддержки AGP. Чтобы добавить этот параметр, отредактируйте файл настроек вашего загрузчика.

Большинство, если не все, ядра имеют эти параметры. В примере использовалось стандартное ядро gentoo-sources.

# ls -l /usr/src/linux 
lrwxrwxrwx 1 root root 22 2007-02-14 20:12 /usr/src/linux -> linux-2.6.18-gentoo-r4
(Убедитесь /usr/src/linux указывает на текущее ядро.)
# cd /usr/src/linux
# make menuconfig
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Device drivers --->
   Character devices --->
   <M> /dev/agpgart (AGP Support)
   (Параметра agpgart нет на 64-битных ядрах, просто выберите поддержку
   вашего набора микросхем.)
   <M> Intel 440LX/BX/GX, I8xx and E7x05 support
(Выберите ваш набор микросхем из списка до сюда.)
   <M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
Сборка и установка ядра
# make && make modules_install

Не забудьте подредактировать grub.conf или lilo.conf и запустить /sbin/lilo, если вы используете LILO.

Настройка аппаратного ускорения
Правка Xorg.conf

Откройте /etc/X11/xorg.conf в вашем любимом текстовом редакторе, и подредактируйте его, чтобы включить DRI и GLX.

...
Section "Module"
  Load "dri"
  Load "glx"
  ...
EndSection
...
Section "Device"
  Driver "radeon"
  (Замените radeon именем вашего драйвера.)
  ...
EndSection
...
Section "dri"
  Mode 0666
EndSection
Изменения в modules.autoload.d

Вам необходимо добавить имя модуля, который использует ваша карточка в /etc/modules.autoload.d/kernel-2.6, чтобы обеспечить загрузку модуля автоматически при запуске системы.

(Измените имя модуля, если потребуется.)
intel-agp
Если вы собрали agpgart модулем вам нужно добавить и его в /etc/modules.autoload.d/kernel-2.6.
Тестирование 3D ускорения
Перезагрузка с новым ядром

Перезагрузите ваш компьютер с новым ядром и зайдите как обычный пользователь. Пришло время проверить работает ли аппаратное ускорение и как хорошо. glxinfo и glxgears часть пакета mesa-progs, убедитесь, что он установлен, прежде чем пользоваться этими командами.

$ startx
(Не нужно подгружать модули вашего драйвера или agpgart.)
(Они загрузятся автоматически.)
$ glxinfo | grep rendering
direct rendering: Yes
(Если оно говорит "No", у вас не работает 3D ускорение.)
$ glxgears
(Сравните ваш показатель кадров в секунду (FPS) с показаниями до установки
DRM. Число должно быть в разы больше. Проделайте это когда процессор не загружен,
если возможно.
FPS может быть ограничем частотой развертки монитора, учтите это, если glxgears показывает лишь 70-100 кадров в секунду. games-fps/ut2004-demo это лучший тест производительности, он может показать реальные результаты.
Увеличение производительности
Получите как можно больше от аппаратного ускорения

Несколько параметров могут увеличить производительность на 30% (или более). Установите их в /etc/X11/xorg.conf. Однако, сначала вам необходимо выяснить, поддерживает ли их ваша материнская плата и видеокарта.

Во-первых, проверим поддерживает ли ваша видеокарта быструю запись. Мы сделаем это на основе вывода lspci. Точнее, нам понадобится информация о "VGA compatible controller"

# lspci -vv
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M6 LY (prog-if 00 [VGA])
. . .
Capabilities: [58] AGP version 2.0
    Status: RQ=48 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4

Среди всей прочей информации, нас интересует FW в субсекции "Status" секции AGP "Capabilites". Если FW+ есть в строке "Status", это значит, что ваша карточка поддерживает быструю запись. Сейчас проверим, поддерживает ли ее материнская плата.

Если вы не видите FW+, а напротив, FW-, вы не сможете включить быструю запись в xorg.conf. Ваша карточка не поддерживает ее.

Сейчас мы убедимся, что материнская плата поддерживает быструю запись. Для этого взглянем на секцию "Host bridge" вывода lspci.

# lspci -vv
00:00.0 Host bridge: Intel Corporation 82830 830 Chipset Host Bridge (rev 02)
. . .
Capabilities: [a0] AGP version 2.0
    Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4

И снова взглянем на субсекцию "Status" секции AGP "Capabilities". Нам нужно FW. Если вы видите FW+, ваша материнская плата поддерживает быструю запись.

Информация о видеокарте, а также информация о материнской плате должны показать поддержку FW. Если одно из устройств показывает FW- в "Status", вы не сможете включить поддержку быстрой записи в xorg.conf.

Понимая, что все идет нормально и ваша видеокарта наряду с вашей материнской платой поддерживает быструю запись, давайте включим этот параметр в /etc/X11/xorg.conf и получим максимальную производительность от вашего железа.

Section "Device"
  Option     "AGPMode" "4"
  (Это увеличило FPS с 609 до 618.)
  Option     "AGPFastWrite" "True"
  (Это не дало значительного эффекта, но оно может привести к нестабильности
  компьютера.)
  (Вам также может понадобиться включить это в BIOS.)
  Option     "EnablePageFlip" "True"
  (Это увеличило FPS с 618 до 702. Это также "опасно", но немного людей сообщило
  о проблемах.)
  ...
EndSection
Включение AGPFastWrite на наборах микросхем VIA очень часто приводит к зависанию машины. Наборы микросхем VIA плохо дружат с быстрой записью, так что используйте ее на свой страх и риск. Учтите, если вы хотите заставить работать быструю запись, вы должны сначала включить соответствующий параметр в BIOS.

Если вы хотите установить другие возможности, читайте на сайте DRI, или features listing на Sourceforge.

Разрешение проблем
Оно не работает. У меня нет ускорения, и я не могу сказать почему.

Попробуйте modprobe radeon перед запуском X сервера (замените radeon именем вашего драйвера). Также попробуйте собрать agpgart в ядро, а не модулем.

Когда я запускаю startx, я получаю эту ошибку: "[drm] failed to load kernel module agpgart"

Это потому, что agpgart собран внутри ядра, а не модулем. Игнорируйте ее, если не возникает проблем.

У меня Radeon, и я хочу TV-Out.

Взгляните на драйвера ati-gatos. emerge -av ati-gatos.

Оно не работает. Моя картачка настолька новая и крутая, что она не поддерживается полностью.

Попытайтесь использовать двоичные драйвера. Страничка ati-drivers находится на http://ati.amd.com/support/drivers/linux/linux-radeon.html (для x86) и на http://ati.amd.com/support/drivers/linux64/linux64-radeon.html (для amd64). Если эти не поддерживаюь ее, используйте fbdev. Он медленный, но работает.

У меня PCI карточка и она не работает. Помогите!

Исправьте /etc/X11/xorg.conf. В секции "Device" включите ForcePCIMode.

Option "ForcePCIMode" "True"
Выражаем благодарность
  1. Christopher Webber за содействие в разрешении вопросов о смене или пересборке ядер.
  2. Steve, за содействие во взаимодействии между dri и DRI в XF86Config
Ссылки
  1. http://forums.gentoo.org/viewtopic.php?t=46681
  2. http://forums.gentoo.org/viewtopic.php?t=29264
  3. http://dri.freedesktop.org/
  4. http://www.retinalburn.net/linux/dri_status.html