A7 の GPU は「Apple A7 GPU」と表示されており独自の名前が付けられています。
GL_VERSION: OpenGL ES 3.0 Apple A7 GPU - 27.10 GL_RENDERER: Apple A7 GPU GL_VENDOR: Apple Inc. GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.00
PVRTC に対応しているため PowerVR 系である可能性は高くなっています。
ですが PVRTC(v2) が無く汎用性の高い ETC2/EAC に置き換わっていることもあり、
PowerVR 依存からの方針転換が見て取れるように思います。
・OpenGL ES Extension (Mobile GPU)
Mali-T604, Adreno 320 との比較です。(参考)
Nexus 7 (2013) Nexus 10 iPhone 5s Adreno 320 Mali-T604 A7 GPU ------------------------------------------------------------------------- === GL3:texture GL_MAX_3D_TEXTURE_SIZE 1024 4096 2048 GL_MAX_TEXTURE_SIZE 4096 4096 4096 GL_MAX_ARRAY_TEXTURE_LAYERS 256 4096 2048 GL_MAX_TEXTURE_LOD_BIAS 15.984 255.996 16.000 GL_MAX_CUBE_MAP_TEXTURE_SIZE 4096 4096 4096 GL_MAX_RENDERBUFFER_SIZE 4096 4096 4096 GL_MAX_DRAW_BUFFERS 4 4 4 GL_MAX_COLOR_ATTACHMENTS 4 4 4 GL_MAX_VIEWPORT_DIMS 4096 4096 4096 === GL3:elements GL_MAX_ELEMENTS_INDICES -1 16777216 150000 GL_MAX_ELEMENTS_VERTICES -1 16777216 1048575 === GL3:vertex GL_MAX_VERTEX_ATTRIBS 16 16 16 GL_MAX_VERTEX_OUTPUT_COMPONENTS 69 64 64 === GL3:pixel GL_MAX_FRAGMENT_INPUT_COMPONENTS 71 60 64 === GL3:program GL_MIN_PROGRAM_TEXEL_OFFSET -8 -8 -8 GL_MAX_PROGRAM_TEXEL_OFFSET 7 7 7 GL_MAX_VARYING_COMPONENTS 64 60 60 GL_MAX_VARYING_VECTORS 16 15 15 === GL3:output stream GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 64 64 64 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 4 4 4 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 4 4 4 GL_MAX_SAMPLES 4 4 8 === GL3:uniform block GL_MAX_VERTEX_UNIFORM_COMPONENTS 1024 1024 2048 GL_MAX_VERTEX_UNIFORM_VECTORS 256 256 512 GL_MAX_VERTEX_UNIFORM_BLOCKS 12 12 12 GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS -- 50176 51200 GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 896 4096 896 GL_MAX_FRAGMENT_UNIFORM_VECTORS 224 1024 224 GL_MAX_FRAGMENT_UNIFORM_BLOCKS 12 12 12 GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 197504 53248 50048 GL_MAX_UNIFORM_BUFFER_BINDINGS 24 36 24 GL_MAX_UNIFORM_BLOCK_SIZE 65536 16384 16384 GL_MAX_COMBINED_UNIFORM_BLOCKS 24 24 24 === GL3:tex GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 16 16 16 GL_MAX_TEXTURE_IMAGE_UNITS 16 16 16 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 32 32 32
これまでと違う GPU であることがわかります。
Uniform Block 数は横並びの 12 です。
Fragment の Uniform 数は Adreno 同様 OpenGL ES 3.0 の最小値の 896 (224)
で Vertex の方が多くなっています。
PowerVR 5 は他の GPU と比べても Uniform 数が少なく、一度に転送できる
データ量に制限がありました。
OpenGL ES 3.0 の A7 ではこの辺が解消されむしろ余裕があります。
ただし OpenGL ES 2.0 Context では互換性のためか、
従来の PowerVR SGX 5 系と同じ値を返してくるようです。
GL_VERSION: OpenGL ES 2.0 Apple A7 GPU - 27.10 GL_RENDERER: Apple A7 GPU GL_VENDOR: Apple Inc. GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00 Precision: 0: [15 15] 10 1: [15 15] 10 2: [127 127] 23 3: [15 14] 0 4: [15 14] 0 5: [31 30] 0 6: [15 15] 10 7: [15 15] 10 8: [127 127] 23 9: [15 14] 0 10: [15 14] 0 11: [31 30] 0 === GL2:texture GL_MAX_TEXTURE_SIZE 4096 GL_MAX_CUBE_MAP_TEXTURE_SIZE 4096 GL_MAX_VIEWPORT_DIMS 4096 === GL2:vertex GL_MAX_VERTEX_ATTRIBS 16 GL_MAX_VERTEX_UNIFORM_VECTORS 128 GL_MAX_VARYING_VECTORS 8 === GL2:pixel GL_MAX_FRAGMENT_UNIFORM_VECTORS 64 GL_MAX_RENDERBUFFER_SIZE 4096 === GL2:tex GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 8 GL_MAX_TEXTURE_IMAGE_UNITS 8 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 8 TextureFormat 4 00=8c00 GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 01=8c01 GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 02=8c02 GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 03=8c03 GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
Android 4.3 + OpenGL ES 3.0 の場合は、事実上 2.0 と 3.0 で Context の
違いが無かったので、この点も iOS らしい仕様となっています。
例えば Android 4.2 の Mali-T604 は Fragment Uniform 数 256 (vec4)
でしたが、4.3 では OpenGL ES 2.0 でも 3.0 と同じ 1024 (vec4) を返します。
OpenGL ES 2.0 Context では Vertex Texture Unit が有効になっている点が
気になりました。
A7 だけかと思ったら PowerVR SGX 5XT でも同様の値になっていたので、
iOS 7 で追加されたのかもしれません。
上記にも書かれていますが glGetShaderPrecisionFormat() の結果に違いが見られます。
float lowp が mediump と同じ fp16 で、int highp も 32bit になっています。
下記ページも更新しました。
ただし上のページにも書いているように API で得られる仕様と
実際の演算結果は異なっていることがあります。
同じ fix10 でも、PowerVR series 5 (SGX535/540) & Tegra2/3 と
series 5XT (SGX543MP/554MP) ではシェーディング結果に差が生じています。
5XT の方が Fragment だけ lowp の精度が高くなっているように見えます。
A7 GPU の場合は最初から fp16 なので、
互換性の意味でも都合の良い仕様だと思います。
関連エントリ
・iOS7 と iPhone 5s の sRGB 対応とテクスチャフォーマット
・Nexus 7 (2013) の Adreno 320 と OpenGL ES 3.0 (Android 4.3)
・OpenGL ES 2.0 GLSL precision 宣言と GPU 毎の演算精度を調べる
・GPU Precision まとめ