2012-06-09

Wine 1.5.6の興味深い変更

WineHQ - Wine Announcement

実は、今のところ、特に実行したい不自由なWindowsで動く不自由なソフトウェアがないのでWineはインストールしていないのだが、Wineの開発状況だけは、たまに観察している。Wine 1.5.6は、かなり興味深い。

The Wine development release 1.5.6 is now available.

What's new in this release (see below for details):
  - Automatic installation of the Mono add-on package.
  - Control panel applet for joysticks.
  - Device bitmap rendering now done through the DIB engine.
  - Support for video rendering through DirectX (VMR-9).
  - First steps towards a D3D shader compiler.
  - Build fixes for DragonFly BSD.
  - Various bug fixes.

まず、デフォルトでmonoも同時にインストールされるようになったことがある。.net frameworkはWindowsで最初からサポートされているライブラリである。ゆえに、実用的なWindowsの互換レイヤーを目指すならば、マネージドコードも実行出来なくてはならない。VMR-9のサポートも興味深い。

一番目をひくのは、D3Dシェーダーコンパイラーをサポートするべく取り組んでいるという事だろう。

WindowsでDirectXのシェーダーがどのように実行されるかというと、まず、HLSLかシェーダーアセンブリでシェーダーを記述し、マイクロソフトの、いわゆるd3d9x_##.dll(##はバージョン番号)でバイトコードにコンパイルする。アセンブリでの記述は最近のDirectXでは、確かサポートされていなかったはずだし、バイトコードは、昔はバイトコードに変換したものをプログラムに同梱していたが、今はプログラムの実行時に動的にコンパイルするようになっていたはずだが、それはこの際問題ではない。GPUのドライバーはこのバイトコードからGPU依存のコードに変換して実行する。もちろん、GPU内部でもひと仕事あるが、それはソフトウェアの外の話だ。

Wineでは、バイトコードを受け取り、GLSLに変換してあとはOpenGLの実装に任せる。Wineでは、d3d9x_##.dllの実装にも取り組んでいる。それには、シェーダーのコンパイラーを実装しなければならない。d3d9x_##.dllを完全に実装できれば、マイクロソフトの再配布ランタイムライブラリをインストールしなくてもすむのだ。

No comments: