DirectX on WindowsMobile 5.0

昨日の続き

何が遅いのかを再度確認するために、QueryPerformanceCounter を使って、パフォーマンスのチェックをしてみました。すると、

WS007SH Ver 1.05a(Latest) / WM5.0

EraseScreen - IDirectDrawSurface::Blt/DDBLT_COLORFILL で実装。
平均:約2.6ms(まれに7msとかあるのが謎)

FlipScreen - IDirectDrawSurface::Blt/DDBLT_WAITNOTBUSY で実装。
平均:約15ms!

IDirectDrawSurface::Flip がまともに動作しないので、Blt で実装してみたものの、約15msと激遅(T_T)。

60FPS の、1フレームあたりは何msだか知ってますか、あーた。16msでんがな。ページフリッピングだけで15msも喰ってたら、描画する時間がありませんがな。

実際の描画も激遅。500個のFillRectかけたら、約90msもかかってます。FillRect一回当たり約200μsって…何もできませんがね。

VBLANKは取れないは、PageFlippingは激遅だは、描画も遅いは、もう、どうにもなりません。

あ〜ぁ。

PageFlippingを別スレッドにしたところでなぁ…



■IDirectDrawSurface::Flip の謎

呼び出すと、画面にランダムな色の縦縞が表示される。これって完全にVRAM壊してるイメージなんだけど、オイラが悪いんだろうと、SDK Sample の Donuts2 を動かしてみたけど、こいつも同じ症状。

おかしいなと思って、Softbank の HTC 端末で動かしてみたらちゃんと動くぢゃねーかー。
そんならと、WS003SH でも試したら、こいつも動く。

「つか、バグだろ。これ」

しかし、その WS003SH の Flip 平均速度がなんと 30ms!

「あーほーかぁー」

これって、ソフトウェアエミュレーションしてるな、きっと。

結局、なす術なし…ってことかいな。

■バグなのか、仕様なのか

WS007SH / WS003SH ともに、横画面状態で DirectDraw の初期化に行くと、CreateSurface でエラーが起きます。TCPMPなんかで、画面横で再生するとエラーな報告もあるので、これもバグっぽい。ちなみに、このTCPMPでは、ディスプレイドライバの推奨設定が Intel-XScaleになってるんですが、なんだこれ?TCPMPの独自ドライバ?それとも、オイラも使えるのか?


だれか教えてちょんだい。



○ちなみに昨日のVSYNCが実装されていない問題は、LCDユニットのPINアサインを見て解決。
http://document.sharpsma.com/files/LS037V7DW01_SP_051706.pdf

このユニット、Out端子がありませんよ先生。VYSNC と HSYNC の割込出力端子が無いってことですよ先生。ガビーン(T_T)