月別アーカイブ: 2015年6月

Desktop GPU と OpenGL ES 3.1 API

OpenGL ES は Mobile 等で用いられる API ですが、Desktop 向け OpenGL にも
積極的に取り込まれており互換性が保たれるようになってきました。
OpenGL 4.5 では GL_ARB_ES3_1_compatibility をサポートし、
OpenGL ES 3.1 API としても使うことができます。

2015/06/25 現在 Windows での対応状況 (beta driver 含む)

Windows           Desktop API   Mobile API
-------------------------------------------------------------
GeForce           OpenGL 4.5    OpenGL ES 3.1 AEP
RADEON            OpenGL 4.5    OpenGL ES 3.1
Intel 4000 (Gen7) OpenGL 4.0    OpenGL ES 3.1    IvyBridge世代
Intel 4600 (7.5)  OpenGL 4.3    OpenGL ES 3.1    Haswell世代

Intel と GeForce は OpenGL ES 3.1 Context を作り直す必要があります。
RADEON の場合は OpenGL 4.5 Context のまま使用します。
Desktop GPU 上で OpenGL ES を使う方法については下記にまとめています。

Desktop 向け OpenGL ES 2.0 / OpenGL ES 3.0 / OpenGL ES 3.1 (AEP) 実行環境

Intel HD Graphics (D3D11世代) は OpenGL 4.5 に対応していませんが、
新しいドライバでは OpenGL ES 3.1 に対応しています。
具体的には Ivy Bridge 世代の Intel HD Graphics 4000/2500 以降で、
BayTrail の HD Graphics も含まれます。

Intel HD Graphics 4000 (Ivy Bridge) Windows 8.1 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.4226
GL_RENDERER: Intel(R) HD Graphics 4000
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.4226

Intel HD Graphics (BayTrail-T Atom Z3740) Windows 10 x86

GL_VERSION: OpenGL ES 3.1 - Build 10.18.10.3993
GL_RENDERER: Intel(R) HD Graphics
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.1 - Build 10.18.10.3993

Intel HD Graphics 4600 (Haswell) Windows 10 x64

GL_VERSION: OpenGL ES 3.1 - Build 10.18.15.4235
GL_RENDERER: Intel(R) HD Graphics 4600
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10 - Build 10.18.15.4235

GeForce のように GL_ANDROID_extension_pack_es31a (AEP) はありませんが、
Tessellator/GeometryShader など一部の機能は独自に対応が行われているようです。
OpenGL ES 3.1 context には下記の extension が含まれていることがわかります。

GL_INTEL_tessellation
GL_INTEL_geometry_shader

Intel Developer Zone : Tessellation for OpenGL ES 3.1 on Android

GeForce は OpenGL ES 3.1 context で AEP をサポートしています。
ただし GPU によっては、AEP で必要な一部機能 (ASTC Texture) がソフトウエアで
エミュレーションされているようです。
NVIDIA は Mobile 向けに GLES Emulator Library をリリースしていないので
それを兼ねているのかもしれません。

RADEON は OpenGL 4.x そのままなので特に機能制限ありません。
よっていずれも GLES API ながら OpenGL 4.x 相当の機能が使えることになります。

GPU ごとの詳細は下記に載せています。
それぞれ可能な範囲で OpenGL ES 3.1 context の結果も含めました。

Desktop GPU Extensions

関連エントリ
Android 5.x OpenGL ES 3.1 と対応 GPU
Galaxy S6 Mali-T760 は AEP 非搭載ながら ASTC HDR 対応
GeForce の OpenGL 4.5 ES3_1_Compatibility は AEP 対応
Android Nexus 6 Adreno 420 も OpenGL ES 3.1 AEP 対応 (Direct3D 11相当)
Android 5.0 Nexus 10 Mali-T604 は OpenGL ES 3.1 対応
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
iPad Air 2 (Apple A8X) の GPU
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応
OpenGL ES 3.1 は OpenGL 4.x 相当で ComputeShader に対応

Android 5.x OpenGL ES 3.1 と対応 GPU

Android 5.0 から OpenGL ES 3.1 に対応しています。
GPU の対応状況を調べてみました。
今のところ判明している(直接調べた) GPU は下記の通りです。

GPU              OpenGL API           SoC
----------------------------------------------------
Tegra K1         OpenGL ES 3.1 AEP
Adreno 420       OpenGL ES 3.1 AEP    Snapdragon 805
Adreno 430       OpenGL ES 3.1 AEP    Snapdragon 810         
Mali-T604        OpenGL ES 3.1        Exynos 5
Mali-T760        OpenGL ES 3.1        Exynos 7
PowerVR G6200    OpenGL ES 3.1        MT8135
PowerVR G6430    OpenGL ES 3.1        Atom Z3580

OpenGL ES 3.0 がサポートされたのは Android 4.3 からです。
上記の結果を見ると、OpenGL ES 3.0 対応 GPU の大半がそのまま
OpenGL ES 3.1 にも対応できていることがわかります。

上記の表にはありませんが、Z37 系の Intel HD Graphcs (Gen7) も
Windows の最新ドライバで OpenGL ES 3.1 に対応しました。(詳細はこちら)

