ページ

2009年8月6日木曜日

[Silverlight] Re: Smooth:ハードウェア・アクセラレーターの動作確認

シーラカンスさんの 「Smooth:ハードウェア・アクセラレーターの動作確認」 を見て私も初めて知ったこと。

まず、フレームレートを表示する
<param name="enableFramerateCounter" value="True" />
について。
これを True にしておくと左上に数字が 4つ表示されます。
Discovering Silverlight 3 ? Deep Dive into GPU Acceleration」 によると、左から

  1. フレームレート
  2. 使用されている GPU メモリのサイズ(キロバイト)
  3. GPU アクセラレートされているサーフェスの合計数
  4. GPU アクセラレートが明示的に指定されていないけど GPU アクセラレートされているサーフェスの数(これについては以下参照)

だそうです。

そして、次に
<param name="EnableCacheVisualization" value="True" />
について。
これを True にしておくと GPU アクセラレートされているところは普通の色で、されていないところは赤色で表示されます。
さらに加えて緑色で表示されるところもあります。
この緑色が何かなんですが、こちらも 「Discovering Silverlight 3 ? Deep Dive into GPU Acceleration」 によると、

Cache visualization shows cached objects in their natural color, and non-cached ones in red. Note that the control panel is above the lions. Therefore it also has to be cached on the GPU otherwise the GPU would not be able to blend it over the lions, and therefore the entire scene could not take advantage of GPU acceleration. We have not marked the control panel to be BitmapCached, so Silverlight has done this for us automatically. The control panel is thus an implicit surface, and displayed in green on the Cache Visualization.


(ざっとした訳)
Cache Visualization はキャッシュされているオブジェクトは普通の色で、キャッシュされていないものは赤で表示される。ライオンの上のコントロールパネルに注目。これも GPU でキャッシュされている。でないと、GPU はライオンの上にこれをブレンドできない。そうすると、シーン全体の GPU アクセラレーションのアドバンテージが無くなってしまう。コントロールパネルの部分には BitmapCache を指定していないけれども、Silverlight は自動的に BitmapCache を指定されていることにしてくれる。と言うわけで、コントロールパネルの部分は暗黙的なサーフェスということになり、Cache Visualization では緑色で表示される。

ということだそうです。
へぇ、良くできてるなぁ。
そして、enableFramerateCounter で表示される 4番目の数字がこの 「暗黙的に GPU アクセラレートされているサーフェスの数」 ということになるわけですね。

シーラカンスさんの記事 「11.ハードウエア・アクセラレーションの効果を見てみる」 のサンプルでも緑色になっているところがあります。
ただ、これらは BitmapCache が指定されているサーフェスと重なっているというわけではありません。
まったく試してもいないあてずっぽうな推測ですが、Button の方は BlurEffect が指定されているために自動的に GPU アクセラレートされているのかもしれません。
けど、Rectangle の方はどういう理由なのかよくわかりませんね。
暗黙的に GPU アクセラレートされる条件ってどっかに公開されてるのかな?


0 件のコメント:

コメントを投稿