D3D Shader/OpenGL」カテゴリーアーカイブ

SHIELD Android TV (Tegra X1) は OpenGL ES 3.2 対応

NVIDIA SHIELD Android TV はすでに OpenGL ES 3.2 の Context に対応していることがわかりました。

Android 5.1 Tegra X1 Maxwell (256)

GL_VERSION: OpenGL ES 3.2 NVIDIA 349.00
GL_RENDERER: NVIDIA Tegra
GL_VENDOR: NVIDIA Corporation
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.20

OpenGL ES 3.2 は ES 3.1 AEP が取り込まれており D3D11/OpenGL 4.x 相当の API となります。Android SDK が 3.2 に対応していないので現状ではあまり意味はありませんが、Desktop と共通のドライバが使われていることが読み取れます。

下記は Tegra K1 (Nexus 9 Driver 343.00) から追加された Extension です。

GL_EXT_discard_framebuffer
GL_EXT_draw_elements_base_vertex
GL_EXT_multi_draw_indirect
GL_EXT_post_depth_coverage
GL_EXT_raster_multisample
GL_EXT_shader_texture_lod
GL_KHR_context_flush_control
GL_KHR_robust_buffer_access_behavior
GL_KHR_robustness
GL_NV_conditional_render
GL_NV_conservative_raster
GL_NV_fill_rectangle
GL_NV_fragment_coverage_to_color
GL_NV_fragment_shader_interlock
GL_NV_framebuffer_mixed_samples
GL_NV_geometry_shader_passthrough
GL_NV_path_rendering_shared_edge
GL_NV_polygon_mode
GL_NV_sample_locations
GL_NV_sample_mask_override_coverage
GL_NV_shader_noperspective_interpolation
GL_NV_viewport_array
GL_NV_viewport_array2
GL_OES_copy_image
GL_OES_draw_buffers_indexed
GL_OES_draw_elements_base_vertex
GL_OES_texture_border_clamp
GL_OES_tessellation_point_size
GL_OES_tessellation_shader
GL_OES_texture_buffer
GL_OES_geometry_point_size
GL_OES_geometry_shader
GL_OES_gpu_shader5
GL_OES_shader_io_blocks
GL_OES_texture_view
GL_OES_primitive_bounding_box
GL_OES_texture_cube_map_array

↑ GL_NV_conservative_raster や GL_NV_fragment_shader_interlock など、Maxwell GM2xx で追加された D3D12 相当の機能も見えます。(参考)
↓ 他にも K1 との違いとして fp16 対応があります。

Precision:
 0: [15 15] 10       VS float  lowp
 1: [15 15] 10       VS float  mediump
 2: [127 127] 23     VS float  highp
 3: [31 30] 0        VS int    lowp
 4: [31 30] 0        VS int    mediump
 5: [31 30] 0        VS int    highp
 6: [15 15] 10       FS float  lowp
 7: [15 15] 10       FS float  mediump
 8: [127 127] 23     FS float  highp
 9: [31 30] 0        FS int    lowp
10: [31 30] 0        FS int    mediump
11: [31 30] 0        FS int    highp

詳細は下記に追加しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

公式サイトには Tegra X1 の CPU clock が載っていませんが、調べた限りでは 2.0GHz でした。ただし VFP Benchmark の実測では 2.1GHz 相当なので TB のような機能が働いているものと思われます。

VFP Benchmark Log

関連エントリ
Direct3D 12 GeForce GTX970 は FeatureLevel 12_1 対応、Resource Bind/Heap Tier は低い
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応

ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較

Qualcomm の DragonBoard 410c を入手したので vfpbench を走らせてみました。

Snapdargon 410 Cortex-A53 1.2GHz quad core
OS arch SP-ST DP-ST SP-MT DP-MT
Android 5.1 AArch64 9.377 4.737 30.817 15.063
Android 5.1 AArch32 9.442 2.558 29.290 7.753

・ 単位は GFLOPS, 値が大きい方が高速
・ SP=single fp, DP=double fp, ST=single thread, MT=multi thread

Cortex-A53 は big.LITTE の LITTLE に使われる core で Cortex-A7 同様 in-order の pipeline を持っています。ところが浮動小数点演算のピーク速度は予想以上に高い結果となっています。

