Xorg/ハードウェア3Dアクセラレーションガイド
この文書はGentooのXorgでDRMを使用して3Dアクセラレーションを動作させるためのガイドです。
はじめに
ハードウェア3Dアクセラレーションとは何ですか、またどうしてそれが必要なのですか?
ハードウェア3Dアクセラレーションにより、3Dレンダリングは、3D画像を描画する貴重なCPUリソースを使用する代わりに、ビデオカードのグラフィックプロセッサを使用します。 この3Dアクセラレーションがなければ、CPUはMesaソフトウェアレンダリングライブラリを使用してすべてを描画する必要があり、かなりの処理能力を消費するため、「ソフトウェアアクセラレーション」ではなく「ハードウェアアクセラレーション」とも呼ばれます。
Xorgは、大抵は2Dハードウェアアクセラレーションに対応していますが、しばしばハードウェア3Dアクセラレーションを欠いています。3次元のハードウェアアクセラレーションは、ゲームや3D CAD、そしてモデリングのような、3Dのオブジェクトのレンダリングが必要になる状況において役に立ちます。
ハードウェア3Dアクセラレーションを動作させる
多くの場合、バイナリとオープンソースの両方のドライバーが存在します。 我々はLinuxを使用しており、オープンソースはその基本原理の1つであるため、オープンソースドライバーが望ましいです。 場合によっては、特にグラフィックカードが新しく、その機能をサポートするオープンソースドライバーがまだ作成されていない場合は、バイナリドライバーが唯一のオプションです。 バイナリドライバーには、NVIDIA カード用のx11-drivers/nvidia-driversと、古いAMD/ATIカードの場合はx11-drivers/xf86-video-ati(以前はx11-drivers/ati-driversでした)、新しいAMDカードの場合、dev-libs/amdgpu-pro-openclが含まれています。
DRIとは何ですか?
ダイレクト・レンダリング・インフラストラクチャは DRI として知られる、グラフィックハードウェアに安全、効率的に直接アクセスすることが出来るフレームワークです。それは Xorg サーバ、いくつかのクライアントライブラリ、カーネルへの変更を含みます。DRI の一番主要な利用法は高速な OpenGL の実装の作成です。
DRMとは何ですか?通常のXorgとどのように関連しますか?
DRM (ダイレクト・レンダリング・マネージャ)は、ダイレクトレンダリングに必要なカーネルモジュールを追加することにより、グラフィックカードのための3Dアクセラレーションを追加するXorgの付加機能です。
目的
このガイドはXorgのみでダイレクトレンダリングが動作しない人々のためのものです。DRMは以下のドライバで動作します。
- 3dfx
- amdgpu
- amdgpu-pro (クローズドソース)
- intel
- matrox
- nouveau
- nvidia-drivers (クローズドソース)
- rage128
- radeon
- radeonhd (非推奨)
- mach64
- sis300
- via
より詳細な情報とドキュメントについてはDRI ホームページを見てください。
Xorgのインストールとカーネルの設定
Xorgのインストール
Xorg を動作させるためには Xorg 設定ガイドを読んでください。
カーネルの設定
対象のハードウェアの詳細を調査してください。
root #
emerge --ask sys-apps/pciutils
root #
lspci | grep -Ei "VGA|AGP|3D"
# 00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
ハードウェアが異なることにより上記の出力は実際の出力と一致するとは限りませんが、何が返ってきたとしても、どのカーネルオプションを考慮すべきかの情報を与えてくれるでしょう。
カーネルオプションには必要なものもあれば、逆に問題を起こすものもあるでしょう。どのハードウェアにどのカーネルオプションが必要か、ハードウェアごとの資料はこの、wiki 内を含む様々な箇所にあります。
しかしながら、上のコマンドが何も返さないことも稀にですが考えられます。その場合は lspci -nnk の完全な出力内容が、状況を再確認するために、そして助けを求めるためのいい情報源です。
上の例では、チップセットは AGP チップセットですが、カーネルによって対応されていません。この場合、カーネルのパラメータとして agp=try_unsupported
を渡すと何らかの成功が得られるかもしれません。これはAGPへの対応にIntelの一般的なルーチンを使用します。このパラメータを追加するには、ブートローダの設定ファイルを編集してください。繰り返しになりますが、必要なカーネルコンフィグオプションと利用可能なブートローダパラメータは、ハードウェアの詳細によって異なるでしょう。
カーネルオプションの変更に進む前に、必要であれば、/usr/src/linux が意図したカーネルにリンクしているか確認してください:
root #
ls -dl /usr/src/linux*
lrwxrwxrwx 1 root root 19 Feb 16 16:30 /usr/src/linux -> linux-5.4.18-gentoo drwxr-xr-x 27 root root 4096 Feb 16 21:27 /usr/src/linux-4.19.103-gentoo
シンボリックリンクを別のターゲットに更新するためには、これらのコマンドを使用してください。2 番目のコマンドは、1 番目の出力に表示された選択肢のうちから引数を受け取ります:
root #
eselect kernel list
root #
eselect kernel set
シンボリックリンクが確認できたら、カーネルオプションを修正するには:
root #
cd /usr/src/linux
root #
make menuconfig
全てではないとしても、ほとんどのカーネルはこれらのオプションを持っているはずです。いずれにせよ、<M> が付けられたオプションはモジュールとしてコンパイルされ、必要に応じてロードされるので、不要だったとしても何かを壊すことはほとんどないでしょう。
以下の例は、通常のsys-kernel/gentoo-sourcesのカーネルを使用して設定しました。
Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Device drivers --->
Graphics support --->
<M> /dev/agpgart (AGP Support) --->
(The agpgart option is not present on 64-bit kernels;
just choose the appropriate chipset support.)
<M> Intel 440LX/BX/GX, I8xx and E7x05 support
(Enable the appropriate chipset instead of the above.)
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
<M> (Select the appropriate graphics card from the list)
カーネルのコンパイルとインストール
root #
make && make install && make modules_install
grub.conf か lilo.conf かの設定してください。
LILO を使用している場合は、次を実行してください:
root #
lilo
GRUB2 を使用している場合は、次を実行してください:
root #
grub-mkconfig -o /boot/grub/grub.cfg
videoグループへ適切なユーザを追加する
次に、適切なユーザをvideoグループに追加します:
root #
gpasswd -a $USER video
ダイレクトレンダリングの設定
Xorgの設定
幸運にも、単に適切なユーザをvideo
グループに追加するだけで、ダイレクトレンダリングを有効にするには十分です。しかしながら、Xorgは/etc/X11/xorg.conf.d/ディレクトリを通していくつか追加の設定が必要になるかもしれません。このディレクトリ内に作られる新しい設定ファイルは、最後が.confで終わるのなら、名前は英数字を使ったどのような名前でも構いません。お好きなテキストエディタを開き、中にこれらを含むファイルを作成してください:
Section "Device"
Identifier "AMD Radeon"
Driver "radeon"
EndSection
Section "dri"
Mode 0666
EndSection
radeon
を適切なドライバ名で書き換えてください。
AMD Radeon
は、識別子として一意で分かりやすい文字列で置き換えてください。通常はこれは、このセクションの最初で明らかにしたグラフィックスデバイスの名前になるでしょうが、他の一意な文字列でもかまいません。
自動的にモジュールを読み込むように変更する
システムが起動したときにモジュールが確実に自動的に読み込まれるよう、/etc/modules-load.d/video.confにグラフィックカードが使用しているモジュールの名前を追加する必要があるでしょう。
intel-agp # あなたのドライバの名前に書き換えてください
もし
agpgart
をモジュールとしてコンパイルした場合、これを/etc/modules-load.d/video.confにも追加する必要があります。3Dアクセラレーションのテスト
新しいカーネルでリブート
コンピュータを新しいカーネルで再起動して、通常のユーザとしてログインしてください。ダイレクトレンダリングがどんなにいいかを確認するときです。gixinfo
やgixgears
はx11-apps/mesa-progsパッケージの一部ですので、これらのコマンドを実行する前に必ずインストールしてください。
user $
startx
たとえモジュールとしてコンパイルしたとしても、ドライバやagpgart用にモジュールを読み込む必要はありません。これらは自動的に読み込まれます。
user $
glxinfo | grep rendering
direct rendering: Yes
もし出力が"No"なら、3Dアクセラレーションが有効になっていません。
user $
glxgears
デフォルトの大きさでフレーム毎秒(frames per second, FPS)を試してください。DRMを設定する前よりもかなり大きな数値になっているはずです。CPUがなるべくアイドル状態の時に行なってください。
FPSはスクリーンのリフレッシュレートによって制限されるかもしれません。そのためもし
glxgears
がたったの70から100FPSとしか報告しない場合、これを気に留めておいてください。games-fps/xonoticや他の3Dゲームのほうが、実際のパフォーマンスがわかる分、より良いベンチマークツールとなります。ダイレクトレンダリングを最大限に活用する
もしパフォーマンスや他の理由でもっと多くの機能を設定したい場合、DRIのウェブサイトにある機能表、あるいはSourceforgeにある機能一覧を確認してください。
トラブルシューティング
レンダリングに関する問題
Xサーバを開始する前に、modprobe radeon
(radeon
をあなたのドライバ名に置き換えてください)を実行してみてください。また、agpgartをモジュールとしてではなく、カーネルの一部分としてビルドしてみてください。
startxを実行中の"Failed to load kernel module agpgart"
startx を実行後に error: "[drm] failed to load kernel module agpgart" が出るのは、agpgart がモジュールとしてではなく、カーネルの一部分としてビルドされているためです。問題が発生しない限り無視してください。
Radeon GPU上でのテレビ出力
元々GATOSプロジェクトによって開発されたドライバはXorgのコードベースに統合されました。テレビ出力に関して特別なことをする必要はありません。x11-drivers/xf86-video-atiで上手く行きます。
新しくリリースされたGPUとの互換性
バイナリドライバを試してください。AMD カードに関しては、ati-drivers
を使用してください。もしバイナリドライバがこれをサポートしていない場合、fbdev
を使用してください。遅いですが、それでも動作します。
PCIカードが適切に動作しない
/etc/X11/xorg.conf.d/に設定ファイルを作成し、.confで終わる任意の名前にしてください。以下の内容を追加してください:
Section "Device"
Option "ForcePCIMode" "True"
EndSection
外部の情報
- Direct rendering (DRI) using X11-DRM HOWTO(Gentooのフォーラム)
- Radeon 7000-9700 DRI CVS Install Guide(Gentooのフォーラム)
- https://dri.freedesktop.org/
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Donnie Berkholz (dberkholz) , peesh, nightmorph
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.