ユーザ用ツール

サイト用ツール


opengl:gpuspecs

文書の過去の版を表示しています。


Mobile GPU の比較

GPU 圧縮Tex FB MRT depth Tile Shader Uniform In/Out TexUnit Vertex Precision Fragment Precision Texture Vertex anisotropic
size Unit bin VSH FSH VSH FSH VSH FSH max cube 3D 32F 16F 1010102 depth 16F 1010102 AO
PowerVR SGX 535 PVRTC 2048 24bit TBDR unified 128 64 16 8 0 8 high, medium, low high, medium, low 2048 2048 - - A -
PowerVR SGX 543MP2 PVRTC 4096 24bit TBDR unified 128 64 16 8 0 8 high, medium, low high, medium, low 4096 4096 - - A -
PowerVR SGX 540 PVRTC/ETC1 2048 24bit TBDR unified 128 64 8 8 0 8 high, medium, low high, medium, low 2048 2048 - - A - -
Z430 ATITC/3DC/ETC1 1024 24bit TBR unified z400 251 222 16 8 4 16 high high 2048 1024 -
Adreno 200 ATITC/3DC/ETC1 2048 24bit TBR unified z400 251 222 16 8 4 16 high high 2048 2048 -
Adreno 205 ATITC/3DC/ETC1 4096 24bit TBR unified z400 251 222 16 8 4 16 high high 4096 4096 -
Adreno 220 ATITC/3DC/ETC1 4096 24bit TBR unified z400 251 222 16 8 4 16 high high 4096 4096 -
Adreno 320 (GLES2) ATITC/3DC/ETC1/ETC2 4096 24bit TBR/IMR unified z400 251 221 16 8 4 16 high high 4096 4096
Tegra250 ULP GeFroce(8) S3TC/LATC/ETC1 3839 16bit IMR discrete 256 1024 16 15 0 16 high (medium,low) medium, low 2048 2048 - - - - -
Tegra3 ULP GeFroce(12) S3TC/LATC/ETC1 3839 16bit IMR discrete 256 1024 16 15 0 16 high (medium,low) medium, low 2048 2048 - - - - -
ZMS-08HD S3TC/ETC1 2048 32bit unified 128 16 8 8 8 8 2048 512 - - - - - - - - -
Mali-400MP4 ETC1 4096 24bit TBR discrete mali 128 1024 16 12 0 8 high (medium) medium 4096 1024 - - - - - - - -
Mali-T604 (GLES2) ETC1 4096 24bit TBR unified mali 256 256 16 12 16 16 high, medium high, medium 4096 4096 - - - - -
GC860 S3TC/ETC1 2048 24bit unified 160 64 10 8 0 8 high high 8192 8192 - - - - - - -
Angle Project (D3D9) S3TC 8192 24bit unified 254 221 16 10 4 16 high high 8192 8192 - - - - -
OpenGL ES 2.0 minimum ETC1 1 128 16 8 8 0 8 high medium
OpenGL ES 3.0 minimum ETC2/EAC 4 24bit 256 224 16 15 16 16
DirectX8 Shader 1.1 S3TC/DXT 96 8 16 6 0 4 high low - - -
DirectX9 Shader 2.0 S3TC/DXT 256 32 16 10 0 16 high high
DirectX9 Shader 3.0 S3TC/DXT 256 224 16 10 4 16 high high
DirectX10 Shader 4.0 S3TC/DXT/BC 64K 64K 16 16 128 128 high high
DirectX10 Shader 4.1 S3TC/DXT/BC 64K 64K 32 32 128 128 high high
DirectX11 Shader 5.0 S3TC/DXT/BC 64K 64K high high
  • 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 SGX535 S5PC100 unified fp32 (s23e8) fp16 (s10e5) fix10 fp32 (s23e8) fp16 (s10e5) fix10 23bit 23bit
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
GC860 JZ4770 unified fp32 (s23e8) fp32 (s23e8) 24bit 24bit
Mali-400MP4 Exynos4210 discrete fp32 (s23e8) fp16 (s10e5) 24bit 11bit
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.1365318840.txt.gz · 最終更新: 2013/04/07 16:14 by oga