OpenGL ES 2.0/3.0 Mobile GPU の Shadow Map の違い

・Android Adreno 320 OpenGL ES 3.0 (Nexus 7 2013)
adreno320_nexus7_es3.png

・Android Adreno 320 OpenGL ES 2.0 (HTC J butterfly HTL21 )
adreno320_es2.png

・Android Mali-T604 OpenGL ES 3.0 (Nexus 10 2012)
malit604_nexus10_es3.pngmalit604_nexus10_es3_b.png

・Android Tegra 4 ULP GeForce(72) OpenGL ES 2.0 (Tegra Note 7)
tegra4_note_es2.png

・Android Tegra 3 ULP GeForce(12) OpenGL ES 2.0 (Nexus 7 2012)
tegra3_nexus7_es2_colorbuffer.png

・iOS7 PowerVR SGX543MP3 OpenGL ES 2.0 (iPhone 5)
pvr543mp3_iphone5_es2.png

・iOS7 PowerVR G6430 OpenGL ES 3.0 (iPhone 5s)
pvrg6340_iphone5s_es3.png

・RK3066 Mali-400MP4 OpenGL ES 2.0 (MOMO7)
mali400mp4_es2.png

・Vivante GC4000 OpenGL ES 2.0 (dtab 01)
vivante_gc4000_es2.png

OpenGL ES 2.0 デバイスの大半は GL_OES_depth_texture だけに対応しており
フィルタはかかりません。
depth_texture が無い Tegra2/3 は ColorBuffer で代用しています。

Tegra 4 は OpenGL ES 2.0 ですが Extension で GL_EXT_shadow_samplers に
対応しておりハードウエアで sampling できるようになっています。

同じように iOS の PowerVR Series5XT も OpenGL ES 2.0 ながら早くから
GL_EXT_shadow_samplers に対応していました。
iOS5/6 の当初は PCF もなく見た目が全く変わらなかったのですが、
iOS7 ではいつの間にかフィルタがかかるようになっていました。

なお同じ PowerVR Series5XT の GPU でも Android では残念ながら
shadow_samplers が使えない場合が多いです。

OpenGL ES 3.0 以降は PC 同様そのまま shadow samplers が使えます。
ただし結果は GPU やドライバによってかなり差があるようで、
Adreno 320 や PowerVR G6430 が 4 tap PCF のみ。
逆に Mali-T604 のフィルタは他より質が高くなっています。

                        OS  OpenGL depth-tex sh-sample PCF Linear
-----------------------------------------------------------------
APQ8064 Adreno 320      A44 ES 3.0     ◎       ◎      ◎   --
APQ8064 Adreno 320      A41 ES 2.0     ◎       --      --   --
Exynos5 Dual Mali-T604  A44 ES 3.0     ◎       ◎      ◎   ◎
Tegra 4 ULP GeForce(72) A43 ES 2.0     ◎       ◎      ◎   ◎
Tegra 3 ULP GeForce(12) A44 ES 2.0     --       --      --   --
A6 PowerVR SGX543MP3    i70 ES 2.0     ◎       ◎      ◎   ◎
A7 PowerVR G6430        i70 ES 3.0     ◎       ◎      ◎   --
K3V2 Vivante GC4000     A41 ES 2.0     ◎       --      --   --
RK3066 Mali-400MP4      A41 ES 2.0     ◎       --      --   --
OMAP4430 PowerVR SGX540 A42 ES 2.0     ◎       --      --   --

Tegra 2 → Tegra 3 は core 数(速度) が違うだけで機能は全く同一でした。
対して Tegra 4 の GPU は、Tegra2/3 と比べると大幅に拡張されています。
機能面で見ればほぼ別 GPU といえるほど差があるのですが、
OpenGL ES 3.0 未対応など先行する他 GPU より見劣りする部分もあります。

DX9 世代の G70 ベースの限界なのか、それとも単に Tegra2/3 で
削っていた能力を元に戻しただけなのかもしれません。

一般的に NVIDIA に期待するイメージは強力な GPU でしょう。
ですがこれまでの Tegra は真逆で CPU に偏重した作りでした。
次の Tegra K1 以降はようやく NVIDIA らしい GPU になりそうです。

関連エントリ
OpenGL ES 2.0 Adreno 330, Tegra 4 の GPU 速度