上の結果が本当なら Cortex-A7 比で VFP で 2倍、NEON single だと最大 4倍速いことになります。また同一クロックかつピークのみに限定すれば big core にも並びます。ただし in-order かつ動作クロックも低いため、実際のコードでは big core とはかなり差が生じると思われます。倍精度演算の並列性も劣っているようです。

CPU core arch SP-ST DP-ST SP-MT DP-MT SoC clock
Cortex-A7 armv7a 2.374 1.165 9.474 4.653 MT8125 1.2GHz x4
Cortex-A53 arm64 9.377 4.737 30.817 15.063 APQ8016 1.2GHz x4
Cortex-A53 armv7a 9.442 2.558 29.290 7.753 APQ8016 1.2GHz x4
Cortex-A72 arm64 15.864 7.934 31.771 15.885 MT8173C 2.0GHz x2
Cortex-A72 armv7a 15.875 7.946 31.756 15.882 MT8173C 2.0GHz x2
Cyclone 2 arm64 23.568 11.751 68.591 33.968 AppleA8X 1.5GHz x3
Denver arm64 17.906 8.762 34.888 17.601 TegraK1 2.3GHz x2

Linux 上でコンパイル速度も測定してみました。RAM が少ないとはいえ十分速度が出ています。クロック差を考えても Desktop CPU との違いが少なくなってきてることがよくわかります。

CPU core clock C/T Compiler RAM sec
Core i7-4790K Haswell 4.0GHz 4C8T Clang-3.6 16GB 15
Celeron J1900 Silvermont 2.0GHz 4C4T Clang-3.4 8GB 79
Athlon 5350 Jaguar 2.0GHz 4C4T Clang-3.6 8GB 88
Celeron 2955U Haswell 1.4GHz 2C2T Clang-3.4 4GB 93
Celeron N3150 Airmont 1.6GHz 4C4T Clang-3.6 16GB 108
DragonBoard 410c Cortex-A53 1.2GHz 4C4T Clang-3.5 1GB 186
Raspberry Pi 2 Cortex-A7 0.9GHz 4C4T Clang-3.5 1GB 402
Atom Z540 Bonnell 1.8GHz 1C2T Clang-3.4 2GB 426
Raspberry Pi ARM1176 0.7GHz 1C1T Clang-3.5 0.5GB 1893
Netwalker Cortex-A8 0.8GHz 1C1T GCC-4.7 0.5GB 1902

* sec = コンパイル時間(秒)、値が小さい方が速い
* Dragonboard 401c = Debian 8.0

RAM が少ないデバイスはストレージ速度の影響が大きい点に注意してください。特に Raspberry Pi 系は SD カードに依存するため参考程度にお願いします。

下記のページを更新しました

VFP Benchmark Log 計測結果まとめ
CPU の浮動小数点演算能力の詳細

関連エントリ
2955U vs N3150/J1900/Athlon5350 (コンパイル時間の比較)
Apple TV の浮動小数点演算速度。Fire TV/Android TV との比較など
ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)
Raspberry Pi 2 で速くなったコンパイル時間の比較
BayTrail vs Kabini (Celeron J1900 vs Athlon 5350)
コンパイル時間の比較 BayTrail

Tool 座標系の違いのメモ

D3D 系 3D L/R UpV 3D Type
Direct3D Left-Hand Y-Up LY
Unity Left-Hand Y-Up LY
Snowdrop Left-Hand Y-Up LY
GL 系 3D L/R UpV 3D Type
OpenGL Right-Hand Y-Up RY
Maya Right-Hand Y-Up RY
Houdini Right-Hand Y-Up RY
SI3D/XSI Right-Hand Y-Up RY
CAD 系 3D L/R UpV 3D Type
3ds Max Right-Hand Z-Up RZ
Blender Right-Hand Z-Up RZ
CryEngine Right-Hand Z-Up RZ
その他 3D L/R UpV 3D Type
Unreal Engine Left-Hand Z-Up LZ

・GameEngine はツールの画面写真から判定。間違っている可能性があります。

下記のページを追加しました

Tool 座標系まとめ

Android 端末のアップデート (2) Intel HD Graphics と OpenGL ES 3.1 他

手持ち端末のアップデート続きです。

● ASUS MeMO Pad 7 ME176 (2014)

ME176 は BayTrail を搭載した Android Tablet です。Atom Z35** ではなく Windows Tablet に使われているものと同じ Z37** が使われています。そのため GPU も PowerVR ではなく Intel HD Graphics Gen7 になっています。

