Metalのデータ型

提供: MonoBook
2022年6月8日 (水) 10:41時点におけるAdministrator (トーク | 投稿記録)による版 (→‎ベクトル型)
ナビゲーションに移動 検索に移動

スカラー型

概要
bool true or false
char

int8_t

符号付き8ビット整数
unsigned char

uchar

uint8_t

符号なし8ビット整数
short

int16_t

符号付き16ビット整数
unsigned short

ushort

uint16_t

符号なし16ビット整数
int

int32_t

符号付き32ビット整数
unsigned int

uint

uint32_t

符号なし32ビット整数
long

int64_t

符号付き64ビット整数

Metal 2.2以降

unsigned long

uint64_t

符号なし64ビット制す

Metal 2.2以降

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の乗数

ベクトル型は「型のサイズは必ず2の乗数」であるという点に注意する必要がある。 たとえば intは4バイト、int2は8バイトだが、int3は12バイトではなく16バイトとなっている。ちなみにint4もint3と同じく16バイトである。

HLSLGLSL定数バッファーなどの構造体を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、シェーダープログラミングの際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。

一方、Metalでは「必ず2の乗数」になるのでそのような手計算が必要ない。