読者です 読者をやめる 読者になる 読者になる

Desktop Composition Remoting & DirectX Remoting

DirectX Vista



追記2.色々勘違いしていたようなので後ほど再検証します.以下の記事についてはとりあえず信用しないようにしてください.


Windows Vista では,リモートデスクトップ越しに AeroGlass を使用することができます.Desktop Composition Remoting と呼ばれるこの機能,実は DirectX 呼出しをクライアントマシンにリダイレクトすることで実現されています.このとき,磨りガラス効果によるウィンドウ合成は,サーバではなくクライアントの GPU によって行われています.


Windows Vista RTM 版に関する追記. RTM 版では,DirectX Remoting は使用不可能に変更されています.既存の多くの DirectX アプリケーションが,実行中にハードウェアの性能が変化することを想定していないことからも,この修正は妥当かと思われます.一方,milcore.dll レベルでのリモーティング (Avalon Remoting) は引き続きサポートされ,デスクトップコンポジションや WPF アプリケーションは,リモートデスクトップ環境でも引き続きローカルの GPU 資源を利用して表示されます.


次のスクリーンショットは,Vista 同士でリモートデスクトップ接続を行い,DirectX SDK に付属するサンプルプログラムを実行してみたものです.
ぱっと見ただけでも以下のことが分かります.

  • AeroGlass が有効になっている
  • Direct3D デバイスが "RDPDD Chained DD" *1 になっている


テスト環境は以下のようになります.

テストはこれらの 2 台を 1Gbps の LAN で結んで行っています.
なおこの新しいリモートデスクトップの機能を使用するには,サーバ / クライアント共に Windows Vista または Longhorn Server である必要があります.また,本来は最新のビルド 5456 で試したいところなのですが,この症状 でリモートデスクトップ接続自体が出来なくなっていたので,ビルド 5384 を使用しています.
DirectX の機能が実際にリダイレクトされていることは,Direct3D の caps bit の内容からも伺えます.
dxinfo で公開されているレポートツールを利用し,次の 4 パターンについて caps bit を調べてみました.

  1. マシン A で直接実行
  2. マシン B で直接実行
  3. クライアント A からサーバ B にログインし,サーバ B のデスクトップ上で実行
  4. クライアント B からサーバ A にログインし,サーバ A のデスクトップ上で実行

生データも置いておきます.
http://www.dwahan.net/nyaruru/hatena/dxinfo.zip
結果を見てみると,(2)と(4)の caps bit は,それぞれ良く一致していることがわかりました.サーバ本来のデバイスではなく,"RDPDD Chained DD" というデバイスが列挙され,その caps はクライアント機のハードウェア性能と酷似しているというわけです.それに比べれば (1)と(3) の結果はそれほど一致しているわけではなく,ドライバによって差が出るところなのかもしれません.
さらにいくつか調べてみると,いずれも Direct3D8 以前のリダイレクトはサポートされていないようでした.通常ほとんどのハードウェアは Direct3D9 のハードウェア実行をサポートしていれば,それ以前の Direct3D についても基本的にハードウェア実行をサポートしているのですが,この点で "RDPDD Chained DD" は結構嫌らしいかもしれません.
DirectDraw は,一部機能はリダイレクトされるらしきようにも見えますが,詳しく調べていないのでよく分かりません.OpenGL 系についても調べていません.
またプロセス起動後にリモートデスクトップ接続をオンオフすると,デバイスの存在そのものが入れ替わってしまうので,デバイスの列挙からやり直しという羽目になりそうです.これはこれで問題が起きることは結構ありそうです.



さて,Desktop Composition Remoting が可能であることから,Virtual PC などの仮想 PC 上の Vista であっても,強力な GPU を備えた Vista クライアント機を一台用意しておくことで,リモートデスクトップ越しに AeroGlass を有効化できそうな気がしてきます.実際そのような可能性について,MSDN blog にて言及されています.
http://blogs.msdn.com/mikekol/archive/2006/02/22/537325.aspx
ただ,残念ながら手元の環境ではうまくいきませんでした.Virtual Server 2005 R2 SP1 beta に Windows Vista build 5384 と Virtual Machine Additions for Beta 2 をインストールし,これをサーバ機として実験してみたのですが,リモート接続後に DirectX の Caps Viewer を見てもリファレンス・ラスタライザしか見あたらず,テーマ選択で Windows Vista を選択しても AeroGlass は有効化できませんでした.一応フィードバックは投稿しておきましたが,製品版では是非使えるようになって欲しいですね.

*1:この名称自体は以前からちらほら見かけるみたいですな[google:RDPDD Chained DD]