Android 5.0 への更新で OpenGL ES 3.1 が使えるようになりました。現時点で Android の OpenGL ES 3.1 対応を確認した GPU をまとめると下記の通り。

GPU API SoC
NVIDIA Tegra K1 OpenGL ES 3.1 AEP Tegra K1
Adreno 420/430 OpenGL ES 3.1 AEP Snapdargon 810/805
ARM Mail-T604 OpenGL ES 3.1 Exynos 5 Dual (5250)
ARM Mail-T760 OpenGL ES 3.1 Exynos 7 Octa (7420)
PowerVR G6430 Rogue OpenGL ES 3.1 BayTrail-T Z3560
PowerVR G6200 Rogue OpenGL ES 3.1 MediaTek MT8135
PowerVR GX6250 Series6XT OpenGL ES 3.1 MediaTek MT8173C
Intel HD Graphics Gen7 OpenGL ES 3.1 BayTrail-T Z3745

同じ Atom でも Z35** の PowerVR G6430 とは異なり、Intel HD Graphics Gen7 は Windows 上で Direct3D11 に対応しています。Android でも AEP には非対応なものの独自の Extension により GS や Tessellator が使えるようになっています。AEP でないのは ASTC に対応していないことが関係しているのかもしれません。

逆に Mali-T760/PVR GX6250 は GS/Tessellator がない代わりに ASTC 対応です。

GPU API GS/TS ASTC
NVIDIA Tegra K1 OpenGL ES 3.1 AEP Y Y(L)
Adreno 420/430 OpenGL ES 3.1 AEP Y Y(L)
ARM Mail-T604 OpenGL ES 3.1 N N
ARM Mail-T760 OpenGL ES 3.1 N Y(H)
PowerVR G6430 Rogue OpenGL ES 3.1 N N
PowerVR G6200 Rogue OpenGL ES 3.1 N N
PowerVR GX6250 Series6XT OpenGL ES 3.1 N Y(L)
Intel HD Graphics Gen7 OpenGL ES 3.1 Y N

MeMO Pad 7 ME176 の OpenGL ES 3.1 における Extension 等の詳細は下記ページに追加しました。Android 5.0 でも 64bit には非対応のままでした。

CPU/GPU OpenGL ES Extension (Mobile GPU)

また下記ページも更新しています。

OpenGL / OpenGL ES 2.0 / OpenGL ES 3.2

OpenGLES 3.0 対応で 3.1 非対応な GPU は今のところ Adreno 300 だけとなっています。また Intel HD Graphics も Gen8 以降は AEP 対応であることが判明しています。

● ZOTAC Tegra Note 7 (2013)

更新によって Android 5.1 になりました。SHIELD 同様 NVIDIA 自身が販売しているデバイスなので、比較的こまめに新しい OS がリリースされています。4.2 から 5.1 まできちんとサポートしてきたのは好印象です。ただし Tegra 4 なので OS は新しくても OpenGL ES 2.0 のままです。

● Amazon Fire HD 6 (2014)

Android 5.1 (API Level 22) 相当の Fire OS 5 がリリースされています。性能は非力ですが OpenGL ES 3.1 対応です。

● Kindle Fire HDX 7 (2013)

Snapdragon 800 搭載で、今回取り上げた 4台の中では最も性能が高いハードウエアとなっています。しかしながら OS の更新は Fire OS 4.5 (Android 4.4 API Level 19 相当) までで Fire OS 5 には非対応でした。Kindle/Fire 系はデイバスの種類が限られているものの最新 OS の提供打ち切りがかなり早い印象です。特に Adreno 420 搭載なのに 3.1 AEP が使えない Fire HDX 8.9 (2014) は少々残念です。
iOS ではスペック上の問題さえなければ新しい OS が提供されているので、Fire も OS を継続してサポートしていればプラットフォームとしてもう少し開発しやすかったように思います。

