Linux上でネイティブなDirectX 10/11の実装が実現 – Gallium3DによりオープンソースでGPUドライバ実装が可能に

phoronix.com Direct3D 10/11 Is Now Natively Implemented On Linux! Published on September 21, 2010 Written by Michael Larabel より。

概要として、

Luca BarbieriとMesa / Gallium3D開発者がオープンソースのグラフィクスドライバでMicrosoftのDirectX10と11のAPIをLinuxに搭載することに成功し、既に動作しておりWineに統合中とのこと。

Luca Barbieriは「D3D1x」と呼ばれているDirect3D 10/11 COM APIをGallium3Dに追加した。
Lucaはこれは単なる初期バージョンであるとしているが、既に動作しいくつかのDirectX10/11のテクスチャデモがLinux上で動作させることが可能。
これは現在のWine実装のようにDirect3DをOpenGLへ変換したりせず、ネイティブにGallium3DとTGSIに直接グラフィクスドライバ及びハードウエアとやりとりが可能である。
Gallium3Dの設計に感謝し、Direct3Dのサポートが基本的にLinuxドライバにほんの少しかほとんど変更無しで「フリー」で可能となる。

freedesktop.orgのコミットを読むと、「最初のゴールは複数のAPIサポートというGalliumの約束を現実にすることであり、Galliumの上に非常に薄い簡単な実装により動作を可能にすることを提供し、たくさんの巨大な絡みあったプログラムコードの必要なOpenGLの代わりになる。2番目のゴールはWineを使いLinux上でWindowsのDirect3D 10/11仕様のゲームを動作させることである。」

Wineもこの活躍に感謝を示し、DLLのいらないWineへの組み込みは行われいているが、Lucaは目標達成は全く持って簡単であると語った。

もしこの出来事がより良くできなければ、「FglrxとnvidiaドライバはOpenGLを使えるようなGalliumドライバを開発することでサポートが可能となり、それは比較的簡単な作業である。Direct3D 10/11の偉大な設計とGalliumとの近密性に感謝し、このアプローチが体感できるようなオーバーヘッド無しで結果を得られ、FglrxやnvidiaのプロプライエタリドライバからGalliumのオープンソースドライバに切り替えるパッチを提供するだけででほとんどメンテナンス可能になる。

特にDirectX10.0の限定サポートやDirectX11.0の未サポート状態のWineにとってこのニュースは信じられないようなものである。

現在の他のゴールについて、「3番目のゴールはWindowsシステム以外で動作するOpenGLを代替する高品質なグラフィクスプログラムの実現を可能にし、特にLinuxやその他フリーやオープンソースシステムにもたらされる。一から開発されたこの非常に簡潔で練られたコードに感謝し、Direct3D 10/11はOpenGLに比べ極めて良いAPIであり、極端なまでに少ないコードと開発時間でサポートすることが可能となり、あなたは現在存在するMesa OpenGL実装のプログラムソースと比較することも可能である。」

Linux上で標準でDirect3D 10/11が実装されたことについていくつか考えさせられるのは、「最後に、成熟したDirect3D 10/11実装はOpenGL実装に比べ本質的により高速でより高信頼であり、劇的に小さなAPIはアプリケーションを開発する目的のために必要な開発により多くの時間を割くことが可能になる。」

VMwareは以前Direct3Dの実装をし、それはオープンソースでもなく、Windows上でのGallium3D実装でDirectX9をターゲットにしたものであったが、それとは全く異なり、コミュニティメンバー達により開発されたオープンソースであるということである。

Gallium3Dの成果はMesa開発者たちにも可能なマイルストーンを準備した。
幸運にもまもなく私たちはOpenGL 3.x/4.0が実装されるのを遂に実現できるだろう。Linux上でのDirect3D 10/11実装の実現には26,000行の追加がMesaに必要であった。
私はMicroosftがDirect3DをLinux上で実装するのに彼らに何故ビール(※beerとwine。ソース元のページには開発者がビールで祝っている画像がある)を買ってやったのか不思議でたまらない。

※コミット内容

  • Independently created headers for Direct3D 10, 10.1, 11 and DXGI 1.1, partially based on the existing Wine headers for D3D10 and DXGI 1.0
  • A parser for Direct3D 10/11 DXBC and TokenizedProgramFormat (TPF)
  • A shader translator from TokenizedProgramFormat to TGSI
  • Implementation of the Direct3D 11 core interfaces
  • Automatically generated implementation of Direct3D 10 and 10.1
  • Implementation of DXGI using the “native” framework of the EGL st
  • Demos, usable either on Windows or on this implementation
    • d3d11tri, a clone of tri
    • d3d11tex, a (multi)texturing demo
    • d3d11gears, an improved version of glxgears
    • d3d11spikysphere, a D3D11 tessellation demo (currently Windows-only)
  • A downloader for the Microsoft HLSL compiler, needed to recompile the shaders (compiled shader bytecode is also included)

なお、x86_32でのみテストしたとのこと。

—-

