ハードウエア3Dアクセラレーションガイド
1.序文
ハードウェア3Dアクセラレーションとは何ですか、そして、私はなぜそれを欲するのですか?
ハードウエア3Dアクセラレーションは、3Dイメージを描くために、貴重なCPUリソースを使うかわりに、3Dレンダリングにビデオカードのグラフィックプロセッサを利用します。
これは、"ソフトウエアアクセラレーション"に対して"ハードウエアアクセラレーション"と呼ばれます。なぜなら、3DアクセラレーションなしでCPUは、Mesaソフトウエアレンダリングライブラリを用いて、描くことを強制することになり、かなりのプロセッサパワーを奪います。
XFree86は2Dハードウェアアクセラレーションを通常サポートしますが、ハードウェア3Dアクセラレーションはあまりありません。3Dハードウェアアクセラレーションはゲーム、3D CAD、およびモデリングなどの3Dオブジェクトをレンダリングするのを必要とする状況で有益です。
私はどのようにハードウェア3Dアクセラレーションを得ますか?
多くの場合、バイナリーとオープンソースの両方のドライバーがあります。 私たちはLinuxを使用していて、オープンソースはLinuxの基本的な原則の一つなのでオープンソースのドライバーは望ましいです。時には、バイナリドライバーはnVidiaのカードなどの場合には、唯一の選択肢です。
バイナリドライバーにMatrox用のmedia-video/mgavideoとATIカード用のmedia-video/ati-driversが含まれます。 他のオープンソースのドライバーはKyroIIカード用のmedia-video/kyro-kernelとATIカード用のmedia-video/ati-gatosが含まれます。media-video/ati-gatosは、ATIのビデオ能力をより全面的にサポートするのを目指します。
DRIとは何ですか?
DRIとしても知られているDirect Rendering
Infrastructure (dri.sourceforge.net)は,安全で効率的な方法でグラフィックスハードウェアに直接アクセスを許すための枠組みです。それはXサーバと、そして、いくつかのクライアントライブラリと、そして、カーネルへの変更が含まれます。 DRIの最初の主用途は速いOpenGL実装を作成することです。
XFree-DRMは何ですか、そして、それはどのように通常のXFree86に関連しますか?
XFree-DRMは、XFree86がアクセラレーションを提供しないカードへ3Dアクセラレーションを追加するためのXFree86の機能強化です。
目的
このガイドはダイレクトレンダリングをXFreeだけで動作させることができない人々のためのものです。
XFree-DRMは3dfx、gamma、i8x0、matrox、rage128、radeon、およびsisドライバーで動作しています。
また、CVSソースにはmach64の何らかのサポートがあります。--
このサイトと
howtoを調べてください。
2.4カーネルのDirect Rendering Manager(DRM)がXFree 4.3をサポートしないので、
xfree-drmパッケージが必要です。あなたが2.5カーネルを使用しているならば、
そのDRMはXFree 4.3をサポートします;
したがって、あなたのカードが非常に新くダイレクトレンダリングを得られないときは、
このガイドを気にしないでください。
より多くの情報とドキュメントに関して DRIホームページを見てください。
フィードバック
提案、質問等はDonnie
Berkholzあてに電子メールを送ってください。
2.XFree86のインストールとカーネルの設定
XFree86のインストール
Code listing 2.1 |
# emerge x11-base/xfree
|
カーネルの設定
チップセットを調べてそれを有効にしてください
Code listing 2.2: Checking your AGP chipset |
# emerge pciutils; lspci | grep AGP
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
|
すべてではないが、多くのカーネルに、これらのオプションがあるはずです。これは、gentoo-sources-2.4.20-r5を使用することで構成されました。
Code listing 2.3 |
# 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
|
Code listing 2.4: make menuconfigオプション |
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Character devices --->
<*> /dev/agpgart (AGP Support)
[*] Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support
[ ] Direct Rendering Manager (XFree86 DRI support)
|
Direct Rendering Manager(DRM)がオフであることを確認してください。XFree-DRMパッケージはそれ自身のものを提供するでしょう。 カーネルのバージョンはXFree 4.2のためのものです。
カーネルのコンパイルとインストール
Code listing 2.5: カーネルのコンパイルとインストール |
# make dep && make clean bzImage modules modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot
|
あなたのカーネルがbzImage以外の何かに命名されたものが欲しいならば、
必ず代わりに/boot/yournameにコピーしてください。
grub.confのセットアップ、またはLILOを使う場合は、
lilo.confのセットアップを行ない、忘れずに,/sbin/liloを実行してください。
3. XFree-DRMのインストールとダイレクトレンダリングの構成
XFree-DRMのインストール
Code listing 3.1 |
# ACCEPT_KEYWORDS="~x86" emerge xfree-drm
|
XF86Configの設定
/etc/X11/XF86Configをあなたの好きなテキストエディタで開き、
DRIとGLXを有効にするように編集してください。
Code listing 3.2: XF86Config |
...
Section "Module"
Load "dri"
Load "glx"
...
EndSection
...
Section "Device"
Driver "radeon"
...
EndSection
...
Section "DRI"
Mode 0666
EndSection
|
違うドライバを使用しているならば、"radeon"をあなたのものに置き換えてください。
4.3Dアクセラレーションのテスト
新しいカーネルへのリブート
新しいカーネルでコンピュータをリブートしてください。
ダイレクトレンダリングがあるか、それがどんなに良いものかを見るときです。
Code listing 4.1: Testing rendering |
# startx
# glxinfo | grep rendering
direct rendering: Yes
# glxgears
|
5.CVSソースの使用
Warning: パッケージがうまく動いたときは、この作業をしないでください。 |
Note: 本来、CVSソースはいつも変化します。 あなたの構成はちょうど以下のものと厳密に同じではないかもしれません。 |
CVSは必要ですか?
まず最初に、xfree-drmパッケージがうまく動作するかどうかチェックしなければなりません。
そうでなく、非常に新しいカードを持っているならば、あなたは、
CVSソースを考慮することをのぞむかもしれません。
xfree-drmパッケージは現在、少なくともRadeon9000をサポートします。
CVSソースはあなたのカードをサポートしますか?
CVSがあなたのカードをサポートするか調べるためにDRIの
サポートするカードリストをチェックしてください。
それでもリストに載っていない場合は、同様のカードのサポートをしているときには、それを試してください。
Warning: 「リナックス2.4がagp 8xをサポートしないので、
私はバックポートを見つけに行かなければなりませんでした。
バックポートは動作しますが、うまくパッチが当たらず、2.4.21を必要としました((ebuildではなく)tarボールからのvanillaだけで作業)。
まず、kernel.orgから2.4.20-2.4.21のパッチを手に入れてください(次に、パッチを入手してください)。
メーリングリストのどこかにあります。きれいに、パッチはあたりません。
ひとつのファイルpci_ids.hファイルがこけます。
しかし、実際にファイルと拒絶リストを読むと、簡単に修正できることがわかります。
しかし、それは、ロードできます、それで、xfree-drmと共にvideoで1600x1200(dgaのない少し遅いb/cであるが)を提供します。」(#gentooチャンネルでのSanityInAnarchyの発言より) |
Important: このパッチは少しトリッキーに動作するが、ここに、リンクがあります。
BIOSで8X AGPを無効にすることができるならば、それを4Xに変えてください。そうすれば、このパッチを必要とすることはありません。 |
CVSソースのインストール
このガイドの「カーネルのコンパイルとインストール」に従ってください。 次に、我々は、 DRIコンパイルガイドのステップ6に移動して、ステップ8.3までそれにしたがいます。
匿名CVSダウンロード
CVSファイルを格納するためのディレクトリを作成してください:
Code listing 5.1 |
# cd ~
# mkdir DRI-CVS
|
CVSソースのチェックアウト
Code listing 5.2 |
# cd ~/DRI-CVS
# cvs -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri login
# cvs -z3 -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri co xc
|
CVSソースのアップデート
将来、あなたは、最新の変化を得るために時折DRIソースコードのローカルコピーをアップデートしたくなるでしょう。これは次のように、処理することができます:
Code listing 5.3 |
# cd ~/DRI-CVS
# cvs -z3 update -dA xc
|
ビルドツリーの構築
オブジェクトファイルとライブラリファイルを正しくソースツリーに置くよりむしろ、
それらはかわりに並行したebuildツリーに入れられます。
ビルドツリーは、lndirコマンドで作られます:
Code listing 5.4 |
# cd ~/DRI-CVS
# ln -s xc XFree40
# mkdir build; cd build
# lndir -silent -ignorelinks ../XFree40
|
ビルドツリーはCVSソースツリーに指すシンボリックリンクで送り込まれるでしょう。
高度なユーザは、異なったオプションでコンパイルして、テストするために数個のビルドツリーを持つでしょう。
host.defファイルの編集
~/DRI-CVS/build/xc/config/cf/host.defファイルは、XFree86のビルドプロセスを構成するのに使用されます。あなたは、あなたのビルドオプションをカスタマイズするか、またはあなたの特定のシステム構成のために調整をするようにそれを変更することができます。デフォルトのhost.defファイルはこのようなものです:
Code listing 5.5 |
#define DefaultCCOptions -Wall
#define DefaultGcc2i386Opt -O2
#define DefaultGcc2AxpOpt -O2 -mcpu=ev6 (or similar)
#define LibraryCDebugFlags -O2
#define BuildServersOnly YES
#define XF86CardDrivers vga tdfx mga ati i810
#define LinuxDistribution LinuxRedHat
#define DefaultCCOptions -ansi GccWarningOptions -pipe
#define BuildXF86DRI YES
/* Optionally turn these on for debugging */
/* #define GlxBuiltInTdfx YES */
/* #define GlxBuiltInMga YES */
/* #define GlxBuiltInR128 YES */
/* #define GlxBuiltInRadeon YES */
/* #define DoLoadableServer NO */
#define SharedLibFont NO
|
ProjectRoot変数は、XFree86ファイルがどこにインストールされるかを指定します。
私たちは、DRIファイルをあなたの既存のXFree86インストールの上にインストールすることを勧めます
- それは、一般的には、そうするのが安全で、より過ちをおかしにくいです。
この方針は,以前に推奨していたものと異なっています。
XFree86 4.xが/usr/X11R6/にインストールされないならば、あなたは以下をhost.defファイルに追加しなければならないでしょう:
Code listing 5.6 |
#define ProjectRoot pathToYourXFree86installation
#define MesaUse3DNow YES
|
MesaとDRIドライバーでSSE最適化を可能にしたいならば、
あなたはLinux 2.4.xカーネルにアップグレードしなければなりません。
Mesaは、SSEがあなたのプロセッサとあなたのオペレーティングシステムの両方によってサポートされるのを確認するでしょう、 DRIの中にMesaをビルドするために、
あなたは、/usr/src/linuxにLinux 2.4.xカーネルヘッダを持つ必要があります。
/usr/src/linuxにLinuxカーネルの以前のバージョンがある状態であなたがSSE最適化を可能にするならば、
Mesaはコンパイルされないでしょう。 警告されています。 2.4.xカーネルがあるならば、あなたは以下を加えるべきです:
Code listing 5.7 |
#define MesaUseKatmai YES
|
XFree86/DRIツリーのコンパイル
完全なDRIツリーをコンパイルするために:
Code listing 5.8 |
# cd ~/DRI-CVS/build/xc/
# make World >& world.log
|
1人のユーザが、また、以下をようにするのも必要であるかもしれないと提案します:
Code listing 5.9 |
# cd ~/DRI-CVS/build/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel
# make -f Makefile.linux radeon.o
|
デフォルトのコンパイルフラグで、コンパイルの間、多くの警告が出るのは正常です。
ビルドには時間がかかるので、あなたが自分の電子メールを
チェックするか、またはslashdotを訪問しても差し支えないでしょう。
Warning: -jオプションをmakeで使用しないでください(すなわち、distccを使用しないでください)。 それは、XFree86/DRIと共に動作しないと報告されています。 |
テキストエディタを使用して、誤りがないかどうかパターン***を捜すことによって、world.logを調べてください。
ドライバのインストール
あなたのシステムのためのDRIカーネルモジュールが造られたのを確かめてください:
Code listing 5.10 |
# 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.ooを見るべきです。インテルi810に関しては、あなたはi810.oを見るべきです。DRIカーネルモジュールをビルドするのに失敗したら、あなたは、Linuxカーネルの正しいバージョンを使用しているのを確かめるべきです。最新のカーネルはいつもサポートされるというわけではありません。
あなたのXFree86インストールにあなたのドライバーファイルのすべてをコピーしてください。
あなたは、取り替えられたファイルをバックアップするのをのぞむかもしれません。
これはRadeonカードを使用する例です。別のカードを持っているならば、適切なファイルをコピーしてください。
それらが何であるかをわからないならば、あなたがそこにあるものを見るためにそれらをコピーするディレクトリをチェックしてください。
Code listing 5.11 |
# cd ~/DRI-CVS/build/xc/exports/lib/modules/
# cp dri/r200_dri.so /usr/X11R6/lib/modules/dri/
# cp drivers/atimisc_drv.o /usr/X11R6/lib/modules/drivers/
# cp drivers/radeon_drv.o /usr/X11R6/lib/modules/drivers/
# cp extensions/libdri.a /usr/X11R6/lib/modules/extensions/
# cp linux/libdrm.a /usr/X11R6/lib/modules/linux/
|
「XF86Configの設定」のセクションにしたがってください
あなたの動作しているカーネルにおける適切なDRMモジュールをロードするには、カーネルモジュールを/lib/modules/`uname -r`/kernel/drivers/char/drm/にコピーしてください。modules-updateを実行して、Xサーバを再起動してください。カーネルを実行していないならば、それを使って、`uname -r`,カーネルの名前を使ってください。
Warning: すでにロードされている古いDRIカーネルモジュールをまずアンロードすることを確認してください。
あなたが最初に既にロードされるかもしれないどれよりも古いDRIカーネルモジュールを落すのを確実に行ってください。いくつかのDRMモジュールが、agpgartモジュールが最初にロードされるのを必要とするのに注意してください。 |
6.パフォーマンスの調整
ダイレクトレンダリングを最大限に活用してください
いくつかのオプションがデフォルトについて性能を最大30パーセント(またはそれ以上)向上させるかもしれません。/etc/X11/XF86Configにそれらを設定してください。
Code listing 6.1: XF86Config |
Section "Device"
Option "AGPMode" "4"
Option "AGPFastWrite" "True"
Option "EnablePageFlip" "True"
...
EndSection
|
さらに多くの機能を設定したいならば、DRIウェブサイトのfeatures
listingを調べてください。
7.トラブルシューティング
動作しません。 画面に何も表示されません、そして、理由がわかりません。
insmod radeon をXサーバの起動前に試してください。また、agpgartをカーネルに組み込む代わりにモジュールとしてビルドしてください。
startxを実行すると、このようなエラーになります: "[drm] failed to load kernel module agpgart"
それはあなたがモジュールではなくカーネルにagpgartをコンパイルしたからです。無視してください。
ダイレクトレンダリングは動作していません、そして、
/var/log/XFree86.0.logでは、ドライバーバージョンが低いというエラーがあります。
xfree-drmドライバを使用していないからです。
カーネルにDRMとドライバーをコンパイルしたかチェックしてください、違っているはずです。
私はRadeonを持っています、そして、テレビ出力をしたいです。
ati-gatosドライバーをチェックしてください。emerge -s gatos.
動作しません。 私のカードが非常に信じられないほど新しくて、クールなので、それは全くサポートされていません。
バイナリドライバーを試してください。 ati-driversにおいて、
リストが http://www.schneider-digital.de/html/download_ati.htmlにあります。
それらがサポートしないならば、VESAを使用してください。
遅くても、それは動作します。 彼らがすぐあなたのカードをサポートするので、将来、ドライバーをチェックしてください。
PCIカードを持っていますが,動きません。助けてください!
"Device"セクションでForcePCIModeを有効にします。
Code listing 7.1 |
Option "ForcePCIMode" "True" |
8.参考文献
- http://forums.gentoo.org/viewtopic.php?t=46681
- http://forums.gentoo.org/viewtopic.php?t=29264
- http://dri.sourceforge.net/
- http://www.retinalburn.net/linux/dri_status.html
|