Device FireOS Android API SoC GPU
Fire TV Stick 2015 5.0 5.1 22 Broadcomm 28155 VideoCore IV
Fire TV 2015 5.0 5.1 22 MT8173 PowerVR GX6250
Fire 2015 5.0 5.1 22 MT8127 Mai-450
Fire HD 8/10 2015 5.0 5.1 22 MT3135 PowerVR G6200
Fire HD 6/7 2014 5.0 5.1 22 MT8135 PowerVR G6200
Fire HDX 8.9 2014 4.5 4.4 19 Snapdargon 805 Adreno 420
Fire HDX 7/8.9 2013 4.5 4.4 19 Snapdargon 800 Adreno 330
Fire HD 7 2013 4.5 4.4 19 TI OMAP4470 PowerVR SGX544
Fire HD 8.9 2012 4.0 4.0 15 TI OMAP4470 PowerVR SGX544
Fire HD 7 2012 4.0 4.0 15 TI OMAP4460 PowerVR SGX540
Fire 2012 4.0 4.0 15 TI OMAP4430 PowerVR SGX540

Amazon: Device and Feature Specifications

関連エントリ
Android 端末のアップデート (1) Android Wear バージョン一覧と新しいアーキテクチャ
Desktop GPU と OpenGL ES 3.1 API
Android 5.x OpenGL ES 3.1 と対応 GPU
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
ASUS MeMO Pad 7 ME176 で OpenGL ES 3.0 が復活
Android の新しい GPU BayTrail-T Intel HD Graphics

Apple TV の浮動小数点演算速度。Fire TV/Android TV との比較など

新しい Apple TV は Apple A8 搭載で Android TV や Fire TV 同様アプリケーション走らせることができるようになっています。vfpbench を試してみました。clock 数から計算すると Apple TV の CPU は 1.4GHz だと思われます。

ARCH: ARMv8A
FPU: AArch64 NEON
SingleT SP max: 22.197 GFLOPS
SingleT DP max: 11.105 GFLOPS
MultiT  SP max: 44.331 GFLOPS
MultiT  DP max: 22.084 GFLOPS
CPU core: 2

詳細は下記に追加しています。

VFP Benchmark Log

同等の TV 用プレイヤーデバイスとの比較。

device CPU SP DP SP-MT DP-MT
Apple TV Cyclone 1.4GHz 2 22.2 11.1 44.3 22.1
Fire TV 2015 Cortex-A72/A53 2.0GHz 2+2 15.9 7.9 31.8 15.9
Nexus Player ilvermont 1.8GHz 4 8.7 2.7 33.9 10.7

(SP/DP/SP-MT/DP-MT の単位は GFLOPS, 数値が大きい方が高速)

GPU は下記の通り

device SoC GPU API ASTC
Apple TV Apple A8 PowerVR GX6450 ES3.0/Metal Y
Fire TV 2015 MT8173C PowerVR GX6250 ES3.1 Y
Nexus Player Atom Z3560 PowerVR G6430 ES3.1 N

SoC/CPU core が異なるもののなぜか GPU はみな PowerVR です。動作クロックは不明ですが型番上は Apple TV の GPU が一番性能が高いことになります。

なお Android TV は Nexus Player 以外にも存在しているため性能にはばらつきがあります。例えば NVIDIA SHILED も Android TV です。

下記ページも更新しました。

Video Game Console スペック一覧

いずれも GameController に対応しており Game Console のような使い方も可能となっています。

Nexus Player, Fire TV は純正の Wireless Game Contoller が用意されていますし、Android に対応した Game Pad を USB 接続することも可能です。特に Fire TV はフルサイズの USB コネクタなので変換アダプタも不要。Apple TV は iOS 仕様の Bluetooth ゲームパッドを使うことができます。

device RAM ROM LAN USB SD 電源
Apple TV 2GB 32/64GB Y Type-C 内蔵
Fire TV 2015 2GB 8GB Y USB2.0 microSDXC 専用ACアダプタ
Nexus Player 1GB 8GB N microUSB 専用ACアダプタ

apple_tv01.jpg

↑左上から AppleTV, Fire TV, Nexus Player

Apple TV は厚みがある代わりに AC アダプタが不要です。

apple_tv02.jpg

↑付属リモコン 左から Nexus Player, Fire TV, Apple TV

充電式で乾電池が不要な分だけ Apple TV のリモコンは薄型です。Nexus Player, Fire TV はどちらもリング状の方向キーでセンターが決定、左下に Back キー。Apple TV はカーソルの代わりにタッチパッドがついており押し込みで決定。MENU がバックキー相当です。

関連エントリ
ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)
Amazon Fire TV と OpenGL ES 3.1, TV Stick の OS
Nexus Player を GamePad&Mouse で使う、他
Android 5.0 Nexus Player x86 と対応 ABI