Metalのデータ型
スカラー型
| 型 | 概要 |
|---|---|
| bool | true or false |
| char | 符号付き8ビット整数 |
| int8_t | |
| unsigned char | 符号なし8ビット整数 |
| uchar | |
| uint8_t | |
| short | 符号付き16ビット整数 |
| int16_t | |
| unsigned short | 符号なし16ビット整数 |
| ushort | |
| uint16_t | |
| int | 符号付き32ビット整数 |
| int32_t | |
| unsigned int | 符号なし32ビット整数 |
| uint | |
| uint32_t | |
| long | 符号付き64ビット整数
Metal 2.2以降 |
| int64_t | |
| unsigned long | 符号なし64ビット制す
Metal 2.2以降 |
| uint64_t | |
| half | 16ビット浮動小数点
IEEE 754のbinary16形式 |
| float | 32ビット浮動小数点
IEEE 754に準拠 |
| size_t | sizeof 演算子の結果を表す符号なし整数型。
実態は符号なし64ビット整数。 |
| ptrdiff_t | 2つのポインタを引き算した結果の符号付き整数型。
実態は符号付き64ビット整数。 |
| void | void |
サフィックス
- f または F = float, 0.5f
- h または H = half, 0.5h
- u または U = uint, 2u
- l または L = long, 2L
ベクトル型
スカラー型名の末尾に数字(ここではnとする)を付けるとベクトル型になる。 n には 2, 3, 4のいづれかの数字が入る。 「float2」や「float3」といった感じだ。 HLSLなどと同じだな。
- booln
- charn
- shortn
- intn
- longn
- ucharn
- ushortn
- uintn
- ulongn
- halfn
- floatn
ベクトル型のサイズは必ず2の乗数
Metalのベクトル型は「型のサイズは必ず2の乗数」となっている。
たとえば、
- int = 4バイト
- int2 = 8バイト
- int3 = 16バイト (12バイトではない)
- int4 = 16バイト
HLSLやGLSLで定数バッファーなどの構造体を作る際は、その構造体のサイズをGPUが扱いやすいよう「8バイト単位」や「16バイト単位」にする必要があり、シェーダーのプログラミングの際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。
一方、Metalでは「必ず2の乗数」になるのでそのような手計算が必要ない。 HLSLやGLSLの感覚でサイズ調整すると無駄が発生するので注意すること。