X with DRI

FreeBSD 階層に戻る  |  ホームに戻る

1. DRI とは

X Window System で 3D ハードウェアアクセラレーションを利用するための仕組みを DRI (Direct Rendering Interface/Infrastructure) と呼ぶ。 本稿では、FreeBSD 上で DRI を利用する方法を記述する。

2. サポートされるハードウェア

1. 2003/4/26 以前の FreeBSD 4-STABLE (4.8-RELEASE 以前)

drm-kmod-0.9.6 の対応による。 リスト参照。

2. 2003/4/26 以降の FreeBSD 4-STABLE (4.9-RELEASE 以降)

MGA
src/sys/dev/drm/mga_drv.c 参照。
ATI RADEON 系
sys/dev/drm/radeon_drv.c 参照。
ATI Rage128 系
sys/dev/drm/r128_drv.c 参照。
3Dfx
src/sys/dev/drm/tdfx_drv.c 参照。

3. FreeBSD 5-STABLE、6-CURRENT

MGA、ATI、3Dfx、SiS
src/sys/dev/drm/drm_pciids.h 参照。

※注: 以上は 2004/09/19 時点でのサポート状況である。

大雑把にまとめると、FreeBSD 4.8-RELEASE 以前のリリースでは、 Matrox Gシリーズ、ATI Rage128 と RADEON (7500、8500) シリーズ、 3DFX Voodoo シリーズがサポートされる。

4.8-RELEASE 以降なら Radeon 9000/9100、5-STABLE、6-CURRENT なら、 さらに SiS 630、730 などがサポートされる。

DRI を利用するには、OS 側、X 側の両方で準備が必要となる。 以下、その手順について解説する。

3. OS 側の準備

OS 側では、AGP チップセットをサポートするドライバ (agp) と 各ビデオチップをサポートするドライバをカーネルに組み込む 必要がある。ドライバはモジュールとしても組み込むことができる。

1. 2003/4/26 以前の FreeBSD 4-STABLE (4.8-RELEASE 以前)

ports (/usr/ports/graphics/drm-kmod) でカーネルモジュールを インストールする。

# cd /usr/ports/graphics/drm-kmod
# make install clean
# cd /usr/local/etc/rc.d
# mv drm.sh.sample drm.sh

2. 2003/4/26 以降の FreeBSD 4-STABLE (4.9-RELEASE 以降)

i. ドライバをカーネルモジュールとして組み込む場合

agp ドライバは 2002/12/30 以降 GENERIC カーネルに組み込まれている。 ビデオチップ用のモジュールをロードするよう /boot/loader.conf に記述する。

ii. ドライバをカーネルにスタティックに組み込む場合

device          agp
device          mgadrm
device          "r128drm"
device          radeondrm
device          tdfxdrm

"device agp" は必須、それ以外のチップ依存のドライバについては、 必要な行をひとつ選んでコンフィグファイルに書き加える。

3. FreeBSD 5-STABLE、6-CURRENT の場合

i. ドライバをカーネルモジュールとして組み込む場合

agp ドライバがカーネルに組み込まれており、 ビデオチップ用のモジュールは自動的にロードされるため、 特に操作する必要は無い。

ii. ドライバをカーネルにスタティックに組み込む場合

カーネルコンフィグファイルに以下の記述を加えてカーネルをコンパイルする。

device          mgadrm
device          "r128drm"
device          radeondrm
device          sisdrm
device          tdfxdrm

上の中から、必要な行をひとつ選んでコンフィグファイルに書き加える。

4. 確認

以上、いずれの場合においても、OS 起動時に AGP デバイスが認識されていることを確認すること。

# dmesg | grep agp
agp0: <Intel 82815 (i815 GMCH) host to PCI bridge>
mem 0xe0000000-0xe3ffffff at device 0.0 on pci0

この行が出ていない場合は、AGP チップセットがサポートされていないものと 思われる。

4. X 側の準備

X については、Xorg の 6.7.0 以降、もしくは XFree86 の 4.3.0 以降を用意して、xorg.conf (または XF86Config) ファイルに以下の記述を加える。

Section "Module"
        Load "dri"
        Load "glx"
EndSection

一般ユーザ権限でも DRI を有効にするためには、以下の記述も必須である。

Section "DRI"
        Mode 666
EndSection

5. 実行

1. DRI 有効化の確認

X サーバを起動して、DRI が動作しているかどうか確認してみる。

/var/log/Xorg.0.log (XFree86.0.log) に、 以下のような行があれば導入成功である。

# grep drm /var/log/Xorg.0.log
(II) Loading sub module "drm"
(II) LoadModule: "drm"
(II) Loading /usr/X11R6/lib/modules/freebsd/libdrm.a
(II) Module drm: vendor="X.Org Foundation"
drmOpenDevice: minor is 0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 6, (OK)
drmOpenDevice: minor is 0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 6, (OK)
drmOpenDevice: minor is 0
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 6, (OK)
drmGetBusid returned ''
(II) RADEON(0): [drm] created "radeon" driver at busid "PCI:1:0:0"
(II) RADEON(0): [drm] added 8192 byte SAREA at 0xc1ad6000
(II) RADEON(0): [drm] mapped SAREA 0xc1ad6000 to 0x28380000
(II) RADEON(0): [drm] framebuffer handle = 0xd0000000
(II) RADEON(0): [drm] added 1 reserved context for kernel
(II) RADEON(0): [drm] register handle = 0xe5000000
(II) RADEON(0): [drm] installed DRM signal handler
(II) RADEON(0): [drm] Added 32 65536 byte vertex/indirect buffers
(II) RADEON(0): [drm] Mapped 32 vertex/indirect buffers
(II) RADEON(0): [drm] dma control initialized, using IRQ 5
(II) RADEON(0): [drm] Initialized kernel GART heap manager, 5111808
(II) RADEON(0): [drm] removed 1 reserved context for kernel
(II) RADEON(0): [drm] unmapping 8192 bytes of SAREA 0xc1ad6000 at
0x28380000

2. ベンチマーク

DRI 有効のときと無効のときの性能を比較するため、ベンチマークを取ってみた。 環境は以下の通り。

DRI によって OpenGL のハードウェアアクセラレーションが効くはずなので、 OpenGL のベンチマークを取ってみる。ソフトウェアは glclock 同梱の woodclock を利用した。

# woodclock

FPS で単純比較して、約20倍の性能向上が確認できた。

次に、X サーバの総合性能試験として xengine を使用した。

# xengine

この試験では OpenGL のハードウェアアクセラレーションは無関係のはずだが、 2倍近く性能が向上している。このあたりの理屈は、私にはよく解らないが。

6. 参考文献

FreeBSD 階層に戻る  |  ホームに戻る

Copyright (C) 2003,2004
Last modified: Mon Dec 25 09:46:38 JST 2006
You are the 140003 th visitor.