目次

Mobile GPU の比較

GPU 圧縮Tex FB MRT depth Tile Shader Uniform(vec4) In/Out TexUnit Vertex Fragment Texture Vertex anisotropic
size Unit bin VSH FSH VSH FSH VSH FSH Precision Precision max cube 3D 32F 16F 1010102 depth 16F 1010102 AO
PowerVR SGX 535 PVRTC 2048 24bit TBDR unified 128 64 16 8 0 8 hi, m, low hi, m, low 2048 2048 - Y Y - Y A - Y Y
PowerVR SGX 543MP2 PVRTC 4096 24bit TBDR unified 128 64 16 8 0 8 hi, m, low hi, m, low 4096 4096 - Y Y - Y A - Y Y
PowerVR SGX 540 PVRTC/ETC1 2048 24bit TBDR unified Y 128 64 8 8 0 8 hi, m, low hi, m, low 2048 2048 - Y Y - Y A - Y -
PowerVR G6430 (GLES3) PVRTC/ETC2 4096 4 24bit TBDR unified Y 512×12 224×12 16 15 16 16 hi, m, low hi, m, low 4096 4096 Y Y Y Y Y A Y Y Y
Z430 ATITC/3DC/ETC1 1024 24bit TBR unified z400 251 222 16 8 4 16 hi hi 2048 1024 Y Y Y Y Y Y Y - Y
Adreno 200 ATITC/3DC/ETC1 2048 24bit TBR unified z400 251 222 16 8 4 16 hi hi 2048 2048 Y Y Y Y Y Y Y - Y
Adreno 205 ATITC/3DC/ETC1 4096 24bit TBR unified z400 251 222 16 8 4 16 hi hi 4096 4096 Y Y Y Y Y Y Y - Y
Adreno 220 ATITC/3DC/ETC1 4096 24bit TBR unified z400 251 222 16 8 4 16 hi hi 4096 4096 Y Y Y Y Y Y Y - Y
Adreno 320 (GLES2) ATITC/3DC/ETC2 4096 24bit TBR/IMR unified z400 251 221 16 8 4 16 hi hi 4096 4096 Y Y Y Y Y Y Y Y Y
Adreno 320 (GLES3) ATITC/3DC/ETC2 4096 4 24bit TBR/IMR unified z400 256×12 224×12 16 16 16 16 hi hi 4096 4096 Y Y Y Y Y Y Y Y Y
Tegra250 ULP GeFroce(8) S3TC/LATC/ETC1 3839 16bit IMR discrete Y 256 1024 16 15 0 16 hi (m,low) m, low 2048 2048 - Y Y - - Y - - Y
Tegra 3 ULP GeFroce(12) S3TC/LATC/ETC1 3839 16bit IMR discrete Y 256 1024 16 15 0 16 hi (m,low) m, low 2048 2048 - Y Y - - Y - - Y
Tegra 4 ULP GeForce(72) S3TC/LATC/ETC1 4096 24bit IMR discrete 280 1024 16 15 0 16 hi m, low 4096 4096 - - Y - Y Y - Y Y
ZMS-08HD S3TC/ETC1 2048 32bit unified Y 128 16 8 8 8 8 2048 512 - - - - - - - - -
Mali-400MP4 ETC1 4096 24bit TBR discrete mali 128 1024 16 12 0 8 hi (m) m 4096 1024 - - - - Y - - - -
Mali-T604 (GLES2) ETC1 4096 24bit TBR unified mali 256 256 16 12 16 16 hi, m hi, m 4096 4096 Y - - Y Y - - Y -
Mali-T604 (GLES3) ETC1/ETC2/EAC 4096 4 24bit TBR unified mali 256 1024 16 15 16 16 hi, m hi, m 4096 4096 Y Y Y Y Y Y Y Y -
Vivante GC860 (GLES2) S3TC/ETC1 2048 24bit unified Y 160 64 10 8 0 8 hi hi 8192 8192 - - Y - Y - - - -
Immersion.16 (Vivante GC4000) S3TC/ETC1 8192 24bit unified viv 568 568 16 12 16 16 hi hi 8192 8192 - Y Y Y Y Y Y - Y
VideoCore IV ETC1 2048 24bit TBR unified 136 136 8 8 8 8 hi hi 2048 2048 - - - - - Y - - -
Angle Project (D3D9) S3TC 8192 24bit unified 254 221 16 10 4 16 hi hi 8192 8192 Y Y - Y - - - -
OpenGL ES 2.0 minimum ETC1 1 128 16 8 8 0 8 hi m
OpenGL ES 3.0 minimum ETC2/EAC 2048 4 24bit 256 224 16 15 16 16 hi 2048 2048 Y Y Y Y Y Y Y Y
OpenGL ES 3.1 minimum ETC2/EAC 4 256 224 16 15 16 16 hi
DirectX8 Shader 1.1 S3TC/DXT Y 96 8 16 6 0 4 hi low Y - - - Y
DirectX9 Shader 2.0 S3TC/DXT Y 256 32 16 10 0 16 hi hi Y Y
DirectX9 Shader 3.0 S3TC/DXT Y 256 224 16 10 4 16 hi hi Y Y Y Y Y Y
DirectX10 Shader 4.0 S3TC/DXT/BC Y 64K 64K 16 16 128 128 hi hi Y Y Y Y Y Y Y Y
DirectX10 Shader 4.1 S3TC/DXT/BC Y 64K 64K 32 32 128 128 hi hi Y Y Y Y Y Y Y Y
DirectX11 Shader 5.0 S3TC/DXT/BC Y 64K 64K hi hi Y Y Y Y Y Y Y Y