よって今のところ例外は Adreno 300 系だけとなっています。
Adreno 300 (305/306/320/330等) は OpenGL ES 3.0 専用と考えて良さそうです。

もう一つの特殊な例外は iOS です。
サポートしている OpenGL API は ES 3.0 までですが、
Low Level API の Metal を使うことで OpenGL ES 3.1 相当の機能を用いることができます。

GPU              API                     SoC
--------------------------------------------------
PowerVR G6430    OpenGL ES 3.0 / Metal   A7
PowerVR GX6450   OpenGL ES 3.0 / Metal   A8
PowerVR GX6850   OpenGL ES 3.0 / Metal   A8X

OpenGL ES 3.1 対応状況については下記にまとめています。

OpenGL ES 3.1 対応端末

GPU ごとの詳細はこちら

CPU/GPU OpenGL ES Extension (Mobile GPU)

関連エントリ
Galaxy S6 Mali-T760 は AEP 非搭載ながら ASTC HDR 対応
Android Nexus 6 Adreno 420 も OpenGL ES 3.1 AEP 対応 (Direct3D 11相当)
Android 5.0 Nexus 10 Mali-T604 は OpenGL ES 3.1 対応
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
iPad Air 2 (Apple A8X) の GPU
NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応

Galaxy S6 Mali-T760 は AEP 非搭載ながら ASTC HDR 対応

Exynos 7 Octa の Mali-T760 は OpenGL ES 3.1 に対応していることを確認しました。
残念ながら AEP (Android Extension Pack) が無いので D3D11 (FeatureLevel11)
相当の Tessellator 等は動きません。
その代わり ASTC 形式の圧縮テクスチャで HDR をサポートしている GPU は
今のところこれだけです。

Samsung Galaxy S6 Edge Exynos 7420 Android 5.0

GL_RENDERER: Mali-T760
GL_VERSION:  OpenGL ES 3.1

GL_EXT_debug_marker
GL_ARM_rgba8
GL_ARM_mali_shader
GL_OES_depth24
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_EXT_read_format_bgra
GL_OES_compressed_paletted_texture
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_standard_derivatives
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_texture_npot
GL_OES_vertex_half_float
GL_OES_required_internalformat
GL_OES_vertex_array_object
GL_OES_mapbuffer
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_rg
GL_EXT_texture_type_2_10_10_10_REV
GL_OES_fbo_render_mipmap
GL_OES_element_index_uint
GL_EXT_shadow_samplers
GL_OES_texture_compression_astc
GL_OES_texture_compression_astc_ldr
GL_OES_texture_compression_astc_hdr
GL_KHR_debug
GL_EXT_occlusion_query_boolean
GL_EXT_disjoint_timer_query
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_OES_get_program_binary
GL_OES_texture_3D
GL_EXT_texture_storage
GL_EXT_multisampled_render_to_texture
GL_OES_surfaceless_context
GL_OES_texture_stencil8
GL_EXT_shader_pixel_local_storage
GL_ARM_shader_framebuffer_fetch
GL_ARM_shader_framebuffer_fetch_depth_stencil
GL_EXT_sRGB
GL_EXT_sRGB_write_control
GL_EXT_texture_sRGB_decode
GL_KHR_blend_equation_advanced
GL_OES_texture_storage_multisample_2d_array
GL_OES_shader_image_atomic

今のところ判明している ASTC対応 GPU

                    ASTC LDR   ASTC HDR   AEP    OS
------------------------------------------------------------
S805/810 Adreno 400    Y          N        Y     Android 5.0
Tegra K1               Y          N        Y     Android 5.0
Exynos 7 Mali-T760     Y          Y        N     Android 5.0
A8X PowerVR GX6850     Y          N        N     iOS 8

ASTC 対応 GPU はまだ多くないものの、OpenGL (ES) だけでなく
D3D12/11.3 (FeatureLevel 12以上) や Metal でも使用することができます。
プラットフォームや API を超えて共有できるフォーマットになりつつあります。

下記ページを更新しました
CPU/GPU OpenGL ES Extension (Mobile GPU)

Desktop GPU でも GeForce (GTX650/GTX750Ti Kepler/Maxwell 等) は
GL_ARB_ES3_1_compatibility にて GL_ANDROID_extension_pack_es31a (AEP)
に対応しています。
GL_KHR_texture_compression_astc_ldr は無いものの、
glGetIntergerv( GL_COMPRESSED_TEXTURE_FORMATS ) では列挙されるので
ASTC Texture を読み込むことができます。
ただしエミュレーションらしくロード時に非圧縮フォーマットに展開されているようです。

関連エントリ
Direct3D 12 と ASTC 圧縮 Texture
iPad Air 2 (Apple A8X) の GPU
OpenGL ES 3.0 / OpenGL 4.3 ASTC 圧縮テクスチャの比較
OpenGL 4.3/GLES 3.0 次の圧縮テクスチャ ASTC
Direct3D11/OpenGL 圧縮テクスチャ BPTC, BC6H/BC7 の詳細構造 (2)