ハードウェア3Dアクセラレーションガイド
1.
始めに
ハードウェア3Dアクセラレーションとは何ですか?なぜ私はそれが必要なのですか?
ハードウェア3Dアクセラレーションを使うと、3次元表現をする際に、貴重なCPUリソースを使う代わりにビデオカードの上のグラフィックスプロセッサーを使うようになります。
これはまた、このハードウェア3Dアクセラレーションがない場合には、MesaソフトウェアレンダリングライブラリというCPUをかなり使用するソフトウェアを使用するので、「ソフトウェアアクセラレーション」に対して「ハードウェアアクセラレーション」と呼ばれます。
Xorgは一般に2Dハードウェアアクセラレーションをサポートしていますが、しばしばハードウェア3Dアクセラレーションを欠いています。
ハードウェア3Dアクセラレーションは、ゲーム、3D CAD、そしてモデリングのような3Dオブジェクトのレンダリングが要求される状況に役立ちます。
どうすればハードウェア3Dアクセラレーションを得ることができますか?
多くの場合、バイナリで提供されるドライバーと、オープンソースのドライバーがあります。
私たちがLinuxを使っていて、その根底にある原理の1つがオープンソースであるので、オープンソースドライバーが好ましいです。
時々、nVidiaカードの様にバイナリドライバーが唯一の選択であることがあります。
バイナリドライバーにはnVidiaカード用のmedia-video/nvidia-kernelとmedia-video/nvidia-glx、Matroxカード用のmedia-video/mgavideo、そしてATIカード用のmedia-video/ati-driversが含まれています。
その他のオープンソースドライバーにはKyroIIカード用のmedia-video/kyro-kernel、そしてより完全にATIのビデオ能力をサポートするmedia-video/ati-gatosが含まれています。
DRIとは何ですか?
DRIとも言われるDirect Rendering Infrastructureは、グラフィックハードウェアに安全で効率的な方法で直接アクセスできるようにする構成です。
それはXサーバ、いくつかのクライアントライブラリ、そしてカーネルの変更を含みます。
DRIのための最初の主な使用は高速なOpenGLの実装を作成することです。
X11-DRMとは何で、どのようにXorgに関連しているのですか?
X11-DRMはダイレクトレンダリングに必要なカーネルモジュールを追加することによってカードのための3Dアクセラレーションを加えるXorgへの機能強化です。
目的
このガイドはXorgだけではダイレクトレンダリングが動作しない人のための物です。
X11-DRMは3dfx、gamma、intel、matrox、rage128、radeon、mach64、そしてsis300シリーズのドライバーで動作します。
より多くの情報とドキュメントはDRI homepageを見てください。
フィードバック
提案、質問等がありましたら、Donnie Berkholzまでメールしてください。
2.
Xorgのインストールとカーネルの設定
Xorgのインストール
Xorgの導入方法はXorg Configuration Guide(日本語訳)を参照してください。
カーネルの設定
あなたのチップセットを詳しく調査して、正しいものを有効にしてください。
コード表示 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を渡すことによってうまくいくかもしれません。
これはAGPサポートのためにインテルの包括的なルーチンを使います。
このパラメーターを加えるために、ブートローダー設定ファイルを編集してください。
すべてでないにしろ、ほとんどのカーネルでこれらのオプションが使えるはずです。
ここではgentoo-sources-2.4.20-r5を使用して設定を行いました。
コード表示 2.2: カーネルの設定 |
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 22 May 29 18:20 /usr/src/linux -> linux-2.4.20-gentoo-r5
# cd /usr/src/linux
# make menuconfig
|
コード表示 2.3: make menuconfigオプション |
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Character devices --->
<M> /dev/agpgart (AGP Support)
[M] Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support
< > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
|
ダイレクトレンダリングマネージャー(DRM)をoffにしてください。
X11-DRMパッケージ自身が提供してくれます。
カーネルのコンパイルとインストール
コード表示 2.4: カーネルのコンパイルとインストール |
# make dep && make clean bzImage modules modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot
|
カーネルにbzImage以外の名前を付けたい場合は、/boot/yournameに置き換えてコピーするようにしてください。
grub.confかlilo.confの設定と、LILOを使っているのなら/sbin/liloの実行を忘れずに行ってください。
3.
X11-DRMのインストールとダイレクトレンダリングの設定
X11-DRMのインストール
コード表示 3.1: X11-DRMのインストール |
# emerge x11-drm
|
Xorg.confの設定
いくつかのチップセットではUSE="insecure-drivers"を使ったxorg-x11の再ビルドが必要です。
これはxorg-x11-6.8.2ではmach64、unichrome、savageチップセットに、xorg-x11-6.8.99.xではmach64とunichromeに適応されます。
savageユーザはxorg-x11-6.8.99.xを使用すべきではありません。これらはsavageサポートが壊れています。
コード表示 3.2: xorg-x11の再ビルド |
# echo "x11-base/xorg-x11 insecure-drivers" >> /etc/portage/package.use
# emerge xorg-x11
|
/etc/X11/xorg.confをあなたの好みのエディタで開いてDRIとGLXを有効にするよう編集してください。
コード表示 3.3: xorg.conf |
...
Section "Module"
Load "dri"
Load "glx"
...
EndSection
...
Section "Device"
Driver "radeon"
...
EndSection
...
Section "dri"
Mode 0666
EndSection
|
もし違うドライバーを使っているのなら、"radeon"をあなたの物に置き換えてください。
modules.autoload.dの変更
あなたのカードが使用するモジュール名を/etc/modules.autoload.d/kernel-2.6に追加する必要があります。
こうすることで、システムの起動時にモジュールが自動的にロードされることを確実にします。
コード表示 3.4: /etc/modules.autoload.d/kernel-2.6の編集 |
intel-agp
|
4.
3Dアクセラレーションのテスト
新しいカーネルのリブート
コンピューターを新しいカーネルでリブートしてください。
あなたがダイレクレンダリングを利用しているかどうかと、それがどれほど良いものか見る時です。
コード表示 4.1: レンダリングのテスト |
# startx
# glxinfo | grep rendering
direct rendering: Yes
# glxgears
|
5.
CVSソースを利用
警告: パッケージが動作するならこれは行わないでください。 |
CVSが必要ですか?
第一にあなたはx11-drmパッケージが作動するかどうか調べなければなりません。
それが動作せずに、またそれが設定ミスによる問題でないことをログで確認済であるなら、あなたはCVSソースを利用したいと考えるでしょう。
CVSのものを完全にビルドしたくない場合には、毎日作成されるのドライバースナップショットも利用できます。
CVSソースはあなたのカードをサポートしていますか?
CVSのソースがあなたのカードをサポートしているか確かめるために、DRIがサポートしているカードのリストを確認してください。
もし存在しなくても、似たカードがサポートされているなら、それを試してみてください。
CVSの指示に従う
DRIプロジェクトにはCVSソースのコンパイルに関するドキュメントがあります。
ドキュメントを読んで、X.orgのインストールもしくはX.orgのインストールまで進んでください。
CVSのインストール
システムのためのDRIカーネルモジュールがビルドされたかどうか確認します。
コード表示 5.1: 確認 |
# cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel; ls
|
3dfx Voodooならtdfx.oを、Matrox G200/G400ならmga.oを、ATI Rage 128ならr128.oを、ATI Radeonならradeon.oを、Intel i810ならi810.oをそれぞれ見るべきです。
もしDRIカーネルモジュールがビルドに失敗していたなら、正しいバージョンのLinuxカーネルを使っているか確認するべきです。
最新のカーネルでは必ずしもサポートされているとは限りません。
あなたのX.orgインストールの上にインストールします。
xorg-x11をバックアップした方がいいでしょう。
コード表示 5.2: Xorgのバックアップ |
# quickpkg xorg-x11
# make install
|
この後は、上記"Xorgの設定"セクションに従ってください。
起動中のカーネルに適当なDRMモジュールを読み込ませるために、カーネルモジュールを/lib/modules/`uname -r`/kernel/drivers/char/drm/にコピーし、modules-updateを実行してXサーバを再起動してください。
このモジュールを使用する予定のカーネルを現在使用中でない場合には、`uname -r`のかわりにカーネルの名前を使用してください。
警告:
最初に既に読み込まれている古いDRIカーネルモジュールをアンロードするようにしてください。
いくらかのDRMモジュールはagpgartモジュールが先に読み込まれている必要があることに注意してください。
|
6.
パフォーマンスの調整
より多くのダイレクトレンダリングを得る
2~3のオプションはパフォーマンスをデフォルトより30パーセント(もしくはそれ以上)増加させるかもしれません。
/etc/X11/xorg.confでそれらを設定します。
コード表示 6.1: xorg.conf |
Section "Device"
Option "AGPMode" "4"
Option "AGPFastWrite" "True"
Option "EnablePageFlip" "True"
...
EndSection
|
より多くの機能を設定したいなら、DRI Webサイトの機能一覧か、Sourceforgeの機能のリストを確認してください。
7.
トラブルシューティング
動作しません。私はカーネルを再コンパイルもしくは新しい物へと置き換えただけです。
カーネルを再コンパイルしたり新しい物へと置き換えたときはいつでも、カーネルモジュールを再ビルドする必要があります。
xorg-x11を再mergeする必要はありませんが、x11-drmを再mergeする必要があるということに注意してください。
動作しません。レンダリングを得ることができず、なぜなのか伝えることができません。
Xサーバを起動させる前にinsmod radeonを試してみてください。
また、agpgartをモジュールの代わりにカーネル内部にビルドしてみてください。
startxをすると、こんなエラーが出ました: "[drm] failed to load kernel module agpgart"
これはagpgartをモジュールの代わりにカーネル内部にコンパイルしたためです。
問題がないのなら無視してください。
ダイレクトレンダリングが動作せず、/var/log/Xorg.0.logにドライバーのバージョンが低すぎるというエラーがありました
x11-drmドライバーを使っていません。
DRMとドライバーをカーネル内部にコンパイルしたかどうか確認してください。それをするべきではありません。
Radeonを使っていて、TV-Outが必要です
ati-gatosドライバーを見てください。emerge -s gatos。
動作しません。私のカードはとても新しくてすごいので、少しもサポートされていません。
バイナリドライバーを試してみてください。
atiドライバーなら、リストがhttp://www.schneider-digital.de/html/download_ati.phpにあります。
それらがサポートしていないなら、fbdevを使ってください。
遅いですが、動作はします。
PCIカードを使っていて動作しません。助けて!
"Device"セクションでForcePCIModeを有効にしてください。
コード表示 7.1: ForcePCIModeを有効にする |
Option "ForcePCIMode" "True"
|
8.
感謝
-
カーネルの変更や再コンパイルに関するトラブルシューティングを提案してくれたChristopher Webber氏
-
XF86ConfigのdriとDRI間の一貫性を提案してくれたSteve氏
9.
参考文献
- http://forums.gentoo.org/viewtopic.php?t=46681
- http://forums.gentoo.org/viewtopic.php?t=29264
- http://dri.freedesktop.org/
- http://www.retinalburn.net/linux/dri_status.html
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|