Precision

glGetShaderPrecisionFormat による結果

glGetShaderPrecisionFormat() を使って調べた GPU 毎の演算精度の結果のまとめ。

GPU type Vertex FLOAT Fragment FLOAT Vertex INT Fragment INT
highp mediump lowp highp mediump lowp highp mediump lowp highp mediump lowp
PowerVR SGX540 OMAP4460 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 24bit 11bit 8bit 24bit 11bit 8bit
PowerVR SGX540 S5PC110 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 24bit 11bit 8bit 24bit 11bit 8bit
PowerVR SGX543MP2 A5 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 23bit 23bit
PowerVR SGX554MP4 A6X unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 23bit 23bit
PowerVR SGX535 S5PC100 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 23bit 23bit
PowerVR G6430 A7 (GLES2) unified fp32 (s23e8) fp16 (s10e5) fp32 (s23e8) fp16 (s10e5) 32bit 16bit 32bit 16bit
Adreno 200 QSD8250 unified fp32 (s24e7) fp32 (s24e7) 16bit 16bit
Adreno 205 MSM8255 unified fp32 (s24e7) fp32 (s24e7) 16bit 16bit
Adreno 220 MSM8660 unified fp32 (s24e7) fp32 (s24e7) 16bit 16bit
Adreno 320 APQ8064 (GLES2) unified fp32 (s24e7) fp32 (s24e7) 16bit 16bit
GC860 JZ4770 unified fp32 (s23e8) fp32 (s23e8) 24bit 24bit
Mali-400MP4 Exynos4210 discrete fp32 (s23e8) fp16 (s10e5) 24bit 11bit
Mali-T604 (GLES2) unified fp32 (s23e8) fp16 (s10e5) fp32 (s23e8) fp16 (s10e5) 32bit 16bit 32bit 16bit
ULP GeForce(8) Tegra2 discrete fp32 (s23e8) fp20? (s13e6?) fix10 ? ?
ULP GeForce(12) Tegra3 discrete fp32 (s23e8) fp20? (s13e6?) fix10 ? ?
Angle Project (D3D9) fp32 (s23e8) fp32 (s23e8) 24bit 24bit
s23e8 :
   s  = 1bit sign
   23 = 23bit fraction (+1 = 24bit)
   e8 = 8bit exponent

実際に走らせた場合の演算精度

実際に走らせてみると glGetShaderPrecisionFormat() の結果とはいろいろ異なっています。整数は未確認。

GPU type Vertex FLOAT Fragment FLOAT
highp mediump lowp highp mediump lowp
PowerVR SGX540 OMAP4460 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10
PowerVR SGX535 S5PC100 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10
PowerVR SGX543MP2 A5 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16? (s10e5)?
ULP GeForce(8) Tegra2 discrete fp32 (s23e8) fp16 (s10e5) fix10? fp16 (s10e5) fix10
Mali-400MP4 Exynos4210 discrete fp32 (s23e8) fp32 or fp16? (s10e5?) fp16 (s10e5)
Adreno 200/205/220 系 unified fp32 (s23e8) fp32 (s23e8)
GC860 JZ4770 unified fp32 (s23e8) fp32 (s23e8)