続・玩式草子 ―戯れせんとや生まれけん―

第32回 Days of WINE and Struggles again[1]

この記事を読むのに必要な時間:およそ 3 分

Linuxと3Dグラフィックス

さて,前節では3Dグラフィックス技術の進化を概観したものの,Linuxはその中でどのような位置にいたのでしょう?

当初からGUI OSとして開発されてきたMS Windowsは,GDI(Graphic Device Interface)のような機能をシステムの中核に据え,急速に高機能化するビデオカードにもD3Dなどの技術で積極的に対応し,Windows Vistaのころからはユーザーインターフェイスも3D化する(Windows Aero)など,グラフィックス回りに関してはLinuxよりもずいぶん進んでいました。

Linuxは,元々UNIX互換OS(POSIX)のカーネルとして開発されたため,GUIについては「X Window Systemが使えればいいな」程度にしか考えておらず,カーネルレベルでのグラフィックス技術への対応はなかなか進みませんでした。

状況が変わってきたのは,ビデオカードが急速に高機能化していく90年代末ごろからです。開発が80年代に始まったX Window Systemは,⁠ビデオカードは画面データを映像信号に変換するだけの機器」という設計だったため,自前で演算能力を持つようになったGPUを制御できません。

そのためLinuxやXサーバの開発者たちは,DRI(Direct Rendering Infrastracture)という設計を提唱し,ユーザアプリケーションがXサーバやカーネルを経由してGPUを直接制御できるような仕組みを開発しました。

このあたりには,X386の開発者たちがXコンソーシアムから独立して立ち上げたXFree86プロジェクトが大きな役割を果しました。

その後,DRIは2度の改訂を受けてDRI3となり,カーネル内部のDRM(Direct Rendering Manager)とそれを操作するためのライブラリであるlibdrmと共に開発が続いています。

GPUを直接操作するDRM機能の開発にはGPUの技術情報が必須なものの,最近はこれらの開発にIntelやAMDの技術者が積極的に関わり,最新のGPUも利用可能になっています。

NVIDIAは情報開示に消極的なため,OSSなドライバでは十分な性能が出せず,商用(proprietary)ドライバが必要になるようです。

さて,前節で紹介したOpenGLは標準規格なものの,Khronos Groupが提供しているのは3Dグラフィックスに必要な機能とその機能を果すための関数名だけで,実際にGPUを操作してその機能を実現するためのライブラリの実装はGPUメーカ等に任されています。

IntelやAMD,NVIDIAといったメーカは,それぞれ自社のGPU用のドライバを作成し,Windows用だけでなくLinux用も公開してはいるものの,それらは特定のディストリビューションやカーネルバージョンに依存していて,使い勝手はあまりよくありません。

一方,このOpenGLの機能をOSSとして実装しよう,というプロジェクトも古くから存在します。それがMesaプロジェクトで,OpenGLの規格が策定された最初期から,その機能を実装したライブラリをOSSとして公開しています。

図2 Mesaプロジェクトのホームページ

図2 Mesaプロジェクトのホームページ

このMesaプロジェクトにもIntelやAMDの技術者が参加して,GPUの最新機能がいち早く利用できるようになりました。加えて最近では,OpenGLのみならず,組込み環境向けのOpenGL ESや次世代APIのVulkanGPUをより汎用的な用途に使うためのOpenCLGPUの持つ動画のエンコード/デコード機能を使うためのVA-API/VDPAUなどにも対応し,MesaプロジェクトはGPUを利用するための総合ライブラリに発展しています。

長くWindowsの後塵を拝していたLinuxの3Dグラフィックス機能も,DRIとMesaライブラリのおかげでWindowsに遜色ない程度に進化しました。さて,それではこれらの機能をWINEがどのように使うのか,次回から紹介していくことにしましょう。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html