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

1行目: 1行目:
== スカラー型==  
==スカラー型==  
{| class="wikitable"
{| class="wikitable"
|+
|+
! 型
!型
! 概要
!概要
|-
|-
|bool
|bool
9行目: 9行目:
|-
|-
|char
|char
int8_t
| rowspan="2" |符号付き8ビット整数
|符号付き8ビット整数
|-
|int8_t
|-
|-
|unsigned char
|unsigned char
uchar
| rowspan="3" |符号なし8ビット整数
 
|-
uint8_t
|uchar
|符号なし8ビット整数
|-
|uint8_t
|-
|-
|short
|short
int16_t
| rowspan="2" |符号付き16ビット整数
|符号付き16ビット整数
|-
|int16_t
|-
|-
|unsigned short
|unsigned short
ushort
| rowspan="3" |符号なし16ビット整数
 
|-
uint16_t
|ushort
|符号なし16ビット整数
|-
|uint16_t
|-
|-
|int
|int
int32_t
| rowspan="2" |符号付き32ビット整数
|符号付き32ビット整数
|-
|int32_t
|-
|-
|unsigned int
|unsigned int
uint
| rowspan="3" |符号なし32ビット整数
 
|-
uint32_t
|uint
|符号なし32ビット整数
|-
|uint32_t
|-
|-
|long
|long
int64_t
| rowspan="2" |符号付き64ビット整数
|符号付き64ビット整数
Metal 2.2以降
Metal 2.2以降
|-
|int64_t
|-
|-
|unsigned long
|unsigned long
uint64_t
| rowspan="2" |符号なし64ビット制す
|符号なし64ビット制す
Metal 2.2以降
Metal 2.2以降
|-
|uint64_t
|-
|-
|half
|half
57行目: 65行目:
|-
|-
|size_t
|size_t
|sizeof 演算子の結果を表す符号なし整数型。実態は符号なし64ビット整数。
|sizeof 演算子の結果を表す符号なし整数型。
実態は符号なし64ビット整数。
|-
|-
|ptrdiff_t
|ptrdiff_t
|2つのポインタを引き算した結果の符号付き整数型。実態は符号付き64ビット整数。
|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]]などと同じだな。
* bool'''n'''
* char'''n'''
* short'''n'''
* int'''n'''
* long'''n'''
* uchar'''n'''
* ushort'''n'''
* uint'''n'''
* ulong'''n'''
* half'''n'''
* float'''n'''


=== ベクトル型のサイズは必ず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バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。