pub enum MetalExpr {
Show 24 variants
LitInt(i64),
LitFloat(f64),
LitBool(bool),
Var(String),
Builtin(MetalBuiltin),
Index(Box<MetalExpr>, Box<MetalExpr>),
Member(Box<MetalExpr>, String),
PtrMember(Box<MetalExpr>, String),
Cast(MetalType, Box<MetalExpr>),
Call(String, Vec<MetalExpr>),
BinOp(Box<MetalExpr>, MetalBinOp, Box<MetalExpr>),
UnOp(MetalUnOp, Box<MetalExpr>),
Ternary(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>),
SimdSum(Box<MetalExpr>),
SimdShuffleDown(Box<MetalExpr>, Box<MetalExpr>),
SimdBroadcast(Box<MetalExpr>, Box<MetalExpr>),
AtomicFetchAdd(Box<MetalExpr>, Box<MetalExpr>),
ThreadgroupBarrier(MemFlags),
AsType(MetalType, Box<MetalExpr>),
Select(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>),
Dot(Box<MetalExpr>, Box<MetalExpr>),
Length(Box<MetalExpr>),
Normalize(Box<MetalExpr>),
Clamp(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>),
}Expand description
Metal Shading Language expression AST node.
Variants§
LitInt(i64)
Integer literal
LitFloat(f64)
Float literal
LitBool(bool)
Boolean literal
Var(String)
Named variable
Builtin(MetalBuiltin)
Built-in variable access (used inside shader parameters)
Index(Box<MetalExpr>, Box<MetalExpr>)
Array subscript: arr[idx]
Member(Box<MetalExpr>, String)
Struct member: s.field
PtrMember(Box<MetalExpr>, String)
Pointer member: p->field
Cast(MetalType, Box<MetalExpr>)
C-style cast: (T)expr — MSL also supports static_cast
Call(String, Vec<MetalExpr>)
Function / constructor call: func(args...)
BinOp(Box<MetalExpr>, MetalBinOp, Box<MetalExpr>)
Binary operation
UnOp(MetalUnOp, Box<MetalExpr>)
Unary operation
Ternary(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>)
Ternary conditional: cond ? then : else
SimdSum(Box<MetalExpr>)
simd_sum(val) — warp/simd group reduction
SimdShuffleDown(Box<MetalExpr>, Box<MetalExpr>)
simd_shuffle_down(val, delta)
SimdBroadcast(Box<MetalExpr>, Box<MetalExpr>)
simd_broadcast(val, lane)
AtomicFetchAdd(Box<MetalExpr>, Box<MetalExpr>)
atomic_fetch_add_explicit(&atom, val, order) — simplified
ThreadgroupBarrier(MemFlags)
threadgroup_barrier(mem_flags::mem_device) etc.
AsType(MetalType, Box<MetalExpr>)
as_type<T>(expr) — bitcast
Select(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>)
select(a, b, cond) — component-wise select
Dot(Box<MetalExpr>, Box<MetalExpr>)
dot(a, b) — dot product
Length(Box<MetalExpr>)
length(v) — vector length
Normalize(Box<MetalExpr>)
normalize(v) — vector normalize
Clamp(Box<MetalExpr>, Box<MetalExpr>, Box<MetalExpr>)
clamp(val, lo, hi)