ユーザ用ツール

サイト用ツール


opengl:gpuspecs

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
  • Uniform:VSH/FSH = vec4 単位の個数。DirectX でいえば Constant Register のこと。
  • In/Out:VSH = 入力頂点アトリビュート数、vec4 単位の個数。DirectX で言えば Input Assembler
  • In/Out:FSH = 頂点出力&ピクセル入力レジスタ数、vec4 単位の個数。ラスタライズレジスタの数。
  • TexUnit:VSH = 頂点テクスチャ枚数
  • TexUnit:FSH = 通常のテクスチャユニット数 (ピクセルシェーダー)
  • Shader:bin = シェーダーバイナリフォーマット
  • Vertex:AO = Array Object
  • MRT = Multi Render Target

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
  • FLOAT: 浮動小数点型では仮数部の精度は厳密には +1bit
  • lowp は OpenGL ES 2.0 の仕様上 -2.0~2.0 の範囲をカバーする。GL ES の仕様上符号を含めて最低 10bit 。
  • lowp の glGetShaderPrecisionFormat の Range は -1~1 (log2) となるはずだが iOS の PowerVR SGX だけ range が 0 になっている。
  • この結果では VertexShader において、precision が有効なのは PowerVR のみのように見える (実際に走らせた場合はこの結果と異なるので注意)
  • Unified Shader の場合、Fragment Shader の機能は Vertex と同一。Discrete の場合、Fragment Shader では highp 未対応。
  • テクスチャサイズが 4096 など大きい場合、GPU によっては texcoord が mediump では解像度が足り無い計算となるが実際は不明。
  • Tegra の INT 型は、他の GPU と大きく異なる結果を返すため判断できない。
  • Adreno の結果だけ見ると exp 7bit なので precision が全部の精度を表しているなら fp24 (s16e7) のようにも受け取れる。(実測で fp32 確認)
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)
  • Adreno は 1.0e-37~1.0e37 まで有効なことを確認したので普通の fp32 (s23e8) でした。
  • Tegra の Fragment mediump は 20bit ではなく 16bit (fp16 s10e5) でした。
  • PowerVR SGX535/540/543 の Vertex lowp は -2.0~2.0 の fixed であることを確認しました。
  • Tegra の VertexShader は mediump, lowp 宣言が有効であることを確認。glGetShaderPrecisionFormat() の結果と大きく異なっています。
    • Vertex mediump : range は 16384
    • Vertex lowp : range は -2~2048 (plus 方向だけ広い)
  • Mali-400 の VertexShader は fp32 固定ですが、mediump 宣言で結果がわずかに変わります。
    • 数値演算自体は mediump/lowp でも 1.0e-37~1.0e37 の highp であることを確認しました。highp = fp32 (s23e8)
    • もしかしたら attribute や uniform だけ fp16 対応なのかもしれません。
    • lowp は存在しておらず mediump と同じでした。
  • PowerVR SGX543 は同じ PowerVR でも Fragment Shader の結果が 540/535 と異なっています。
    • Vertex Shader は同一
    • Fragment Shader の lowp 宣言でも mediump 相当の演算範囲でした。
  • 同じ fp16 (s10e5) でも GPU によって指数範囲が異なります。
    • fp32 は完全にいっしょです。
opengl/gpuspecs.txt · 最終更新: 2015/02/15 15:28 by oga