「Metalのデータ型」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) (→スカラー型) |
||
1行目: | 1行目: | ||
− | == スカラー型== | + | ==スカラー型== |
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
− | ! 型 | + | !型 |
− | ! 概要 | + | !概要 |
|- | |- | ||
|bool | |bool | ||
9行目: | 9行目: | ||
|- | |- | ||
|char | |char | ||
− | + | | rowspan="2" |符号付き8ビット整数 | |
− | | | + | |- |
+ | |int8_t | ||
|- | |- | ||
|unsigned char | |unsigned char | ||
− | uchar | + | | rowspan="3" |符号なし8ビット整数 |
− | + | |- | |
− | uint8_t | + | |uchar |
− | + | |- | |
+ | |uint8_t | ||
|- | |- | ||
|short | |short | ||
− | + | | rowspan="2" |符号付き16ビット整数 | |
− | | | + | |- |
+ | |int16_t | ||
|- | |- | ||
|unsigned short | |unsigned short | ||
− | ushort | + | | rowspan="3" |符号なし16ビット整数 |
− | + | |- | |
− | uint16_t | + | |ushort |
− | + | |- | |
+ | |uint16_t | ||
|- | |- | ||
|int | |int | ||
− | + | | rowspan="2" |符号付き32ビット整数 | |
− | | | + | |- |
+ | |int32_t | ||
|- | |- | ||
|unsigned int | |unsigned int | ||
− | uint | + | | rowspan="3" |符号なし32ビット整数 |
− | + | |- | |
− | uint32_t | + | |uint |
− | + | |- | |
+ | |uint32_t | ||
|- | |- | ||
|long | |long | ||
− | + | | rowspan="2" |符号付き64ビット整数 | |
− | |符号付き64ビット整数 | ||
Metal 2.2以降 | Metal 2.2以降 | ||
+ | |- | ||
+ | |int64_t | ||
|- | |- | ||
|unsigned long | |unsigned long | ||
− | + | | rowspan="2" |符号なし64ビット制す | |
− | |符号なし64ビット制す | ||
Metal 2.2以降 | Metal 2.2以降 | ||
+ | |- | ||
+ | |uint64_t | ||
|- | |- | ||
|half | |half | ||
57行目: | 65行目: | ||
|- | |- | ||
|size_t | |size_t | ||
− | |sizeof | + | |sizeof 演算子の結果を表す符号なし整数型。 |
+ | 実態は符号なし64ビット整数。 | ||
|- | |- | ||
|ptrdiff_t | |ptrdiff_t | ||
− | | | + | |2つのポインタを引き算した結果の符号付き整数型。 |
+ | 実態は符号付き64ビット整数。 | ||
|- | |- | ||
|void | |void | ||
66行目: | 76行目: | ||
|} | |} | ||
− | === サフィックス === | + | ===サフィックス === |
− | * f または F = float, 0.5f | + | |
− | * h または H = half, 0.5h | + | *f または F = float, 0.5f |
− | * u または U = uint, 2u | + | *h または H = half, 0.5h |
− | * l または L = long, 2L | + | *u または U = uint, 2u |
+ | *l または L = long, 2L | ||
− | == ベクトル型 == | + | ==ベクトル型== |
スカラー型名の末尾に数字(ここでは'''n'''とする)を付けるとベクトル型になる。 | スカラー型名の末尾に数字(ここでは'''n'''とする)を付けるとベクトル型になる。 | ||
'''n''' には 2, 3, 4のいづれかの数字が入る。 | '''n''' には 2, 3, 4のいづれかの数字が入る。 | ||
「float2」や「float3」といった感じだ。 | 「float2」や「float3」といった感じだ。 | ||
[[HLSL]]などと同じだな。 | [[HLSL]]などと同じだな。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === ベクトル型のサイズは必ず2の乗数=== | + | *bool'''n''' |
+ | *char'''n''' | ||
+ | *short'''n''' | ||
+ | *int'''n''' | ||
+ | *long'''n''' | ||
+ | *uchar'''n''' | ||
+ | *ushort'''n''' | ||
+ | *uint'''n''' | ||
+ | *ulong'''n''' | ||
+ | *half'''n''' | ||
+ | *float'''n''' | ||
+ | |||
+ | ===ベクトル型のサイズは必ず2の乗数=== | ||
Metalのベクトル型は「型のサイズは必ず2の乗数」となっている。 | Metalのベクトル型は「型のサイズは必ず2の乗数」となっている。 | ||
たとえば、 | たとえば、 | ||
− | * int = 4バイト | + | |
− | * int2 = 8バイト | + | *int = 4バイト |
− | * int3 = '''16バイト''' (12バイトではない) | + | *int2 = 8バイト |
− | * int4 = 16バイト | + | *int3 = '''16バイト''' (12バイトではない) |
+ | *int4 = 16バイト | ||
[[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。 | [[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。 |
2022年6月9日 (木) 01:47時点における版
スカラー型
型 | 概要 |
---|---|
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で定数バッファーなどの構造体を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、シェーダーのプログラミングの際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。
一方、Metalでは「必ず2の乗数」になるのでそのような手計算が必要ない。 HLSLやGLSLの感覚でサイズ調整すると無駄が発生するので注意すること。