Руководство по аппаратному 3D ускорению

Donnie Berkholz  автор
Jorge Paulo  автор
Joshua Saddler  редактор
Анатолий Аржников  переводчик

Обновлено 22 июля 2007
Исходный документ обновлен 10 сентября 2008

1.  Введение

Что такое 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 поддерживает следующие драйверы:

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

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

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

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

Установка Xorg

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

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

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

Листинг 2.1: Проверка вашего набора микросхем AGP

# 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.

Листинг 2.2: Настройка ядра

# 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

Листинг 2.3: Параметры 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)

Сборка и установка ядра

Листинг 2.4: Сборка и установка ядра

# make && make modules_install

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

3.  Настройка аппаратного ускорения

Правка Xorg.conf

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

Листинг 3.1: xorg.conf

...
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, чтобы обеспечить загрузку модуля автоматически при запуске системы.

Листинг 3.2: Editing /etc/modules.autoload.d/kernel-2.6

(Измените имя модуля, если потребуется.)
intel-agp

Примечание: Если вы собрали agpgart модулем вам нужно добавить и его в /etc/modules.autoload.d/kernel-2.6.

4.  Тестирование 3D ускорения

Перезагрузка с новым ядром

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

Листинг 4.1: Проверка ускорения

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

Примечание: FPS может быть ограничем частотой развертки монитора, учтите это, если glxgears показывает лишь 70-100 кадров в секунду. games-fps/ut2004-demo это лучший тест производительности, он может показать реальные результаты.

5.  Увеличение производительности

Получите как можно больше от аппаратного ускорения

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

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

Листинг 5.1: Video card check

# 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.

Листинг 5.2: Motherboard check

# 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 и получим максимальную производительность от вашего железа.

Листинг 5.3: 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.

6.  Разрешение проблем

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

Попробуйте 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.

Листинг 6.1: Включение ForcePCIMode

Option "ForcePCIMode" "True"

7.  Выражаем благодарность

  1. Christopher Webber за содействие в разрешении вопросов о смене или пересборке ядер.
  2. Steve, за содействие во взаимодействии между dri и DRI в XF86Config

8.  Ссылки

  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