Metal のシェーダー言語の仕様は以下のURLにあります。
https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
必要なところから抜粋して翻訳してみます。
6 Metal Standard Library
この章では Metal Standard Library(MSLib)の関数について説明します。
6.1 Namespace and Header Files
MSLib関数と列挙は、metal名前空間で宣言されています。
MSLib関数で説明されているヘッダーファイル<metal_stdlib>ヘッダーが利用可能で、
MSLibでサポートされているすべての関数にアクセスできます。
6.2 Common Functions
表6.1の関数は、ヘッダー <metal_common> で定義されています。
Tはスカラーまたはベクトル浮動小数点型です。
ビルトイン共通関数 | 説明 |
---|---|
T clamp(T x, T minval, T maxval) | fmin(fmax(x, minval), maxval) を返す。 minval>maxvalの場合、結果は未定義。 |
T mix(T x, T y, T a) | xとyの線形ブレンドの値を返す。 x +(y – x)* a aは0.0から1.0の範囲の値でなければならない。 0.0から1.0の範囲でない場合は戻り値は未定義。 |
T saturate(T x) | 指定された値を0.0から1.0の範囲内にクランプする。 |
T sign(T x) | x> 0の場合は1.0、x = -0.0の場合は-0.0、x = +0.0の場合は+0.0、またはx <0の場合は-1.0を返す。 xがNaNの場合は0.0を返す。 |
T smoothstep(T edge0, T edge1m T x) | x <= edge0の場合は0.0を、x >= edge1の場合は1.0を返す。 edge0 < x <edge1の場合はエルミート補間を実行し、0から1の値を返す。 以下と同等。 t = clamp( (x – edge0) / (edge1 – edge0), 0, 1); return t * t * (3 – 2 * t); edge0> = edge1の場合、またはx、edge0もしくはedge1がNaNの場合は結果は未定義。 |
T step(T edge, T x) | x < edgeの場合は0.0を返し、それ以外の場合は1.0を返す。 |
6.3 Integer Functions
ビルトイン整数関数 | 説明 |
---|---|
T abs(T x) | |x|を返す。 |
Tu absdiff(T x, T y) | 剰余オーバーフローなしで|x-y|を返す。 |
T addsat(T x, T y) | x+yのsaturateした結果を返す。 |
T clamp(T x, T minval, T maxval) | min(max(x, minval), maxval)を返す。 minval > maxvalの場合、結果は未定義。 |
T clz(T x) | 最上位ビット位置から開始して、xの先頭の0ビットの数を返す。 |
T ctz(T x) | xの末尾の0ビットの数を返す。 |
T extract_bits(T x, uint offset, uint bits) | |
T hadd(T x, T y) | (x + y) >> 1を返す。 The intermediate sum does not modulo overflow. |
T insert_bits(T base, T insert, uint offset, uint bits) | |
T32 mad24(T32 x, T32 y, T32 z) | |
T madhi(T a, T b, T c) | mulhi(a, b) + cを返す。 |
T madsat(T a, T b, T c) | a * b + cのsaturateした結果を返す。 |
T max(T x, T y) | x < yの場合はyを返し、それ以外の場合はxを返す。 |
T max3(T x, T y, T z) | max(x, max(y, z))を返す。 |
T median3(T x, T y, T z) | |
T min(T x, T y) | y < xの場合はyを返し、それ以外の場合はxを返す。 |
T min3(T x, T y, T z) | min(x, min(y, z))を返す。 |
T32 mul24(T32 x, T32 y) | |
T mulhi(T x, T y) | x * yを計算し、xとyの積の上位半分を返す。 |
T popcount(T x) | xの非ゼロビットの数を返す。 |
T reverse_bits(T x) | |
T rhadd(T x, T y) | (x + y + 1) >> 1を返す。 The intermediate sum does not modulo overflow. |
T rotate(T v, T i) | |
T subsat(T x, T y) | x – yのsaturateした結果を返す。 |
6.4 Relational Functions
ビルトイン共通関数 | 説明 |
---|---|
bool all(Tb x) | xのすべてのコンポーネントがtrueの場合にのみtrueを返す。 |
bool any(Tb x) | xのいずれかのコンポーネントがtrueの場合にのみtrueを返す。 |
Tb isfinite(T x) | 有限値をテストする。 |
Tb isinf(T x) | 無限値(正または負)をテストする。 |
Tb isnan(T x) | NaNのテスト。 |
Tb isnormal(T x) | |
Tb isordered(T x, T y) | |
Tb isunordered(T x, T y) | |
Tb not(Tb x) | xのコンポーネント単位の論理補数を返す。 |
T select(T a, T b, Tb c) Ti select(Ti a, Ti b, Tb c) |
ベクトル型の各コンポーネントについて result [i] = c [i]? b [i]:a [i] スカラー型の場合 result = c? b:a |
Tb signbit(T x) | 符号ビットをテスト。 xの浮動小数点値に符号ビットが設定されている場合はtrueを返す。 それ以外の場合はfalseを返す。 |
6.5 Math Functions
ビルトイン数学関数 | 説明 |
---|---|
T acos(T x) | xの逆余弦を計算。 |
T acosh(T x) | xの逆双曲線余弦を計算。 |
T asin(T x) | xの逆正弦を計算。 |
T asinh(T x) | xの逆双曲線正弦を計算。 |
T atan(T y_over_x) | xの逆正接を計算。 |
T atan2(T y, T x) | xに対するyの逆正接を計算。 |
T atanh(T x) | xの双曲線逆正接を計算。 |
T ceil(T x) | xを整数値に丸める。 |
T copysign(T x, T y) | |
T cos(T x) | xの余弦を計算。 |
T cosh(T x) | xの双曲線余弦を計算。 |
T cospi(T x) | cos(πx)を計算。 |
T divide(T x, T y) | x / yを計算。 |
T exp(T x) | eが底の指数関数。 |
T exp2(T x) | 2が底の指数関数。 |
T exp10(T x) | 10が底の指数関数。 |
T fabs(T x) T abs(T x) |
浮動小数点数の絶対値を計算。 |
T fdim(T x, T y) | |
T floor(T x) | |
T fma(T a, T b, T c) | |
T fmax(T x, T y) T max(T x, T y) |
fmax(x, fmax(y, z))を返す。 |
T fmax3(T x, T y, T z) T max3(T x, T y, T z) |
|
T fmedian3(T x, T y, T z) | |
T median3(T x, T y, T z) | |
T fmin(T x, T y) T min(T x, T y) |
|
T fmin3(T x, T y, T z) T min3(T x, T y, T z) |
fmin(x, fmin(y, z))を返す。 |
T fmod(T x, T y) | x – y * trunc(x / y)を返す。 |
T fract(T x) | |
T frexp(T x, Ti &exponent) | |
Ti ilogb(T x) | |
T ldexp(T x, Ti k) | |
T log(T x) | xの自然対数を計算。 |
T log2(T x) | xの2を底とする対数を計算。 |
T log10(T x) | xの10を底とする対数を計算 |
T modf(T x, T &intval) | |
T pow(T x, T y) | xのy乗を計算。 |
T powr(T x, T y) | x >= 0の時、xのy乗を計算。 |
T rint(T x) | |
T round(T x) | |
T rsqrt(T x) | xの逆平方根を計算。 |
T sin(T x) | xの正弦を計算。 |
T sincos(T x, T &cosval) | |
T sinh(T x) | xの双曲線正弦を計算。 |
T sinpi(T x) | sin(πx)を計算。 |
T sqrt(T x) | xの平方根を計算。 |
T tan(T x) | xの正接を計算。 |
T tanh(T x) | xの双曲線正接を計算。 |
T tanpi(T x) | tan(πx)を計算。 |
T trunc(T x) | xを整数値に丸める。 |
定数名 | 説明 |
---|---|
MAXFLOAT | |
HUGE_VALF | |
INFINITY | |
NAN | |
M_E_F | |
M_LOG2E_F | |
M_LOG10E_F | |
M_LN2_F | |
M_LN10_F | |
M_PI_F | |
M_PI_2_F | |
M_PI_4_F | |
M_1_PI_F | |
M_2_PI_F | |
M_2_SQRTPI_F | |
M_SQRT2_F | |
M_SQRT1_2_F |
定数名 | 説明 |
---|---|
MAXHALF | |
M_E_H | |
M_LOG2E_H | |
M_LOG10E_H | |
M_LN2_H | |
M_LN10_H | |
M_PI_H | |
M_PI_2_H | |
M_PI_4_H | |
M_1_PI_H | |
M_2_PI_H | |
M_2_SQRTPI_H | |
M_SQRT2_H | |
M_SQRT1_2_H |
6.6 Matrix Functions
ビルトインマトリクス関数 | 説明 |
---|---|
float determinant(floatnxn) half determinant(halfnxn) |
|
floatmxn transpose(floatnxm) halfmxn transpose(halfnxm) |
6.7 Geometric Functions
ビルトイン幾何関数 | 説明 |
---|---|
T cross(T x, T y) | xとyの外積を返す。 Tは3成分のベクトル型でなければならない。 |
Ts distance(T x, T y) | xとyの間の距離を返す。 |
Ts distance_squared(T x, T y) | xとyの間の距離の2乗を返す。 |
Ts dot(T x, T y) | xとyの内積を返す。 |
T faceforward(T N, T I, T Nref) | dot(Nref, I) < 0.0はNを返し、それ以外は–Nを返す。 |
Ts length(T x) | ベクトルxの長さを返す。 |
Ts length_squared(T x) | ベクトルxの長さの2乗を返す。 |
T normalize(T x) | xと同じ方向で長さが1のベクトルを返す。 |
T reflect(T I, T N) | 入射ベクトルIと表面方向Nについて、正規化されたN(NN)を計算し、反射方向を返す。 I – 2 * dot(NN, I) * NN |
T refract(T I, T N, Ts eta) | 入射ベクトルIと表面法線N、および屈折率etaの屈折ベクトルを返す。 |