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 | ||||||||
Adreno 320 APQ8064 | 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.1365319022.txt.gz · 最終更新: 2013/04/07 16:17 by oga