[Momonga-devel.ja:01912] DRI on RADEON


nosanosaです。

ATIのRADEONなどを搭載したマシンをお持ちの方はOpenGLのハードウェアアク
セラレーション(DRI)が有効になってますでしょうか?

たぶんXFree86が4.3.0になった頃からだと思うんですが、私のThinkPad X22の
RADEON Mobility M6でOpenGLのハードウェアアクセラレーションが効かなくな
ってしまってました。

具体的にはOpenGLを使うアプリケーションを立ち上げると
libGL error: InitDriver failed
というエラーがでます。

/var/log/XFree86.0.logには
(II) RADEON(0): [drm] loaded kernel module for "radeon" driver
(II) RADEON(0): [drm] created "radeon" driver at busid "PCI:1:0:0"
(WW) RADEON(0): [dri] Some DRI features disabled because of version mismatch.
[dri] radeon.o kernel module version is 1.1.1 but 1.3.1 or later is preferred.
(II) RADEON(0): [dri] Visual configs initialized
(II) Keyboard "Implicit Core Keyboard" handled by legacy driver

と言う感じです。それでgoogleなどで調べてみるとログの通りだったんですが
kernelに含まれるDRMのバージョンがXの要求するものよりも古いためと分かり
ました。

解決法としては、(BUILDツリーを残して)Xをビルドしたときにできている
pkgs/XFree86/BUILD/XFree86-4.3.0.1/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/radeon.o
を/lib/modules/<kernel-version-release>/kernel/drivers/char/drm/radeon.oに上書
きすることでDRIが有効になります。


これだとkernelのリリースが変わる毎に同じことをしないといけなくて面倒な
ので、できればkernelの方で対応したいというわけで、kernelのdrmのソースを
そっくりXFree86-4.3.0.1のソースで置き換えてコンパイルして見ました。

つまり
$ ../tools/OmoiKondara -r "-bp" kernel
$ ../tools/OmoiKondara -r "-bp" XFree86
$ cp -pf \
XFree86/BUILD/XFree86-4.3.0.1/xc/programs/Xserver/hw/xfree86/os-support/shared/drm/kernel/*.[ch] \
kernel/BUILD/linux-2.4.21/drivers/char/drm/
$ cp -pf \
XFree86/BUILD/XFree86-4.3.0.1/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/*.[ch] \
kernel/BUILD/linux-2.4.21/drivers/char/drm/
としてkernelのソースをXのソースで上書きして置き換えました。
(両方とも全てのパッチが当たった状態です)
それで、MakefileをXの側のMakefileと見比べて少し直してから、カーネル全
体をビルドしてインストールしたところ、一応ThinkPad X22では、うまく動い
てくれてDRIも有効になってます。

ソースを置き換えた後のkernelに対する差分が添付の
linux-2.4.21-X4301DRM.patchです。

ですが、radeonだけでなくsis,i810,i830,mgaとかも含めて置き換えてますし、
差分の中身を見て頂けると分かるのですが、結構な数のファイルがkernelソー
スの方がXでのソースよりも更新日付が新しかったりして、他のカードを含め
てどんな影響を与えているかわからず、とてもそのままcommitできるような
ものではない気がします。

# (っていうか、見習い新人なのにkernelにcommitなんて恐れ多くて…)

あと、radeonだけをX付属のものにしようと思ったのですが、手に負えません
でした。

というわけで、もっといい方法も含めて、あとはえらい人にお願いしたいん
ですが…

一応、linux-2.4.21-X4301DRM.patchをPatch142として当ててビルドしてみた
kernelのパッケージを以下に置いておきます。DRI対応カードを持っている方がテス
トして頂ければ幸いです。
http://ndyn.acs.i.kyoto-u.ac.jp/~sano/momonga/SRPMS/kernel-2.4.21-10m.1e.nosrc.rpm
http://ndyn.acs.i.kyoto-u.ac.jp/~sano/momonga/RPMS/kernel-headers-2.4.21-10m.1e.i586.rpm
http://ndyn.acs.i.kyoto-u.ac.jp/~sano/momonga/RPMS/kernel-2.4.21-10m.1e.i586.rpm

Attachment: linux-2.4.21-X4301DRM.patch.bz2
Description: Binary data