Gentoo Logo
GentooJP Logo Side

ハードウエア3Dアクセラレーションガイド

Contents:

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
// /usr/src/linuxが現在のカーネルにリンクしていることを確認してください。
# 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
// agpgartをモジュールとしてコンパイルした場合、ドライバやagpgartのためにモジュールをロードする必要はありません。
// これらは自動的にロードされます。
# glxinfo | grep rendering
direct rendering: Yes
// "No"とした場合、3Dアクセラレーションなしになります。
# glxgears
// 秒間フレーム数(FPS)をデフォルトのサイズでテストしてください。できるかぎりCPUがアイドル状態のときに行ってください。
		

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
// (パスワードの入力を求められたらENTERキーを押してください
# cvs -z3 -d:pserver:anonymous@cvs.dri.sourceforge.net:/cvsroot/dri co xc
// -z3フラグはダウンロード時間を減らすために使われる圧縮を実行させます。
		

CVSソースのアップデート 

将来、あなたは、最新の変化を得るために時折DRIソースコードのローカルコピーをアップデートしたくなるでしょう。これは次のように、処理することができます:

Code listing 5.3

# cd ~/DRI-CVS
# cvs -z3 update -dA xc
// -dフラグは、新しいサブディレクトリを作成させることになります。
// -Aフラグは、ブランチソースではなく、最新のトランクソースを取ってくることになります。
		

ビルドツリーの構築 

オブジェクトファイルとライブラリファイルを正しくソースツリーに置くよりむしろ、 それらはかわりに並行した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
// i386用:
            #define DefaultGcc2i386Opt -O2
// Alpha用:
            #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
// XF86CardDriversの行にあなたのカードのドライバが示されていることを確認してください。
// 3DNow!最適化をMesaとDRIドライバで可能にしたくいのなら、以下の行を追加すべきです。
#define MesaUse3DNow YES
// AMDプロセッサを使っているなら、このオプションを可能にしなくてもよい。
// DRIは、動作時に3DNow!サポートを探し、そのときにだけ動作するようにします。
		

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
// radeonをあなたのドライバに置き換えてください
		

デフォルトのコンパイルフラグで、コンパイルの間、多くの警告が出るのは正常です。 ビルドには時間がかかるので、あなたが自分の電子メールを チェックするか、または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"
// これによりFPSが609から618に増加します。
     Option     "AGPFastWrite" "True"
// 観測できる効果はありませんが、コンピュータの不安定さを増すかもしれません。
// もちろん、BIOSで設定する必要があるでしょう。
     Option     "EnablePageFlip" "True"
// これは、FPSを618から702に改善します。もちろん「危険」ですが、ほとんどの人は問題を報告していません。
     ...
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.参考文献

  1. http://forums.gentoo.org/viewtopic.php?t=46681
  2. http://forums.gentoo.org/viewtopic.php?t=29264
  3. http://dri.sourceforge.net/
  4. http://www.retinalburn.net/linux/dri_status.html



line
Updated June 19 2003
line
Donnie Berkholz
Author

Jorge Paulo
Editor

内藤 郁之
翻訳

line
Summary:  この文書は、XFree86付属の(とともに)XFree-DRMを利用してGentoo Linuxで動作する3Dアクセラレーションを入手するためのガイドです
line
Copyright 2002-2003 Gentoo Linux Users Group Japan. Questions, Comments, Corrections? Email www@gentoo.gr.jp.