EMONE DDI レジストリ設定

[HKEY_LOCAL_MACHINE\Drivers\Display\Active\組み込み LCD]
-"Dll"="ddi.dll"
+"Dll"="nvddi.dll"

[HKEY_LOCAL_MACHINE\Software\NVIDIA Corporation\NVDDI]
+"ENHANCE_2D_PERF"=dword:1
+"USE_VIDEO_MEMORY_FOR_GPE"=dword:1



記述の意味は、- はレジストリ削除、 + はレジストリ追加、 -+ は変更ってことです(diff方式な感じ)。

これで、GDIのBitBltは確実に早くなります。TCPMPとかは、GDIを選択している場合(そんな人は居ないと思いますが)、確実に早くなるはずです。

ENHANCE_2D_PERF は、今のところ、性能向上は見られません。xda flame では 1 に設定されているので、まぁ、おまじないと言うことで(ぉ

[HKEY_LOCAL_MACHINE\Software\NVIDIA Corporation\GFSDK] の中にも関係するところはあるのかもしれませんが、取りあえず2D周りのチューニングはこれで一段落。ですな。

USE_VIDEO_MEMORY_FOR_GPE と Raw frame buffer の関係

ゲームなんかを作るとき、Windows API の ExtEscape() を使って、RAWフレームバッファアドレスを取得し、バッファ転送をするのが通例みたいですが、このオプションを有効にして、RAWフレームバッファにmemsetした結果…

GDIの0.1倍速

な結果となりました。およよ。Rawフレームバッファの場合には、ハードウェアアクセラレーションの恩恵が受けられないみたいですな。
TCPMPとか、ビデオドライバにRAWフレームバッファを指定した時、どんな処理になっているのか解りませんが、いろいろ試してみると面白いかもしれません。何か面白い結果を発見した人は、コメントしてください。

よろしくです。

EMONE DDI内部

EMONEのROM吸い出しに成功したので、nvddi.dllの中身を見てみました。定義されているAPIは以下の3種

DisplayInit()
DrvEnableDriver()
HALInit()

何か重大な発見をした気がするw

MSサイトのddiの説明には… http://msdn.microsoft.com/en-us/library/aa911948.aspx

>Ddi.dll exports only the DrvEnableDriver function, which returns a pointer to an array of 27 function pointers to the caller. When GWES requires a display driver, it calls one of these 27 functions.

とあります。DrvEnalbeDriverだけあれば良いのですか。ふむふむ。ん?

な〜んか2つほど多くないかい、あんちゃん?


そして驚愕の事実が…

またまたMSのDirectDrawドライバの説明には… http://msdn.microsoft.com/en-us/library/aa908378.aspx

>Modify the file used to export functions from your compiled binary.

It should export the HALInit function. To see how this is done, you can consult the sample driver source code file DDI.def. The HALInit function is part of the Ddgpe.lib. This should already be linked to your project.

ふむふむ HALInit をエクスポートしろと。ん?どっかで見たような?

え?

結果

DirectDrawでは既に、nvddiを使っているみたいですね。今まで調べていたレジストリは、ROMから抜いたレジストリで、それにはDirectDrawに関する記述にnvddiは登場してこなかったんですが、稼働中EMONEから抜いたレジストリだと、DirectDrawドライバにnvddiがしっかり設定されてました。
やっぱ、Windowsレジストリの編集では、2Dはこれが限界みたい。

ただ、nvddi.dllは、ディスプレイドライバとGDIドライバ、DirectDrawドライバの3点を兼ねていたということが解っただけでも。

っていうことは、これ以上やりたかったら、GFSDKのレジストリ周りってことになるんですよねぇ、やっぱり。