「Metalのデータ型」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
111行目: 111行目:
 
*int4 = 16バイト
 
*int4 = 16バイト
  
[[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。
+
[[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを[[GPU]]が扱いやすいよう「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。
  
 
一方、[[Metal]]では「必ず2の乗数」になるのでそのような手計算が必要ない。
 
一方、[[Metal]]では「必ず2の乗数」になるのでそのような手計算が必要ない。
 
[[HLSL]]や[[GLSL]]の感覚でサイズ調整すると無駄が発生するので注意すること。
 
[[HLSL]]や[[GLSL]]の感覚でサイズ調整すると無駄が発生するので注意すること。

2022年6月9日 (木) 01:49時点における版

スカラー型

概要
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バイト

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

一方、Metalでは「必ず2の乗数」になるのでそのような手計算が必要ない。 HLSLGLSLの感覚でサイズ調整すると無駄が発生するので注意すること。