Windows 7 と GDI/GDI+ の GPU アクセラレーションの可能性
PDC 08 アジェンダに対する各地の反応
- http://twitter.com/Nakada_itpro/statuses/829991243
- http://twitter.com/Nakada_itpro/statuses/829991420
- http://event.media.yahoo.co.jp/nikkeibp/20080619-00000000-nkbp-bus_all.html
- http://cpplover.blogspot.com/2008/07/windows-7gdigdigpu.html
いやまあ私もその辺の話は全然知らないのですが.
ちなみに DWM や WPF といった技術・製品は DirectX チームの管轄ではないので,MVP Summit 等ではなかなか情報が集まりにくかったりします.まあ落ち着いて考えてみればそんなものでしょうけど.おすすめの情報源については後ほど.
GDI/GDI+ の GPU アクセラレーションは可能か?
んでまあ GDI/GDI+ が Direct3D で有効にアクセラレーション出来るかどうかですが,個人的には「やれば出来るかもしれないけど,それ意味あんの?」という印象です.つまり実装が難しい云々という話ではなくて,そもそも有効な場面があまり思い付かない,という根本的なところが気になります.
現在のメジャーな Web ブラウザや Flash (10 より前) / Silverlight の描画方式を思い出しましょう.近年のブラウザや Flash/Silverlight は,多くのアプリケーションシナリオをこなすのに十分なグラフィックス性能を得たように思うのですが,それが実は CPU 描画であるという点について皆様いかがお考えでしょうか?
Web ブラウザや Flash は,Windows Vista 登場以前から,クライアント領域全体のイメージをソフトウェアで描画していました.描画処理は CPU - メインメモリ間で完結しており,当然ながらグラフィックス性能は CPU クロックに比例します.VRAM 転送が発生するのは,クライアント領域の内容が完成し,実際に画面に表示する最後の部分だけです.
GPU 描画という響きに漠然と期待を持っている人は,『Flash Player 10 の GPU サポート機能について - akihiro kamijo』という記事がおすすめです*1.
GPU による GDI/GDI+ のアクセラレーションは,可能だとしても効果があるかよく分からない.そう認識しておいた方が,現物を見たときに変ながっかり感を受けずに済むかもしれません.仮に GPU による GDI/GDI+ の描画支援が導入されたとしても,従来から完全ソフトウェア描画を行っていたソフトウェア (しかしユーザにその見分けはつかないでしょう) には何の影響もありませんし,GDI/GDI+ アプリケーションなら必ず高速化すると約束できるほど世の中甘くもないでしょう.私はそういう認識です.
とはいえ,PDC 2008 で紹介すると言っているので,Microsoft は何らかの活用法は見つけたのでしょう.個人的には,割と枝葉末節なチューニングなんじゃないかなぁと予想しています.例えば ClearType 描画のフォントキャッシュ生成に GPU を活用するとか,投機的なレンダリング (CPU と GPU で同時に描画を行って,描画結果の読み出しが発生したら GPU 描画をキャンセル) とか.もちろん,私が見落としている何かすごい応用方法があるのかもしれません,
(追記: 以下の動画再生支援の可能性についてはコメント欄も参照のこと)
ちなみに,GPU の活用法として真っ先に考慮・評価されるべきは,動画のデコードでしょう.こればっかりは,サーバサイドだけに任せてしまうわけには行きません.通信路のデータ流量を減らす必要があるため,圧縮は不可避であり,クライアントサイドで働く何かが必要です.GPU による動画再生支援はだいぶ一般的になってきたかと思いますが,普及率・効率ともにまだまだ伸びしろはあると思っています.みんなムービー好きですしね.