そもそもDDIってなんだべさ

http://msdn.microsoft.com/en-us/library/aa911948.aspx

いわゆる「ディスプレイドライバ」なんだけど、これは、下のページを見る限り、デバイス毎に定義されているらしいから、今のままで良いんでしょう。
http://msdn.microsoft.com/en-us/library/aa929273.aspx

ちなみに、これに対応するレジストリと言えば

[HKEY_LOCAL_MACHINE\System\GDI\Drivers]

[HKEY_LOCAL_MACHINE\Drivers\Display\Active] 配下がありますが
・EMONEでは、[HKEY_LOCAL_MACHINE\Drivers\Display\Active\組み込み LCD]でんすな。

これらの違いは何かと言えば、上のページに
>To store configuration entries for your display driver, create a registry key under >HKEY_LOCAL_MACHINE\Drivers\Display. The initialization routine of your display driver should >create keys under HKEY_LOCAL_MACHINE\Drivers\Display\Active so applications can determine which >display devices are available.

とあるので、出荷時のドライバ設定は[HKEY_LOCAL_MACHINE\System\GDI\Drivers]に入れておいて、ドライバの初期化時に、[HKEY_LOCAL_MACHINE\Drivers\Display\Active]に設定を入れろっちゅーことでんすな。んで、これをアプリケーションが参照する…と。

そこから推論して考えると、そもそものドライバは nvddi.dll なんだけれども、初期化の時点で、ddi.dll参照を生成しているってことは、
隠してんだから使うんぢゃねぇ、ゴルァ
と言ってるってことですねぃ。恐らく ddi.dll では上位インタフェースを劣化させた上で、 nvddi.dll を呼び出しているものと思われます。
全くの理由なしに、性能を低下させている訳はないはずなので、nvddi.dll を直接使うと何らかの問題があるんでしょう。特に日本マーケットのお客様方は、厳しいですからねぃ。でもオイラは趣味で使う分には日本クオリティは要求しませんのであしからず。

→ちなみにオイラの入手した、xda_flame や X01T の ROM を解凍した中には、nvddi.dll と ddi.dll は見つかりませんでした。なぜして?拡張 ROM とやらが関係しておるんでしょうか?

nvddi.dll を活かすには

そんなこんなで、nvddi.dllをいかに活用するかが、GoForce5500搭載機のキモってことは理解できましたから、nvddi.dll を有効にしましょー。偉そうに言っている場合でなく、既にみなさんやられてるとは思いますが、敢えて書くと

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

"Dll"="nvddi.dll"
に書き換えてリセーット!
・あくまでEMONE用ですからね。

あんた、もう戻れませんよ。

と偉そうに言ってみたが、これで描画が即早くなると思ったら大間違い。世の中そんなに甘くないっす。

nvddi.dll を設定する

nvddi.dll が有効になったところで、こやつの設定をば。こやつの設定は以下にあります。

[HKEY_LOCAL_MACHINE\Software\NVIDIA Corporation\NVDDI]

ちなみに EMONE のデフォでは、こんな方々が。

"BootLoaderPresent"=dword:00000001
"Main_Rotate"=dword:00000000
"Main_Bpp"=dword:00000010
"Main_Panel"=dword:0000006c
"GE_Disable"=dword:00000000
"RGBOutActive"=dword:00000000
"RGBOut"=dword:00000000

こちらは xda flame な方々

"ENHANCE_2D_PERF"=dword:1
"USE_VIDEO_MEMORY_FOR_GPE"=dword:1
"Main_Rotate"=dword:0
"Main_Bpp"=dword:10
"Main_Panel"=dword:66
"GE_Disable"=dword:0

まぁ細かな表記の違いは気にしないとして、

香ばしい方々が約2名

こちらは X01T な方々

"BootLoaderPresent"=dword:1
"ENHANCE_2D_PERF"=dword:0
"USE_VIDEO_MEMORY_FOR_GPE"=dword:1
"Main_Rotate"=dword:0
"Main_Bpp"=dword:10
"Main_Panel"=dword:67
"GE_Disable"=dword:0

こちらも同じように香ばしい方々が…


着目すべきは以下の2点ではなかろうかと…

ENHANCE_2D_PERF

 この方の存在は、わりとあちこちの Blog なんかで語られてますが、想像するに 2D 描画が早くなるのではないかなぁと。先程のMSのddiのページありましたが、描画にハードウェアアクセラレーションをかけるかどうかはドライバに任されているのと、nvidiaサイトのどっかにこんなことも書いてあったので、2D ハードウェアアクセラレーションは存在しているのでしょう。

64-BIT 2D GRAPHICS ACCELERATION

* BitBLT with 256 3-operand raster ops
* Video scaling with range of 8x expansion to 1/64 th contraction
* Mono and solid pattern
* Mono-to-color expansion
* Mono source/pattern transparency
* Destination read/write color transparency
* All-angle Bresenham line draw
* Rectangle fill
* Image/Video Rotation
* Alpha Blending

追記:

Rectangle x 1000(GDI、Brushあり) のベンチマークを行ってみましたが、設定しても約3000msと、ほぼ変化がありませんでした。他のRender系APIはまだ試していないので、暫定的な結果ですが…

USE_VIDEO_MEMORY_FOR_GPE

 この方の存在は、あまり注目されていないようで、Google様によれば日本語サイトでのヒットはございません。

がっ

ぬるぽじゃないですよ。こいつにはとてつもない効果がありました。BitBltがなんと

約10倍に高速化(当社比)

GPE は 前述のMSサイトで Graphics Primitive Engine と書かれていますので、おそらくアクセラレータ本体と推測されます。んで、この GPE のためにメモリを使おうってんですが、具体的にはどのようなことが起きるのでしょうか。

a.GPE のために VRAM を確保して、それを使う。
b.GPE のために、確保してある VRAM を利用する。

のいずれかだと思うんですが、b.だと早くなるというより、メモリを節約するイメージなので、a.であると考えたい訳です。実際、800x480 の BitBlt を1000回繰り返すベンチマークを行ったところ、平均48000msから平均4700msへと、おおよそ10倍以上の速度向上が認められました。
しかし、実際のところ BitBlt が高速になって、劇的に速度が向上するアプリケーションって、そんなにない気がします。系統で言えば、ビデオ系とかエミュ系のようなダブルバッファリングを行うアプリケーションくらいでしょうか。

しかし、具体的なアプリケーションが思いつきません。


ところで、ちょっと気になるのが、以下の記事
http://xdaflameusers.com/viewtopic.php?pid=8148#p8148
こいつを有効にしたら、WMPでMP4が再生できなかったとある。なんの影響が?
こいつを無効にしたら、MP4が無効になるっていうなら、基本有効ってことにしましょう。