すごい事になったな。OpenGLを介さずに実現するとは。

Ubuntu Linux 10.04 Lucid LynxのLinuxカーネル kernel-ppa mainline 2.6.36 2010年9月8日版でOracle Virtualbox 3.2.8を動作させる。

Ubuntu Linux 10.04のkernel-ppaに、Maverick Meeakat用のカーネル2.6.36のdebパッケージがアップされていたのだが、Oracle Virtualbox 3.2.8のkernel moduleのコンパイルに失敗する。実際に動作させる方法を備忘録としてメモする。

1. Oracle Virtualbox 3.2.8をインストールする。

Oracle Virtualbox公式ページからLinuxホスト用バイナリパッケージを参照してインストール。

2. Linux カーネル 2.3.36をインストールする。

http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/

.debファイルをクリックしてカーネルイメージとヘッダファイルをインストールする。ヘッダファイルはgeneric -> amd64の順番でインストール。

3. Virtualbox 3.2.8の修正パッチをあてる。

http://permalink.gmane.org/gmane.comp.emulators.virtualbox.devel/3134

上記のページ下部からAttachment (diff_vboxnetadp_vbox_3.2.8_linux_2.6.36) 3134-001.bin をダウンロードしておく。

$ sudo -s

$ cd /usr/share/virtualbox/src/vboxnetadp

$ patch -p0 < /ダウンロードしておいたディレクトリ/3134-001.bin

$ /etc/init.d/vboxdrv setup

これでモジュールが正常にコンパイル完了。

実はVMware Player 3.1を2.6.36で動作させることができなかったので乗り換えたw。しばらくすればVirtualboxのアップデートでパッチを充てなくても済むようになるだろう。あとGuestOSがWindowsVIstaやWindows7の場合サウンドドライバが見つからず音が出ないが、realteck.com.twあたりからAC97コーデックドライバをダウンロードしインストールすると音がなる。

Ubuntu Linux kernel-ppaにLinuxカーネル2.6.36が登場

http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/ より。

Ubuntu linux 10.10 Maverick Meeakat用Linuxカーネルバージョン2.6.36がdebパッケージでダウンロード可能。

現在linux-headersと共にインストール中。

changelogはkernel.orgから読んで。

更新

カーネルバージョンアップデート後正常に起動し、xorg-edgers Radeonドライバも問題なく動作。ただしVirutalbox-oseは起動するが、vmware-playerは例のごとくiommc.cで関数名の書き換えが必要かつvmware起動毎にカーネルモジュールを再コンパイルする現象が発生したので2.6.36の使用は一旦終了。

OpenSolarisのクローズボックス部分をオープンソースに置き換えるプロジェクト「Illumos」が始まる

sourceforge.jp OpenSolarisから派生した「Illumos」プロジェクト始動、OpenSolarisのさらなるオープン化を目指す より。

Illumos」について

  • もともとOpenSolarisのカーネルとユーザランドにGNUツールを組み合わせてネットワークストレージOSを開発した「Nexenta Systems」が始めた。
  • Nexenta OSの特徴はZFSGNUツールの組み合わせによる強固なストレージサーバを可能とする。
  • OpenSolarisはlibc_i18n、NFSロックマネージャ、Crypto Frameworkの一部がクローズドであり、Illumosではこれらをオープンにしていく。
  • クローズドだったlibcや一部のドライバの置 き換え作業中。
  • NFS/CIFSロックマネージャ、kcfモジュール、依存関係解決に取り組み予定。
  • 対応予定アーキテクチャ : x86、amd64、VMware、VirtualBox、SPARC
  • 順次対応予定アーキテクチャ : PowerPC、ARM

OracleがSunを買収した際に、OracleとOpenSolarisコミュニティとの間で行き違いのいざこざが起きており、その後Oracle側から継続を約束するとのメッセージを伝えたという出来事があった。

なかなかおもしろそうなプロジェクトである。

Ubuntu Linux 10.04 Lucid Lynxのカーネルバージョン2.6.35でVMware PlayerのVMMonのコンパイルでエラーが発生

カーネルバージョンアップの後、VMware Player 3.0.1のモジュールコンパイルが始まったが、VMMonのコンパイル時にエラーが発生する。

ネットを検索すると、VMware vmmon compilation issues on 64-bit kernel 2.6.35 という記事を発見。

どうやらiommu.c内のiommu_map_range と iommu_unmap_rangeの関数名が iommu_map と iommu_unmap へ変更になったようだ。リンク先の記事を参考にvmmonモジュールを書き換える。

$ cd /tmp
$ tar xvf /usr/lib/vmware/modules/source/vmmon.tar -C /tmp
$ perl -pi -e 's,_range,,' vmmon-only/linux/iommu.c
$ sudo tar cvf /usr/lib/vmware/modules/source/vmmon.tar vmmon-only

その後 vmplayer を起動すると、モジュールコンパイル&インストール確認ダイアログが表示されるのでinstallを選んで実行。

無事完了しVMware Player 3.0.1が起動した。