High-level DSL with operator overloading for natural syntax. Provides literals, arithmetic, comparison, and other operators that compile to type-safe WGSL expressions.
Create an f32 literal
Equations
Instances For
Create an f16 literal
Equations
Instances For
Create an i32 literal
Equations
Instances For
Create a u32 literal
Equations
Instances For
Create a bool literal
Equations
Instances For
Convenience function: Create f32 literal (most common type)
Equations
Instances For
Addition operator for WGSL expressions
Equations
- Hesper.WGSL.instHAddExp_1 = { hAdd := Hesper.WGSL.Exp.add }
Subtraction operator for WGSL expressions
Equations
- Hesper.WGSL.instHSubExp_1 = { hSub := Hesper.WGSL.Exp.sub }
Multiplication operator for WGSL expressions
Equations
- Hesper.WGSL.instHMulExp_1 = { hMul := Hesper.WGSL.Exp.mul }
Division operator for WGSL expressions
Equations
- Hesper.WGSL.instHDivExp_1 = { hDiv := Hesper.WGSL.Exp.div }
Modulo operator for WGSL expressions
Equations
- Hesper.WGSL.instHModExp_1 = { hMod := Hesper.WGSL.Exp.mod }
Negation operator for WGSL expressions
Equations
- Hesper.WGSL.instNegExp = { neg := Hesper.WGSL.Exp.neg }
Equations
- Hesper.WGSL.instOfNatExpScalarF32 = { ofNat := Hesper.WGSL.litF32 (OfNat.ofNat n) }
Equations
- Hesper.WGSL.instOfNatExpScalarI32_1 = { ofNat := Hesper.WGSL.litI32 (OfNat.ofNat n) }
Equations
- Hesper.WGSL.instOfNatExpScalarU32_1 = { ofNat := Hesper.WGSL.litU32 n }
Equations
- Hesper.WGSL.instCoeNatExpScalarU32 = { coe := fun (n : Nat) => Hesper.WGSL.litU32 n }
Equations
- Hesper.WGSL.instCoeIntExpScalarI32 = { coe := fun (i : Int) => Hesper.WGSL.litI32 i }
Equations
- Hesper.WGSL.instCoeFloatExpScalarF32 = { coe := fun (f : Float) => Hesper.WGSL.litF32 f }
Equations
- Hesper.WGSL.instCoeBoolExpScalarBool = { coe := fun (b : Bool) => Hesper.WGSL.litBool b }
Equations
- Hesper.WGSL.instCoeStringExp = { coe := fun (s : String) => Hesper.WGSL.Exp.var s }
Custom equality class for WGSL expressions
- weq : α → α → Exp (WGSLType.scalar ScalarType.bool)
- wne : α → α → Exp (WGSLType.scalar ScalarType.bool)
Instances
Custom ordering class for WGSL expressions
- wlt : α → α → Exp (WGSLType.scalar ScalarType.bool)
- wle : α → α → Exp (WGSLType.scalar ScalarType.bool)
- wgt : α → α → Exp (WGSLType.scalar ScalarType.bool)
- wge : α → α → Exp (WGSLType.scalar ScalarType.bool)
Instances
Equations
- Hesper.WGSL.instWGSLEqExp = { weq := Hesper.WGSL.Exp.eq, wne := Hesper.WGSL.Exp.ne }
Equations
- Hesper.WGSL.instWGSLOrdExp = { wlt := Hesper.WGSL.Exp.lt, wle := Hesper.WGSL.Exp.le, wgt := Hesper.WGSL.Exp.gt, wge := Hesper.WGSL.Exp.ge }
Equations
- Hesper.WGSL.«term_.==._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.==._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .==. ") (Lean.ParserDescr.cat `term 51))
Instances For
Equations
- Hesper.WGSL.«term_.!=._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.!=._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .!=. ") (Lean.ParserDescr.cat `term 51))
Instances For
Equations
- Hesper.WGSL.«term_.<._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.<._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .<. ") (Lean.ParserDescr.cat `term 51))
Instances For
Equations
- Hesper.WGSL.«term_.<=._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.<=._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .<=. ") (Lean.ParserDescr.cat `term 51))
Instances For
Equations
- Hesper.WGSL.«term_.>._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.>._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .>. ") (Lean.ParserDescr.cat `term 51))
Instances For
Equations
- Hesper.WGSL.«term_.>=._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.>=._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .>=. ") (Lean.ParserDescr.cat `term 51))
Instances For
Boolean AND
Equations
- Hesper.WGSL.«term_.&&._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.&&._» 35 35 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .&&. ") (Lean.ParserDescr.cat `term 36))
Instances For
Boolean OR
Equations
- Hesper.WGSL.«term_.||._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.||._» 30 30 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .||. ") (Lean.ParserDescr.cat `term 31))
Instances For
Boolean NOT
Equations
- Hesper.WGSL.«term.!._» = Lean.ParserDescr.node `Hesper.WGSL.«term.!._» 40 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol ".!.") (Lean.ParserDescr.cat `term 40))
Instances For
Bitwise left shift
Equations
- Hesper.WGSL.«term_.<<._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.<<._» 60 60 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .<<. ") (Lean.ParserDescr.cat `term 61))
Instances For
Bitwise right shift
Equations
- Hesper.WGSL.«term_.>>._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.>>._» 60 60 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .>>. ") (Lean.ParserDescr.cat `term 61))
Instances For
Bitwise AND
Equations
- Hesper.WGSL.«term_.&._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.&._» 55 55 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .&. ") (Lean.ParserDescr.cat `term 56))
Instances For
Bitwise OR
Equations
- Hesper.WGSL.«term_.|._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.|._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .|. ") (Lean.ParserDescr.cat `term 51))
Instances For
Bitwise XOR
Equations
- Hesper.WGSL.«term_.^._» = Lean.ParserDescr.trailingNode `Hesper.WGSL.«term_.^._» 50 50 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " .^. ") (Lean.ParserDescr.cat `term 51))
Instances For
Convert to f32
Instances For
Convert to f16
Instances For
Convert to i32
Instances For
Convert to u32
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Array indexing operator
Equations
- Hesper.WGSL.term_!_ = Lean.ParserDescr.trailingNode `Hesper.WGSL.term_!_ 90 90 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ! ") (Lean.ParserDescr.cat `term 91))
Instances For
Equations
- Hesper.WGSL.vecY v = v.vecY
Instances For
Equations
- Hesper.WGSL.vecZ v = v.vecZ
Instances For
Equations
- Hesper.WGSL.vecW v = v.vecW
Instances For
Create vec4
Equations
- Hesper.WGSL.mkVec4 x y z w = x.vec4 y z w
Instances For
Select between two values based on condition (WGSL select function)
Equations
- Hesper.WGSL.select' cond ifTrue ifFalse = cond.select ifTrue ifFalse
Instances For
Example Usage #
-- Create variables
def x : Exp (.scalar .f32) := Exp.var "x"
def y : Exp (.scalar .f32) := Exp.var "y"
-- Natural arithmetic syntax
def expr1 := x + y * 2.0 -- Multiplication binds tighter
-- Comparisons
def cond := x .>. 0.0 .&&. y .<. 10.0
-- Type conversions
def asInt := i32(x)
-- Math functions
def length := sqrt'(x * x + y * y)
-- Conditional
def result := select' (x .>. 0.0) x (-x) -- absolute value
Square root
Equations
- Hesper.WGSL.sqrt x = x.sqrt
Instances For
Absolute value
Equations
- Hesper.WGSL.abs x = x.abs
Instances For
Minimum of two values
Equations
- Hesper.WGSL.min x y = x.min y
Instances For
Maximum of two values
Equations
- Hesper.WGSL.max x y = x.max y
Instances For
Exponential function
Equations
- Hesper.WGSL.exp x = x.exp
Instances For
Clamp value to range
Equations
- Hesper.WGSL.clamp x minVal maxVal = x.clamp minVal maxVal
Instances For
Power function
Equations
- Hesper.WGSL.pow x y = x.pow y
Instances For
Select (ternary operator): select(cond, trueVal, falseVal)
Equations
- Hesper.WGSL.select cond trueVal falseVal = cond.select trueVal falseVal
Instances For
Load subgroup matrix (left operand) from buffer
Equations
- Hesper.WGSL.matLoadLeft ptrRef offset stride transpose = Hesper.WGSL.Exp.subgroupMatrixLoad ptrRef offset transpose stride
Instances For
Load subgroup matrix (right operand) from buffer
Equations
- Hesper.WGSL.matLoadRight ptrRef offset stride transpose = Hesper.WGSL.Exp.subgroupMatrixLoadRight ptrRef offset transpose stride
Instances For
Multiply-accumulate for subgroup matrices
Equations
- Hesper.WGSL.matMulAcc a b acc = a.subgroupMatrixMultiplyAccumulate b acc
Instances For
Store subgroup matrix result to buffer
Equations
- Hesper.WGSL.matStore ptrRef offset mat stride transpose = Hesper.WGSL.Exp.subgroupMatrixStore ptrRef offset mat transpose stride
Instances For
Zero-initialized subgroup matrix (left)
Instances For
Zero-initialized subgroup matrix (right)
Instances For
Zero-initialized subgroup matrix (result)
Instances For
Workgroup barrier
Instances For
Index into an array
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Atomically add to i32, returns old value
Equations
- Hesper.WGSL.atomicAdd ptr value = ptr.atomicAdd value
Instances For
Atomically add to u32, returns old value
Equations
- Hesper.WGSL.atomicAddU ptr value = ptr.atomicAddU value
Instances For
Atomically subtract from i32, returns old value
Equations
- Hesper.WGSL.atomicSub ptr value = ptr.atomicSub value
Instances For
Atomically subtract from u32, returns old value
Equations
- Hesper.WGSL.atomicSubU ptr value = ptr.atomicSubU value
Instances For
Atomically compute minimum with i32, returns old value
Equations
- Hesper.WGSL.atomicMin ptr value = ptr.atomicMin value
Instances For
Atomically compute minimum with u32, returns old value
Equations
- Hesper.WGSL.atomicMinU ptr value = ptr.atomicMinU value
Instances For
Atomically compute maximum with i32, returns old value
Equations
- Hesper.WGSL.atomicMax ptr value = ptr.atomicMax value
Instances For
Atomically compute maximum with u32, returns old value
Equations
- Hesper.WGSL.atomicMaxU ptr value = ptr.atomicMaxU value
Instances For
Atomically exchange (swap) i32 value, returns old value
Equations
- Hesper.WGSL.atomicExchange ptr value = ptr.atomicExchange value
Instances For
Atomically exchange (swap) u32 value, returns old value
Equations
- Hesper.WGSL.atomicExchangeU ptr value = ptr.atomicExchangeU value
Instances For
Atomically compare-and-exchange i32 (weak version), returns old value
Equations
- Hesper.WGSL.atomicCompareExchangeWeak ptr compare value = ptr.atomicCompareExchangeWeak compare value
Instances For
Atomically compare-and-exchange u32 (weak version), returns old value
Equations
- Hesper.WGSL.atomicCompareExchangeWeakU ptr compare value = ptr.atomicCompareExchangeWeakU compare value