typegpu 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +1 -1
  2. package/attributes-BdU8hyQq.d.cts +435 -0
  3. package/attributes-CAsvE5Z9.d.ts +435 -0
  4. package/{chunk-RMXVIINO.js → chunk-5PJ3H5OR.js} +2 -2
  5. package/chunk-5PJ3H5OR.js.map +1 -0
  6. package/chunk-7UUBX6MC.cjs +4 -0
  7. package/chunk-7UUBX6MC.cjs.map +1 -0
  8. package/chunk-AKBL6GDL.js +4 -0
  9. package/chunk-AKBL6GDL.js.map +1 -0
  10. package/{chunk-FM3TKZFZ.cjs → chunk-URJCMUTT.cjs} +2 -2
  11. package/chunk-URJCMUTT.cjs.map +1 -0
  12. package/data/index.cjs +1 -1
  13. package/data/index.cjs.map +1 -1
  14. package/data/index.d.cts +51 -4
  15. package/data/index.d.ts +51 -4
  16. package/data/index.js +1 -1
  17. package/index.cjs +16 -16
  18. package/index.cjs.map +1 -1
  19. package/index.d.cts +92 -53
  20. package/index.d.ts +92 -53
  21. package/index.js +16 -16
  22. package/index.js.map +1 -1
  23. package/package.json +2 -2
  24. package/std/index.cjs +1 -1
  25. package/std/index.cjs.map +1 -1
  26. package/std/index.d.cts +141 -33
  27. package/std/index.d.ts +141 -33
  28. package/std/index.js +1 -1
  29. package/std/index.js.map +1 -1
  30. package/{wgslTypes-VtSRoe90.d.cts → wgslTypes-Bh2dG5qv.d.cts} +213 -405
  31. package/{wgslTypes-VtSRoe90.d.ts → wgslTypes-Bh2dG5qv.d.ts} +213 -405
  32. package/attributes-B4JpvOTz.d.ts +0 -159
  33. package/attributes-DSOqT8yA.d.cts +0 -159
  34. package/chunk-DVZNNZFQ.js +0 -2
  35. package/chunk-DVZNNZFQ.js.map +0 -1
  36. package/chunk-FM3TKZFZ.cjs.map +0 -1
  37. package/chunk-M4VUFFPZ.cjs +0 -4
  38. package/chunk-M4VUFFPZ.cjs.map +0 -1
  39. package/chunk-RMXVIINO.js.map +0 -1
  40. package/chunk-UHU5Z2IS.js +0 -4
  41. package/chunk-UHU5Z2IS.js.map +0 -1
  42. package/chunk-UPPJES6W.cjs +0 -2
  43. package/chunk-UPPJES6W.cjs.map +0 -1
package/std/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/std/discard.ts","../../src/data/vectorOps.ts","../../src/std/numeric.ts","../../src/std/atomic.ts","../../src/std/array.ts"],"sourcesContent":["import { createDualImpl } from '../shared/generators.js';\nimport { Void } from '../types.js';\n\nexport const discard = createDualImpl(\n // CPU\n (): never => {\n throw new Error('discard() can only be used on the GPU.');\n },\n // GPU\n () => ({\n value: 'discard;',\n dataType: Void,\n }),\n);\n","import { mat2x2f, mat3x3f, mat4x4f } from './matrix';\nimport {\n vec2f,\n vec2h,\n vec2i,\n vec2u,\n vec3f,\n vec3h,\n vec3i,\n vec3u,\n vec4f,\n vec4h,\n vec4i,\n vec4u,\n} from './vector';\nimport type * as wgsl from './wgslTypes';\nimport type { VecKind } from './wgslTypes';\n\ntype vBase = { kind: VecKind };\ntype v2 = wgsl.v2f | wgsl.v2h | wgsl.v2i | wgsl.v2u;\ntype v3 = wgsl.v3f | wgsl.v3h | wgsl.v3i | wgsl.v3u;\ntype v4 = wgsl.v4f | wgsl.v4h | wgsl.v4i | wgsl.v4u;\n\ntype MatKind = 'mat2x2f' | 'mat3x3f' | 'mat4x4f';\n\nconst lengthVec2 = (v: v2) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: v3) => Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: v4) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nconst dotVec2 = (lhs: v2, rhs: v2) => lhs.x * rhs.x + lhs.y * rhs.y;\nconst dotVec3 = (lhs: v3, rhs: v3) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;\nconst dotVec4 = (lhs: v4, rhs: v4) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w;\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(low, value), high);\n\ntype UnaryOp = (a: number) => number;\ntype BinaryOp = (a: number, b: number) => number;\n\nconst unary2f = (op: UnaryOp) => (a: wgsl.v2f) => vec2f(op(a.x), op(a.y));\nconst unary2h = (op: UnaryOp) => (a: wgsl.v2h) => vec2h(op(a.x), op(a.y));\nconst unary2i = (op: UnaryOp) => (a: wgsl.v2i) => vec2i(op(a.x), op(a.y));\nconst unary2u = (op: UnaryOp) => (a: wgsl.v2u) => vec2u(op(a.x), op(a.y));\n\nconst unary3f = (op: UnaryOp) => (a: wgsl.v3f) =>\n vec3f(op(a.x), op(a.y), op(a.z));\n\nconst unary3h = (op: UnaryOp) => (a: wgsl.v3h) =>\n vec3h(op(a.x), op(a.y), op(a.z));\n\nconst unary3i = (op: UnaryOp) => (a: wgsl.v3i) =>\n vec3i(op(a.x), op(a.y), op(a.z));\n\nconst unary3u = (op: UnaryOp) => (a: wgsl.v3u) =>\n vec3u(op(a.x), op(a.y), op(a.z));\n\nconst unary4f = (op: UnaryOp) => (a: wgsl.v4f) =>\n vec4f(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4h = (op: UnaryOp) => (a: wgsl.v4h) =>\n vec4h(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4i = (op: UnaryOp) => (a: wgsl.v4i) =>\n vec4i(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4u = (op: UnaryOp) => (a: wgsl.v4u) =>\n vec4u(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst binaryComponentWise2f = (op: BinaryOp) => (a: wgsl.v2f, b: wgsl.v2f) =>\n vec2f(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2h = (op: BinaryOp) => (a: wgsl.v2h, b: wgsl.v2h) =>\n vec2h(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2i = (op: BinaryOp) => (a: wgsl.v2i, b: wgsl.v2i) =>\n vec2i(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2u = (op: BinaryOp) => (a: wgsl.v2u, b: wgsl.v2u) =>\n vec2u(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise3f = (op: BinaryOp) => (a: wgsl.v3f, b: wgsl.v3f) =>\n vec3f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3h = (op: BinaryOp) => (a: wgsl.v3h, b: wgsl.v3h) =>\n vec3h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3i = (op: BinaryOp) => (a: wgsl.v3i, b: wgsl.v3i) =>\n vec3i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3u = (op: BinaryOp) => (a: wgsl.v3u, b: wgsl.v3u) =>\n vec3u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise4f = (op: BinaryOp) => (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4h = (op: BinaryOp) => (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4i = (op: BinaryOp) => (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4u = (op: BinaryOp) => (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nexport const VectorOps = {\n abs: {\n vec2f: unary2f(Math.abs),\n vec2h: unary2h(Math.abs),\n vec2i: unary2i(Math.abs),\n vec2u: unary2u(Math.abs),\n\n vec3f: unary3f(Math.abs),\n vec3h: unary3h(Math.abs),\n vec3i: unary3i(Math.abs),\n vec3u: unary3u(Math.abs),\n\n vec4f: unary4f(Math.abs),\n vec4h: unary4h(Math.abs),\n vec4i: unary4i(Math.abs),\n vec4u: unary4u(Math.abs),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atan2: {\n vec2f: binaryComponentWise2f(Math.atan2),\n vec2h: binaryComponentWise2h(Math.atan2),\n vec2i: binaryComponentWise2i(Math.atan2),\n vec2u: binaryComponentWise2u(Math.atan2),\n\n vec3f: binaryComponentWise3f(Math.atan2),\n vec3h: binaryComponentWise3h(Math.atan2),\n vec3i: binaryComponentWise3i(Math.atan2),\n vec3u: binaryComponentWise3u(Math.atan2),\n\n vec4f: binaryComponentWise4f(Math.atan2),\n vec4h: binaryComponentWise4h(Math.atan2),\n vec4i: binaryComponentWise4i(Math.atan2),\n vec4u: binaryComponentWise4u(Math.atan2),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n acos: {\n vec2f: unary2f(Math.acos),\n vec2h: unary2h(Math.acos),\n vec2i: unary2i(Math.acos),\n vec2u: unary2u(Math.acos),\n\n vec3f: unary3f(Math.acos),\n vec3h: unary3h(Math.acos),\n vec3i: unary3i(Math.acos),\n vec3u: unary3u(Math.acos),\n\n vec4f: unary4f(Math.acos),\n vec4h: unary4h(Math.acos),\n vec4i: unary4i(Math.acos),\n vec4u: unary4u(Math.acos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asin: {\n vec2f: unary2f(Math.asin),\n vec2h: unary2h(Math.asin),\n vec2i: unary2i(Math.asin),\n vec2u: unary2u(Math.asin),\n\n vec3f: unary3f(Math.asin),\n vec3h: unary3h(Math.asin),\n vec3i: unary3i(Math.asin),\n vec3u: unary3u(Math.asin),\n\n vec4f: unary4f(Math.asin),\n vec4h: unary4h(Math.asin),\n vec4i: unary4i(Math.asin),\n vec4u: unary4u(Math.asin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n ceil: {\n vec2f: unary2f(Math.ceil),\n vec2h: unary2h(Math.ceil),\n vec2i: unary2i(Math.ceil),\n vec2u: unary2u(Math.ceil),\n\n vec3f: unary3f(Math.ceil),\n vec3h: unary3h(Math.ceil),\n vec3i: unary3i(Math.ceil),\n vec3u: unary3u(Math.ceil),\n\n vec4f: unary4f(Math.ceil),\n vec4h: unary4h(Math.ceil),\n vec4i: unary4i(Math.ceil),\n vec4u: unary4u(Math.ceil),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n clamp: {\n vec2f: (v: wgsl.v2f, low: wgsl.v2f, high: wgsl.v2f) =>\n vec2f(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2h: (v: wgsl.v2h, low: wgsl.v2h, high: wgsl.v2h) =>\n vec2h(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2i: (v: wgsl.v2i, low: wgsl.v2i, high: wgsl.v2i) =>\n vec2i(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2u: (v: wgsl.v2u, low: wgsl.v2u, high: wgsl.v2u) =>\n vec2u(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n\n vec3f: (v: wgsl.v3f, low: wgsl.v3f, high: wgsl.v3f) =>\n vec3f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3h: (v: wgsl.v3h, low: wgsl.v3h, high: wgsl.v3h) =>\n vec3h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3i: (v: wgsl.v3i, low: wgsl.v3i, high: wgsl.v3f) =>\n vec3i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3u: (v: wgsl.v3u, low: wgsl.v3u, high: wgsl.v3f) =>\n vec3u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n\n vec4f: (v: wgsl.v4f, low: wgsl.v4f, high: wgsl.v4f) =>\n vec4f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4h: (v: wgsl.v4h, low: wgsl.v4h, high: wgsl.v4h) =>\n vec4h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4i: (v: wgsl.v4i, low: wgsl.v4i, high: wgsl.v4i) =>\n vec4i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4u: (v: wgsl.v4u, low: wgsl.v4u, high: wgsl.v4u) =>\n vec4u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n } as Record<VecKind, <T extends vBase>(v: T, low: T, high: T) => T>,\n\n length: {\n vec2f: lengthVec2,\n vec2h: lengthVec2,\n vec2i: lengthVec2,\n vec2u: lengthVec2,\n vec3f: lengthVec3,\n vec3h: lengthVec3,\n vec3i: lengthVec3,\n vec3u: lengthVec3,\n vec4f: lengthVec4,\n vec4h: lengthVec4,\n vec4i: lengthVec4,\n vec4u: lengthVec4,\n } as Record<VecKind, (v: vBase) => number>,\n\n add: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x + b.x, a.y + b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x - b.x, a.y - b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n mulSxV: {\n vec2f: (s: number, v: wgsl.v2f) => vec2f(s * v.x, s * v.y),\n vec2h: (s: number, v: wgsl.v2h) => vec2h(s * v.x, s * v.y),\n vec2i: (s: number, v: wgsl.v2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: wgsl.v2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: wgsl.v3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3h: (s: number, v: wgsl.v3h) => vec3h(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: wgsl.v3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: wgsl.v3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: wgsl.v4f) =>\n vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4h: (s: number, v: wgsl.v4h) =>\n vec4h(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: wgsl.v4i) =>\n vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: wgsl.v4u) =>\n vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n\n mat2x2f: (s: number, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return mat2x2f(s * m_[0].x, s * m_[0].y, s * m_[1].x, s * m_[1].y);\n },\n\n mat3x3f: (s: number, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return mat3x3f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n );\n },\n\n mat4x4f: (s: number, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return mat4x4f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n s * m_[0].w,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n s * m_[1].w,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n s * m_[2].w,\n\n s * m_[3].x,\n s * m_[3].y,\n s * m_[3].z,\n s * m_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(s: number, v: T) => T\n >,\n\n mulVxV: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x * b.x, a.y * b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x * b.x, a.y * b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x * b.x, a.y * b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x * b.x, a.y * b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x * b.x, a.y * b.y, a.z * b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n\n mat2x2f: (a: wgsl.m2x2f, b: wgsl.m2x2f) => {\n const a_ = a.columns as [wgsl.v2f, wgsl.v2f];\n const b_ = b.columns as [wgsl.v2f, wgsl.v2f];\n\n return mat2x2f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y,\n );\n },\n\n mat3x3f: (a: wgsl.m3x3f, b: wgsl.m3x3f) => {\n const a_ = a.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n const b_ = b.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n\n return mat3x3f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y + a_[2].x * b_[0].z,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y + a_[2].y * b_[0].z,\n a_[0].z * b_[0].x + a_[1].z * b_[0].y + a_[2].z * b_[0].z,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y + a_[2].x * b_[1].z,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y + a_[2].y * b_[1].z,\n a_[0].z * b_[1].x + a_[1].z * b_[1].y + a_[2].z * b_[1].z,\n\n a_[0].x * b_[2].x + a_[1].x * b_[2].y + a_[2].x * b_[2].z,\n a_[0].y * b_[2].x + a_[1].y * b_[2].y + a_[2].y * b_[2].z,\n a_[0].z * b_[2].x + a_[1].z * b_[2].y + a_[2].z * b_[2].z,\n );\n },\n\n mat4x4f: (a: wgsl.m4x4f, b: wgsl.m4x4f) => {\n const a_ = a.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n const b_ = b.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n\n return mat4x4f(\n a_[0].x * b_[0].x +\n a_[1].x * b_[0].y +\n a_[2].x * b_[0].z +\n a_[3].x * b_[0].w,\n a_[0].y * b_[0].x +\n a_[1].y * b_[0].y +\n a_[2].y * b_[0].z +\n a_[3].y * b_[0].w,\n a_[0].z * b_[0].x +\n a_[1].z * b_[0].y +\n a_[2].z * b_[0].z +\n a_[3].z * b_[0].w,\n a_[0].w * b_[0].x +\n a_[1].w * b_[0].y +\n a_[2].w * b_[0].z +\n a_[3].w * b_[0].w,\n\n a_[0].x * b_[1].x +\n a_[1].x * b_[1].y +\n a_[2].x * b_[1].z +\n a_[3].x * b_[1].w,\n a_[0].y * b_[1].x +\n a_[1].y * b_[1].y +\n a_[2].y * b_[1].z +\n a_[3].y * b_[1].w,\n a_[0].z * b_[1].x +\n a_[1].z * b_[1].y +\n a_[2].z * b_[1].z +\n a_[3].z * b_[1].w,\n a_[0].w * b_[1].x +\n a_[1].w * b_[1].y +\n a_[2].w * b_[1].z +\n a_[3].w * b_[1].w,\n\n a_[0].x * b_[2].x +\n a_[1].x * b_[2].y +\n a_[2].x * b_[2].z +\n a_[3].x * b_[2].w,\n a_[0].y * b_[2].x +\n a_[1].y * b_[2].y +\n a_[2].y * b_[2].z +\n a_[3].y * b_[2].w,\n a_[0].z * b_[2].x +\n a_[1].z * b_[2].y +\n a_[2].z * b_[2].z +\n a_[3].z * b_[2].w,\n a_[0].w * b_[2].x +\n a_[1].w * b_[2].y +\n a_[2].w * b_[2].z +\n a_[3].w * b_[2].w,\n\n a_[0].x * b_[3].x +\n a_[1].x * b_[3].y +\n a_[2].x * b_[3].z +\n a_[3].x * b_[3].w,\n a_[0].y * b_[3].x +\n a_[1].y * b_[3].y +\n a_[2].y * b_[3].z +\n a_[3].y * b_[3].w,\n a_[0].z * b_[3].x +\n a_[1].z * b_[3].y +\n a_[2].z * b_[3].z +\n a_[3].z * b_[3].w,\n a_[0].w * b_[3].x +\n a_[1].w * b_[3].y +\n a_[2].w * b_[3].z +\n a_[3].w * b_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(lhs: T, rhs: T) => T\n >,\n\n mulMxV: {\n mat2x2f: (m: wgsl.m2x2f, v: wgsl.v2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n m_[0].x * v.x + m_[1].x * v.y,\n m_[0].y * v.x + m_[1].y * v.y,\n );\n },\n\n mat3x3f: (m: wgsl.m3x3f, v: wgsl.v3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z,\n );\n },\n\n mat4x4f: (m: wgsl.m4x4f, v: wgsl.v4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z + m_[3].x * v.w,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z + m_[3].y * v.w,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z + m_[3].z * v.w,\n m_[0].w * v.x + m_[1].w * v.y + m_[2].w * v.z + m_[3].w * v.w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n m: T,\n v: wgsl.vBaseForMat<T>,\n ) => wgsl.vBaseForMat<T>\n >,\n\n mulVxM: {\n mat2x2f: (v: wgsl.v2f, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n v.x * m_[0].x + v.y * m_[0].y,\n v.x * m_[1].x + v.y * m_[1].y,\n );\n },\n\n mat3x3f: (v: wgsl.v3f, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z,\n );\n },\n\n mat4x4f: (v: wgsl.v4f, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z + v.w * m_[0].w,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z + v.w * m_[1].w,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z + v.w * m_[2].w,\n v.x * m_[3].x + v.y * m_[3].y + v.z * m_[3].z + v.w * m_[3].w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n v: wgsl.vBaseForMat<T>,\n m: T,\n ) => wgsl.vBaseForMat<T>\n >,\n\n dot: {\n vec2f: dotVec2,\n vec2h: dotVec2,\n vec2i: dotVec2,\n vec2u: dotVec2,\n vec3f: dotVec3,\n vec3h: dotVec3,\n vec3i: dotVec3,\n vec3u: dotVec3,\n vec4f: dotVec4,\n vec4h: dotVec4,\n vec4i: dotVec4,\n vec4u: dotVec4,\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: wgsl.v2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2h: (v: wgsl.v2h) => {\n const len = lengthVec2(v);\n return vec2h(v.x / len, v.y / len);\n },\n vec2i: (v: wgsl.v2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: wgsl.v2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: wgsl.v3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3h: (v: wgsl.v3h) => {\n const len = lengthVec3(v);\n return vec3h(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: wgsl.v3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: wgsl.v3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: wgsl.v4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4h: (v: wgsl.v4h) => {\n const len = lengthVec4(v);\n return vec4h(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: wgsl.v4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: wgsl.v4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => {\n return vec3h(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => {\n return vec3i(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => {\n return vec3u(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3i' | 'vec3u',\n <T extends wgsl.v3f | wgsl.v3i | wgsl.v3u>(a: T, b: T) => T\n >,\n\n floor: {\n vec2f: unary2f(Math.floor),\n vec2h: unary2h(Math.floor),\n vec2i: unary2i(Math.floor),\n vec2u: unary2u(Math.floor),\n\n vec3f: unary3f(Math.floor),\n vec3h: unary3h(Math.floor),\n vec3i: unary3i(Math.floor),\n vec3u: unary3u(Math.floor),\n\n vec4f: unary4f(Math.floor),\n vec4h: unary4h(Math.floor),\n vec4i: unary4i(Math.floor),\n vec4u: unary4u(Math.floor),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n max: {\n vec2f: binaryComponentWise2f(Math.max),\n vec2h: binaryComponentWise2h(Math.max),\n vec2i: binaryComponentWise2i(Math.max),\n vec2u: binaryComponentWise2u(Math.max),\n\n vec3f: binaryComponentWise3f(Math.max),\n vec3h: binaryComponentWise3h(Math.max),\n vec3i: binaryComponentWise3i(Math.max),\n vec3u: binaryComponentWise3u(Math.max),\n\n vec4f: binaryComponentWise4f(Math.max),\n vec4h: binaryComponentWise4h(Math.max),\n vec4i: binaryComponentWise4i(Math.max),\n vec4u: binaryComponentWise4u(Math.max),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n min: {\n vec2f: binaryComponentWise2f(Math.min),\n vec2h: binaryComponentWise2h(Math.min),\n vec2i: binaryComponentWise2i(Math.min),\n vec2u: binaryComponentWise2u(Math.min),\n\n vec3f: binaryComponentWise3f(Math.min),\n vec3h: binaryComponentWise3h(Math.min),\n vec3i: binaryComponentWise3i(Math.min),\n vec3u: binaryComponentWise3u(Math.min),\n\n vec4f: binaryComponentWise4f(Math.min),\n vec4h: binaryComponentWise4h(Math.min),\n vec4i: binaryComponentWise4i(Math.min),\n vec4u: binaryComponentWise4u(Math.min),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n pow: {\n vec2f: (base: wgsl.v2f, exponent: wgsl.v2f) =>\n vec2f(base.x ** exponent.x, base.y ** exponent.y),\n vec2h: (base: wgsl.v2h, exponent: wgsl.v2h) =>\n vec2h(base.x ** exponent.x, base.y ** exponent.y),\n\n vec3f: (base: wgsl.v3f, exponent: wgsl.v3f) =>\n vec3f(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n vec3h: (base: wgsl.v3h, exponent: wgsl.v3h) =>\n vec3h(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n\n vec4f: (base: wgsl.v4f, exponent: wgsl.v4f) =>\n vec4f(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n vec4h: (base: wgsl.v4h, exponent: wgsl.v4h) =>\n vec4h(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h' | 'number',\n <\n T extends\n | wgsl.v2f\n | wgsl.v3f\n | wgsl.v4f\n | wgsl.v2h\n | wgsl.v3h\n | wgsl.v4h\n | number,\n >(\n a: T,\n b: T,\n ) => T\n >,\n\n mix: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f, e3: wgsl.v2f | number) => {\n if (typeof e3 === 'number') {\n return vec2f(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h, e3: wgsl.v2h | number) => {\n if (typeof e3 === 'number') {\n return vec2h(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f, e3: wgsl.v3f | number) => {\n if (typeof e3 === 'number') {\n return vec3f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h, e3: wgsl.v3h | number) => {\n if (typeof e3 === 'number') {\n return vec3h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f, e3: wgsl.v4f | number) => {\n if (typeof e3 === 'number') {\n return vec4f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h, e3: wgsl.v4h | number) => {\n if (typeof e3 === 'number') {\n return vec4h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h',\n <T extends wgsl.v2f | wgsl.v3f | wgsl.v4f | wgsl.v2h | wgsl.v3h | wgsl.v4h>(\n a: T,\n b: T,\n c: T | number,\n ) => T\n >,\n\n sin: {\n vec2f: unary2f(Math.sin),\n vec2h: unary2h(Math.sin),\n vec2i: unary2i(Math.sin),\n vec2u: unary2u(Math.sin),\n\n vec3f: unary3f(Math.sin),\n vec3h: unary3h(Math.sin),\n vec3i: unary3i(Math.sin),\n vec3u: unary3u(Math.sin),\n\n vec4f: unary4f(Math.sin),\n vec4h: unary4h(Math.sin),\n vec4i: unary4i(Math.sin),\n vec4u: unary4u(Math.sin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cos: {\n vec2f: unary2f(Math.cos),\n vec2h: unary2h(Math.cos),\n vec2i: unary2i(Math.cos),\n vec2u: unary2u(Math.cos),\n\n vec3f: unary3f(Math.cos),\n vec3h: unary3h(Math.cos),\n vec3i: unary3i(Math.cos),\n vec3u: unary3u(Math.cos),\n\n vec4f: unary4f(Math.cos),\n vec4h: unary4h(Math.cos),\n vec4i: unary4i(Math.cos),\n vec4u: unary4u(Math.cos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n exp: {\n vec2f: unary2f(Math.exp),\n vec2h: unary2h(Math.exp),\n vec2i: unary2i(Math.exp),\n vec2u: unary2u(Math.exp),\n\n vec3f: unary3f(Math.exp),\n vec3h: unary3h(Math.exp),\n vec3i: unary3i(Math.exp),\n vec3u: unary3u(Math.exp),\n\n vec4f: unary4f(Math.exp),\n vec4h: unary4h(Math.exp),\n vec4i: unary4i(Math.exp),\n vec4u: unary4u(Math.exp),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n fract: {\n vec2f: unary2f((value) => value - Math.floor(value)),\n vec2h: unary2h((value) => value - Math.floor(value)),\n vec2i: unary2i((value) => value - Math.floor(value)),\n vec2u: unary2u((value) => value - Math.floor(value)),\n\n vec3f: unary3f((value) => value - Math.floor(value)),\n vec3h: unary3h((value) => value - Math.floor(value)),\n vec3i: unary3i((value) => value - Math.floor(value)),\n vec3u: unary3u((value) => value - Math.floor(value)),\n\n vec4f: unary4f((value) => value - Math.floor(value)),\n vec4h: unary4h((value) => value - Math.floor(value)),\n vec4i: unary4i((value) => value - Math.floor(value)),\n vec4u: unary4u((value) => value - Math.floor(value)),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n isCloseToZero: {\n vec2f: (v: wgsl.v2f, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n vec2h: (v: wgsl.v2h, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n\n vec3f: (v: wgsl.v3f, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n vec3h: (v: wgsl.v3h, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n\n vec4f: (v: wgsl.v4f, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n vec4h: (v: wgsl.v4h, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n } as Record<VecKind, <T extends vBase>(v: T, n: number) => boolean>,\n};\n","import { bool, f32 } from '../data/numeric';\nimport { VectorOps } from '../data/vectorOps';\nimport type {\n AnyMatInstance,\n AnyWgslData,\n VecKind,\n v2f,\n v2h,\n v3f,\n v3h,\n v3i,\n v3u,\n v4f,\n v4h,\n vBaseForMat,\n} from '../data/wgslTypes';\nimport { createDualImpl } from '../shared/generators';\nimport type { Resource } from '../types';\n\nfunction isNumeric(element: Resource) {\n const type = element.dataType.type;\n return (\n type === 'abstractInt' ||\n type === 'abstractFloat' ||\n type === 'f32' ||\n type === 'f16' ||\n type === 'i32' ||\n type === 'u32'\n );\n}\n\ntype vBase = { kind: VecKind };\n\nexport const add = createDualImpl(\n // CPU implementation\n <T extends vBase>(lhs: T, rhs: T): T => VectorOps.add[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} + ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\nexport const sub = createDualImpl(\n // CPU implementation\n <T extends vBase>(lhs: T, rhs: T): T => VectorOps.sub[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} - ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\ntype MulOverload = {\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;\n <T extends vBase | AnyMatInstance>(s: number | T, v: T): T;\n};\n\nexport const mul: MulOverload = createDualImpl(\n // CPU implementation\n (\n s: number | vBase | AnyMatInstance,\n v: vBase | AnyMatInstance,\n ): vBase | AnyMatInstance => {\n if (typeof s === 'number') {\n // Scalar * Vector/Matrix case\n return VectorOps.mulSxV[v.kind](s, v);\n }\n if (\n typeof s === 'object' &&\n typeof v === 'object' &&\n 'kind' in s &&\n 'kind' in v\n ) {\n const sIsVector = !s.kind.startsWith('mat');\n const vIsVector = !v.kind.startsWith('mat');\n if (!sIsVector && vIsVector) {\n // Matrix * Vector case\n return VectorOps.mulMxV[(s as AnyMatInstance).kind](\n s as AnyMatInstance,\n v as vBaseForMat<AnyMatInstance>,\n );\n }\n if (sIsVector && !vIsVector) {\n // Vector * Matrix case\n return VectorOps.mulVxM[(v as AnyMatInstance).kind](\n s as vBaseForMat<AnyMatInstance>,\n v as AnyMatInstance,\n );\n }\n }\n // Vector * Vector or Matrix * Matrix case\n return VectorOps.mulVxV[v.kind](s, v);\n },\n // GPU implementation\n (s, v) => {\n const returnType = isNumeric(s)\n ? // Scalar * Vector/Matrix\n (v.dataType as AnyWgslData)\n : !s.dataType.type.startsWith('mat')\n ? // Vector * Matrix\n (s.dataType as AnyWgslData)\n : !v.dataType.type.startsWith('mat')\n ? // Matrix * Vector\n (v.dataType as AnyWgslData)\n : // Vector * Vector or Matrix * Matrix\n (s.dataType as AnyWgslData);\n return { value: `(${s.value} * ${v.value})`, dataType: returnType };\n },\n);\n\nexport const abs = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.abs(value) as T;\n }\n return VectorOps.abs[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `abs(${value.value})`, dataType: value.dataType }),\n);\n\nexport const atan2 = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(y: T, x: T): T => {\n if (typeof y === 'number' && typeof x === 'number') {\n return Math.atan2(y, x) as T;\n }\n return VectorOps.atan2[(y as vBase).kind](y as never, x as never) as T;\n },\n // GPU implementation\n (y, x) => ({ value: `atan2(${y.value}, ${x.value})`, dataType: y.dataType }),\n);\n\nexport const acos = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.acos(value) as T;\n }\n return VectorOps.acos[(value as vBase).kind](value as never) as T;\n },\n // GPU implementation\n (value) => ({ value: `acos(${value.value})`, dataType: value.dataType }),\n);\n\nexport const asin = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.asin(value) as T;\n }\n return VectorOps.asin[(value as vBase).kind](value as never) as T;\n },\n // GPU implementation\n (value) => ({ value: `asin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#ceil-builtin\n */\nexport const ceil = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.ceil(value) as T;\n }\n return VectorOps.ceil[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `ceil(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#clamp\n */\nexport const clamp = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T, low: T, high: T): T => {\n if (typeof value === 'number') {\n return Math.min(Math.max(low as number, value), high as number) as T;\n }\n return VectorOps.clamp[value.kind](value, low as vBase, high as vBase) as T;\n },\n // GPU implementation\n (value, low, high) => {\n return {\n value: `clamp(${value.value}, ${low.value}, ${high.value})`,\n dataType: value.dataType,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cos-builtin\n */\nexport const cos = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.cos(value) as T;\n }\n return VectorOps.cos[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `cos(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cross-builtin\n */\nexport const cross = createDualImpl(\n // CPU implementation\n <T extends v3f | v3i | v3u>(a: T, b: T): T => VectorOps.cross[a.kind](a, b),\n // GPU implementation\n (a, b) => ({ value: `cross(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#dot-builtin\n */\nexport const dot = createDualImpl(\n // CPU implementation\n <T extends vBase>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({ value: `dot(${lhs.value}, ${rhs.value})`, dataType: f32 }),\n);\n\nexport const normalize = createDualImpl(\n // CPU implementation\n <T extends vBase>(v: T): T => VectorOps.normalize[v.kind](v),\n // GPU implementation\n (v) => ({ value: `normalize(${v.value})`, dataType: v.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#floor-builtin\n */\nexport const floor = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.floor(value) as T;\n }\n return VectorOps.floor[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `floor(${value.value})`, dataType: value.dataType }),\n);\n\nexport const fract = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(a: T): T => {\n if (typeof a === 'number') {\n return (a - Math.floor(a)) as T;\n }\n return VectorOps.fract[a.kind](a) as T;\n },\n // GPU implementation\n (a) => ({ value: `fract(${a.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#length-builtin\n */\nexport const length = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): number => {\n if (typeof value === 'number') {\n return Math.abs(value);\n }\n return VectorOps.length[value.kind](value);\n },\n // GPU implementation\n (value) => ({ value: `length(${value.value})`, dataType: f32 }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#max-float-builtin\n */\nexport const max = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.max(a, b as number) as T;\n }\n return VectorOps.max[a.kind](a, b as vBase) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `max(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#min-float-builtin\n */\nexport const min = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.min(a, b as number) as T;\n }\n return VectorOps.min[a.kind](a, b as vBase) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `min(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#sin-builtin\n */\nexport const sin = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.sin(value) as T;\n }\n return VectorOps.sin[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `sin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#exp-builtin\n */\nexport const exp = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.exp(value) as T;\n }\n return VectorOps.exp[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `exp(${value.value})`, dataType: value.dataType }),\n);\n\ntype PowOverload = {\n (base: number, exponent: number): number;\n <T extends v2f | v3f | v4f | v2h | v3h | v4h>(base: T, exponent: T): T;\n};\n\nexport const pow: PowOverload = createDualImpl(\n // CPU implementation\n <T extends v2f | v3f | v4f | v2h | v3h | v4h | number>(\n base: T,\n exponent: T,\n ): T => {\n if (typeof base === 'number' && typeof exponent === 'number') {\n return (base ** exponent) as T;\n }\n if (\n typeof base === 'object' &&\n typeof exponent === 'object' &&\n 'kind' in base &&\n 'kind' in exponent\n ) {\n return VectorOps.pow[base.kind](base, exponent) as T;\n }\n throw new Error('Invalid arguments to pow()');\n },\n // GPU implementation\n (base, exponent) => {\n return {\n value: `pow(${base.value}, ${exponent.value})`,\n dataType: base.dataType,\n };\n },\n);\n\ntype MixOverload = {\n (e1: number, e2: number, e3: number): number;\n <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: number): T;\n <T extends v2f | v3f | v4f | v2h | v3h | v4h>(e1: T, e2: T, e3: T): T;\n};\n\nexport const mix: MixOverload = createDualImpl(\n // CPU implementation\n <T extends v2f | v3f | v4f | v2h | v3h | v4h | number>(\n e1: T,\n e2: T,\n e3: T | number,\n ): T => {\n if (typeof e1 === 'number') {\n if (typeof e3 !== 'number' || typeof e2 !== 'number') {\n throw new Error(\n 'When e1 and e2 are numbers, the blend factor must be a number.',\n );\n }\n return (e1 * (1 - e3) + e2 * e3) as T;\n }\n\n if (typeof e1 === 'number' || typeof e2 === 'number') {\n throw new Error('e1 and e2 need to both be vectors of the same kind.');\n }\n\n return VectorOps.mix[e1.kind](e1, e2, e3) as T;\n },\n // GPU implementation\n (e1, e2, e3) => {\n return {\n value: `mix(${e1.value}, ${e2.value}, ${e3.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const reflect = createDualImpl(\n // CPU implementation\n <T extends vBase>(e1: T, e2: T): T => sub(e1, mul(2 * dot(e2, e1), e2)),\n // GPU implementation\n (e1, e2) => {\n return {\n value: `reflect(${e1.value}, ${e2.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const distance = createDualImpl(\n // CPU implementation\n <T extends vBase | number>(a: T, b: T): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b);\n }\n return length(sub(a as vBase, b as vBase)) as number;\n },\n // GPU implementation\n (a, b) => ({ value: `distance(${a.value}, ${b.value})`, dataType: f32 }),\n);\n\n/**\n * Checks whether the given elements differ by at most 0.01.\n * Component-wise if arguments are vectors.\n * @example\n * isCloseTo(0, 0.1) // returns false\n * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true\n *\n * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.\n */\nexport const isCloseTo = createDualImpl(\n // CPU implementation\n <T extends v2f | v3f | v4f | v2h | v3h | v4h | number>(\n e1: T,\n e2: T,\n precision = 0.01,\n ) => {\n if (typeof e1 === 'number' && typeof e2 === 'number') {\n return Math.abs(e1 - e2) < precision;\n }\n if (typeof e1 !== 'number' && typeof e2 !== 'number') {\n return VectorOps.isCloseToZero[e1.kind](sub(e1, e2), precision);\n }\n return false;\n },\n // GPU implementation\n (e1, e2, precision = { value: 0.01, dataType: f32 }) => {\n if (isNumeric(e1) && isNumeric(e2)) {\n return {\n value: `abs(f32(${e1.value})-f32(${e2.value})) <= ${precision.value}`,\n dataType: bool,\n };\n }\n if (!isNumeric(e1) && !isNumeric(e2)) {\n return {\n // https://www.w3.org/TR/WGSL/#vector-multi-component:~:text=Binary%20arithmetic%20expressions%20with%20mixed%20scalar%20and%20vector%20operands\n // (a-a)+prec creates a vector of a.length elements, all equal to prec\n value: `all(abs(${e1.value}-${e2.value}) <= (${e1.value} - ${e1.value})+${precision.value})`,\n dataType: bool,\n };\n }\n return {\n value: 'false',\n dataType: bool,\n };\n },\n);\n","import { type atomicI32, type atomicU32, isWgslData } from '../data/wgslTypes';\nimport { createDualImpl } from '../shared/generators';\nimport { Void } from '../types';\n\ntype AnyAtomic = atomicI32 | atomicU32;\n\nexport const workgroupBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('workgroupBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'workgroupBarrier()', dataType: Void }),\n);\n\nexport const storageBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('storageBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'storageBarrier()', dataType: Void }),\n);\n\nexport const textureBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('textureBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'textureBarrier()', dataType: Void }),\n);\n\nexport const atomicLoad = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return { value: `atomicLoad(&${a.value})`, dataType: a.dataType.inner };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicStore = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): void => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (!isWgslData(a.dataType) || a.dataType.type !== 'atomic') {\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n }\n return {\n value: `atomicStore(&${a.value}, ${value.value})`,\n dataType: Void,\n };\n },\n);\n\nexport const atomicAdd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAdd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicSub = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicSub(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMax = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMax(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMin = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMin(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicAnd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAnd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicOr = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicOr(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicXor = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicXor(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n","import { u32 } from '../data/numeric';\nimport { createDualImpl } from '../shared/generators';\n\nexport const arrayLength = createDualImpl(\n // CPU implementation\n (a: unknown[]) => a.length,\n // GPU implementation\n (a) => ({ value: `arrayLength(&${a.value})`, dataType: u32 }),\n);\n"],"mappings":"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dD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAA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","names":["discard","createDualImpl","Void","lengthVec2","v","lengthVec3","lengthVec4","dotVec2","lhs","rhs","dotVec3","dotVec4","clamp","value","low","high","unary2f","op","a","vec2f","unary2h","vec2h","unary2i","vec2i","unary2u","vec2u","unary3f","vec3f","unary3h","vec3h","unary3i","vec3i","unary3u","vec3u","unary4f","vec4f","unary4h","vec4h","unary4i","vec4i","unary4u","vec4u","binaryComponentWise2f","b","binaryComponentWise2h","binaryComponentWise2i","binaryComponentWise2u","binaryComponentWise3f","binaryComponentWise3h","binaryComponentWise3i","binaryComponentWise3u","binaryComponentWise4f","binaryComponentWise4h","binaryComponentWise4i","binaryComponentWise4u","VectorOps","s","m","m_","mat2x2f","mat3x3f","mat4x4f","a_","b_","len","base","exponent","e1","e2","e3","n","isNumeric","element","type","add","createDualImpl","lhs","rhs","VectorOps","sub","mul","s","v","sIsVector","vIsVector","returnType","abs","value","atan2","y","x","acos","asin","ceil","clamp","low","high","cos","cross","a","b","dot","f32","normalize","floor","fract","length","max","min","sin","exp","pow","base","exponent","mix","e1","e2","e3","reflect","distance","isCloseTo","precision","bool","workgroupBarrier","createDualImpl","Void","storageBarrier","textureBarrier","atomicLoad","a","isWgslData","atomicStore","value","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","arrayLength","createDualImpl","a","u32"]}
1
+ {"version":3,"sources":["../../src/std/discard.ts","../../src/data/vectorOps.ts","../../src/std/numeric.ts","../../src/std/boolean.ts","../../src/std/atomic.ts","../../src/std/array.ts"],"sourcesContent":["import { createDualImpl } from '../shared/generators.js';\nimport { Void } from '../types.js';\n\nexport const discard = createDualImpl(\n // CPU\n (): never => {\n throw new Error('discard() can only be used on the GPU.');\n },\n // GPU\n () => ({\n value: 'discard;',\n dataType: Void,\n }),\n);\n","import { mat2x2f, mat3x3f, mat4x4f } from './matrix';\nimport {\n vec2b,\n vec2f,\n vec2h,\n vec2i,\n vec2u,\n vec3b,\n vec3f,\n vec3h,\n vec3i,\n vec3u,\n vec4b,\n vec4f,\n vec4h,\n vec4i,\n vec4u,\n} from './vector';\nimport type * as wgsl from './wgslTypes';\nimport type { VecKind } from './wgslTypes';\n\ntype vBase = { kind: VecKind };\ntype v2 = wgsl.v2f | wgsl.v2h | wgsl.v2i | wgsl.v2u;\ntype v3 = wgsl.v3f | wgsl.v3h | wgsl.v3i | wgsl.v3u;\ntype v4 = wgsl.v4f | wgsl.v4h | wgsl.v4i | wgsl.v4u;\n\ntype MatKind = 'mat2x2f' | 'mat3x3f' | 'mat4x4f';\n\nconst lengthVec2 = (v: v2) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: v3) => Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: v4) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nconst dotVec2 = (lhs: v2, rhs: v2) => lhs.x * rhs.x + lhs.y * rhs.y;\nconst dotVec3 = (lhs: v3, rhs: v3) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;\nconst dotVec4 = (lhs: v4, rhs: v4) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w;\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(low, value), high);\n\ntype UnaryOp = (a: number) => number;\ntype BinaryOp = (a: number, b: number) => number;\n\nconst unary2f = (op: UnaryOp) => (a: wgsl.v2f) => vec2f(op(a.x), op(a.y));\nconst unary2h = (op: UnaryOp) => (a: wgsl.v2h) => vec2h(op(a.x), op(a.y));\nconst unary2i = (op: UnaryOp) => (a: wgsl.v2i) => vec2i(op(a.x), op(a.y));\nconst unary2u = (op: UnaryOp) => (a: wgsl.v2u) => vec2u(op(a.x), op(a.y));\n\nconst unary3f = (op: UnaryOp) => (a: wgsl.v3f) =>\n vec3f(op(a.x), op(a.y), op(a.z));\n\nconst unary3h = (op: UnaryOp) => (a: wgsl.v3h) =>\n vec3h(op(a.x), op(a.y), op(a.z));\n\nconst unary3i = (op: UnaryOp) => (a: wgsl.v3i) =>\n vec3i(op(a.x), op(a.y), op(a.z));\n\nconst unary3u = (op: UnaryOp) => (a: wgsl.v3u) =>\n vec3u(op(a.x), op(a.y), op(a.z));\n\nconst unary4f = (op: UnaryOp) => (a: wgsl.v4f) =>\n vec4f(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4h = (op: UnaryOp) => (a: wgsl.v4h) =>\n vec4h(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4i = (op: UnaryOp) => (a: wgsl.v4i) =>\n vec4i(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4u = (op: UnaryOp) => (a: wgsl.v4u) =>\n vec4u(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst binaryComponentWise2f = (op: BinaryOp) => (a: wgsl.v2f, b: wgsl.v2f) =>\n vec2f(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2h = (op: BinaryOp) => (a: wgsl.v2h, b: wgsl.v2h) =>\n vec2h(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2i = (op: BinaryOp) => (a: wgsl.v2i, b: wgsl.v2i) =>\n vec2i(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2u = (op: BinaryOp) => (a: wgsl.v2u, b: wgsl.v2u) =>\n vec2u(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise3f = (op: BinaryOp) => (a: wgsl.v3f, b: wgsl.v3f) =>\n vec3f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3h = (op: BinaryOp) => (a: wgsl.v3h, b: wgsl.v3h) =>\n vec3h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3i = (op: BinaryOp) => (a: wgsl.v3i, b: wgsl.v3i) =>\n vec3i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3u = (op: BinaryOp) => (a: wgsl.v3u, b: wgsl.v3u) =>\n vec3u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise4f = (op: BinaryOp) => (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4h = (op: BinaryOp) => (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4i = (op: BinaryOp) => (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4u = (op: BinaryOp) => (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nexport const VectorOps = {\n eq: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x === e2.x, e1.y === e2.y),\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x === e2.x, e1.y === e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b\n >,\n\n lt: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x < e2.x, e1.y < e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyNumericVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b\n >,\n\n neg: {\n 'vec2<bool>': (e: wgsl.v2b) => vec2b(!e.x, !e.y),\n 'vec3<bool>': (e: wgsl.v3b) => vec3b(!e.x, !e.y, !e.z),\n 'vec4<bool>': (e: wgsl.v4b) => vec4b(!e.x, !e.y, !e.z, !e.w),\n } as Record<VecKind, <T extends wgsl.AnyBooleanVecInstance>(v: T) => T>,\n\n or: {\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x || e2.x, e1.y || e2.y),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z, e1.w || e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyBooleanVecInstance>(e1: T, e2: T) => T\n >,\n\n all: {\n 'vec2<bool>': (e: wgsl.v2b) => e.x && e.y,\n 'vec3<bool>': (e: wgsl.v3b) => e.x && e.y && e.z,\n 'vec4<bool>': (e: wgsl.v4b) => e.x && e.y && e.z && e.w,\n } as Record<VecKind, (v: wgsl.AnyBooleanVecInstance) => boolean>,\n\n abs: {\n vec2f: unary2f(Math.abs),\n vec2h: unary2h(Math.abs),\n vec2i: unary2i(Math.abs),\n vec2u: unary2u(Math.abs),\n\n vec3f: unary3f(Math.abs),\n vec3h: unary3h(Math.abs),\n vec3i: unary3i(Math.abs),\n vec3u: unary3u(Math.abs),\n\n vec4f: unary4f(Math.abs),\n vec4h: unary4h(Math.abs),\n vec4i: unary4i(Math.abs),\n vec4u: unary4u(Math.abs),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atan2: {\n vec2f: binaryComponentWise2f(Math.atan2),\n vec2h: binaryComponentWise2h(Math.atan2),\n\n vec3f: binaryComponentWise3f(Math.atan2),\n vec3h: binaryComponentWise3h(Math.atan2),\n\n vec4f: binaryComponentWise4f(Math.atan2),\n vec4h: binaryComponentWise4h(Math.atan2),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n acos: {\n vec2f: unary2f(Math.acos),\n vec2h: unary2h(Math.acos),\n vec2i: unary2i(Math.acos),\n vec2u: unary2u(Math.acos),\n\n vec3f: unary3f(Math.acos),\n vec3h: unary3h(Math.acos),\n vec3i: unary3i(Math.acos),\n vec3u: unary3u(Math.acos),\n\n vec4f: unary4f(Math.acos),\n vec4h: unary4h(Math.acos),\n vec4i: unary4i(Math.acos),\n vec4u: unary4u(Math.acos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asin: {\n vec2f: unary2f(Math.asin),\n vec2h: unary2h(Math.asin),\n vec2i: unary2i(Math.asin),\n vec2u: unary2u(Math.asin),\n\n vec3f: unary3f(Math.asin),\n vec3h: unary3h(Math.asin),\n vec3i: unary3i(Math.asin),\n vec3u: unary3u(Math.asin),\n\n vec4f: unary4f(Math.asin),\n vec4h: unary4h(Math.asin),\n vec4i: unary4i(Math.asin),\n vec4u: unary4u(Math.asin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n ceil: {\n vec2f: unary2f(Math.ceil),\n vec2h: unary2h(Math.ceil),\n\n vec3f: unary3f(Math.ceil),\n vec3h: unary3h(Math.ceil),\n\n vec4f: unary4f(Math.ceil),\n vec4h: unary4h(Math.ceil),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n clamp: {\n vec2f: (v: wgsl.v2f, low: wgsl.v2f, high: wgsl.v2f) =>\n vec2f(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2h: (v: wgsl.v2h, low: wgsl.v2h, high: wgsl.v2h) =>\n vec2h(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2i: (v: wgsl.v2i, low: wgsl.v2i, high: wgsl.v2i) =>\n vec2i(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2u: (v: wgsl.v2u, low: wgsl.v2u, high: wgsl.v2u) =>\n vec2u(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n\n vec3f: (v: wgsl.v3f, low: wgsl.v3f, high: wgsl.v3f) =>\n vec3f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3h: (v: wgsl.v3h, low: wgsl.v3h, high: wgsl.v3h) =>\n vec3h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3i: (v: wgsl.v3i, low: wgsl.v3i, high: wgsl.v3f) =>\n vec3i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3u: (v: wgsl.v3u, low: wgsl.v3u, high: wgsl.v3f) =>\n vec3u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n\n vec4f: (v: wgsl.v4f, low: wgsl.v4f, high: wgsl.v4f) =>\n vec4f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4h: (v: wgsl.v4h, low: wgsl.v4h, high: wgsl.v4h) =>\n vec4h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4i: (v: wgsl.v4i, low: wgsl.v4i, high: wgsl.v4i) =>\n vec4i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4u: (v: wgsl.v4u, low: wgsl.v4u, high: wgsl.v4u) =>\n vec4u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n } as Record<VecKind, <T extends vBase>(v: T, low: T, high: T) => T>,\n\n length: {\n vec2f: lengthVec2,\n vec2h: lengthVec2,\n\n vec3f: lengthVec3,\n vec3h: lengthVec3,\n\n vec4f: lengthVec4,\n vec4h: lengthVec4,\n } as Record<VecKind, (v: vBase) => number>,\n\n add: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x + b.x, a.y + b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x - b.x, a.y - b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n mulSxV: {\n vec2f: (s: number, v: wgsl.v2f) => vec2f(s * v.x, s * v.y),\n vec2h: (s: number, v: wgsl.v2h) => vec2h(s * v.x, s * v.y),\n vec2i: (s: number, v: wgsl.v2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: wgsl.v2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: wgsl.v3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3h: (s: number, v: wgsl.v3h) => vec3h(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: wgsl.v3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: wgsl.v3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: wgsl.v4f) =>\n vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4h: (s: number, v: wgsl.v4h) =>\n vec4h(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: wgsl.v4i) =>\n vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: wgsl.v4u) =>\n vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n\n mat2x2f: (s: number, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return mat2x2f(s * m_[0].x, s * m_[0].y, s * m_[1].x, s * m_[1].y);\n },\n\n mat3x3f: (s: number, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return mat3x3f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n );\n },\n\n mat4x4f: (s: number, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return mat4x4f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n s * m_[0].w,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n s * m_[1].w,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n s * m_[2].w,\n\n s * m_[3].x,\n s * m_[3].y,\n s * m_[3].z,\n s * m_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(s: number, v: T) => T\n >,\n\n mulVxV: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x * b.x, a.y * b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x * b.x, a.y * b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x * b.x, a.y * b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x * b.x, a.y * b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x * b.x, a.y * b.y, a.z * b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n\n mat2x2f: (a: wgsl.m2x2f, b: wgsl.m2x2f) => {\n const a_ = a.columns as [wgsl.v2f, wgsl.v2f];\n const b_ = b.columns as [wgsl.v2f, wgsl.v2f];\n\n return mat2x2f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y,\n );\n },\n\n mat3x3f: (a: wgsl.m3x3f, b: wgsl.m3x3f) => {\n const a_ = a.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n const b_ = b.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n\n return mat3x3f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y + a_[2].x * b_[0].z,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y + a_[2].y * b_[0].z,\n a_[0].z * b_[0].x + a_[1].z * b_[0].y + a_[2].z * b_[0].z,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y + a_[2].x * b_[1].z,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y + a_[2].y * b_[1].z,\n a_[0].z * b_[1].x + a_[1].z * b_[1].y + a_[2].z * b_[1].z,\n\n a_[0].x * b_[2].x + a_[1].x * b_[2].y + a_[2].x * b_[2].z,\n a_[0].y * b_[2].x + a_[1].y * b_[2].y + a_[2].y * b_[2].z,\n a_[0].z * b_[2].x + a_[1].z * b_[2].y + a_[2].z * b_[2].z,\n );\n },\n\n mat4x4f: (a: wgsl.m4x4f, b: wgsl.m4x4f) => {\n const a_ = a.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n const b_ = b.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n\n return mat4x4f(\n a_[0].x * b_[0].x +\n a_[1].x * b_[0].y +\n a_[2].x * b_[0].z +\n a_[3].x * b_[0].w,\n a_[0].y * b_[0].x +\n a_[1].y * b_[0].y +\n a_[2].y * b_[0].z +\n a_[3].y * b_[0].w,\n a_[0].z * b_[0].x +\n a_[1].z * b_[0].y +\n a_[2].z * b_[0].z +\n a_[3].z * b_[0].w,\n a_[0].w * b_[0].x +\n a_[1].w * b_[0].y +\n a_[2].w * b_[0].z +\n a_[3].w * b_[0].w,\n\n a_[0].x * b_[1].x +\n a_[1].x * b_[1].y +\n a_[2].x * b_[1].z +\n a_[3].x * b_[1].w,\n a_[0].y * b_[1].x +\n a_[1].y * b_[1].y +\n a_[2].y * b_[1].z +\n a_[3].y * b_[1].w,\n a_[0].z * b_[1].x +\n a_[1].z * b_[1].y +\n a_[2].z * b_[1].z +\n a_[3].z * b_[1].w,\n a_[0].w * b_[1].x +\n a_[1].w * b_[1].y +\n a_[2].w * b_[1].z +\n a_[3].w * b_[1].w,\n\n a_[0].x * b_[2].x +\n a_[1].x * b_[2].y +\n a_[2].x * b_[2].z +\n a_[3].x * b_[2].w,\n a_[0].y * b_[2].x +\n a_[1].y * b_[2].y +\n a_[2].y * b_[2].z +\n a_[3].y * b_[2].w,\n a_[0].z * b_[2].x +\n a_[1].z * b_[2].y +\n a_[2].z * b_[2].z +\n a_[3].z * b_[2].w,\n a_[0].w * b_[2].x +\n a_[1].w * b_[2].y +\n a_[2].w * b_[2].z +\n a_[3].w * b_[2].w,\n\n a_[0].x * b_[3].x +\n a_[1].x * b_[3].y +\n a_[2].x * b_[3].z +\n a_[3].x * b_[3].w,\n a_[0].y * b_[3].x +\n a_[1].y * b_[3].y +\n a_[2].y * b_[3].z +\n a_[3].y * b_[3].w,\n a_[0].z * b_[3].x +\n a_[1].z * b_[3].y +\n a_[2].z * b_[3].z +\n a_[3].z * b_[3].w,\n a_[0].w * b_[3].x +\n a_[1].w * b_[3].y +\n a_[2].w * b_[3].z +\n a_[3].w * b_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(lhs: T, rhs: T) => T\n >,\n\n mulMxV: {\n mat2x2f: (m: wgsl.m2x2f, v: wgsl.v2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n m_[0].x * v.x + m_[1].x * v.y,\n m_[0].y * v.x + m_[1].y * v.y,\n );\n },\n\n mat3x3f: (m: wgsl.m3x3f, v: wgsl.v3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z,\n );\n },\n\n mat4x4f: (m: wgsl.m4x4f, v: wgsl.v4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z + m_[3].x * v.w,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z + m_[3].y * v.w,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z + m_[3].z * v.w,\n m_[0].w * v.x + m_[1].w * v.y + m_[2].w * v.z + m_[3].w * v.w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n m: T,\n v: wgsl.vBaseForMat<T>,\n ) => wgsl.vBaseForMat<T>\n >,\n\n mulVxM: {\n mat2x2f: (v: wgsl.v2f, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n v.x * m_[0].x + v.y * m_[0].y,\n v.x * m_[1].x + v.y * m_[1].y,\n );\n },\n\n mat3x3f: (v: wgsl.v3f, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z,\n );\n },\n\n mat4x4f: (v: wgsl.v4f, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z + v.w * m_[0].w,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z + v.w * m_[1].w,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z + v.w * m_[2].w,\n v.x * m_[3].x + v.y * m_[3].y + v.z * m_[3].z + v.w * m_[3].w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n v: wgsl.vBaseForMat<T>,\n m: T,\n ) => wgsl.vBaseForMat<T>\n >,\n\n dot: {\n vec2f: dotVec2,\n vec2h: dotVec2,\n vec2i: dotVec2,\n vec2u: dotVec2,\n vec3f: dotVec3,\n vec3h: dotVec3,\n vec3i: dotVec3,\n vec3u: dotVec3,\n vec4f: dotVec4,\n vec4h: dotVec4,\n vec4i: dotVec4,\n vec4u: dotVec4,\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: wgsl.v2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2h: (v: wgsl.v2h) => {\n const len = lengthVec2(v);\n return vec2h(v.x / len, v.y / len);\n },\n vec2i: (v: wgsl.v2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: wgsl.v2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: wgsl.v3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3h: (v: wgsl.v3h) => {\n const len = lengthVec3(v);\n return vec3h(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: wgsl.v3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: wgsl.v3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: wgsl.v4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4h: (v: wgsl.v4h) => {\n const len = lengthVec4(v);\n return vec4h(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: wgsl.v4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: wgsl.v4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => {\n return vec3h(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3h',\n <T extends wgsl.v3f | wgsl.v3h>(a: T, b: T) => T\n >,\n\n floor: {\n vec2f: unary2f(Math.floor),\n vec2h: unary2h(Math.floor),\n\n vec3f: unary3f(Math.floor),\n vec3h: unary3h(Math.floor),\n\n vec4f: unary4f(Math.floor),\n vec4h: unary4h(Math.floor),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n max: {\n vec2f: binaryComponentWise2f(Math.max),\n vec2h: binaryComponentWise2h(Math.max),\n vec2i: binaryComponentWise2i(Math.max),\n vec2u: binaryComponentWise2u(Math.max),\n\n vec3f: binaryComponentWise3f(Math.max),\n vec3h: binaryComponentWise3h(Math.max),\n vec3i: binaryComponentWise3i(Math.max),\n vec3u: binaryComponentWise3u(Math.max),\n\n vec4f: binaryComponentWise4f(Math.max),\n vec4h: binaryComponentWise4h(Math.max),\n vec4i: binaryComponentWise4i(Math.max),\n vec4u: binaryComponentWise4u(Math.max),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n min: {\n vec2f: binaryComponentWise2f(Math.min),\n vec2h: binaryComponentWise2h(Math.min),\n vec2i: binaryComponentWise2i(Math.min),\n vec2u: binaryComponentWise2u(Math.min),\n\n vec3f: binaryComponentWise3f(Math.min),\n vec3h: binaryComponentWise3h(Math.min),\n vec3i: binaryComponentWise3i(Math.min),\n vec3u: binaryComponentWise3u(Math.min),\n\n vec4f: binaryComponentWise4f(Math.min),\n vec4h: binaryComponentWise4h(Math.min),\n vec4i: binaryComponentWise4i(Math.min),\n vec4u: binaryComponentWise4u(Math.min),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n pow: {\n vec2f: (base: wgsl.v2f, exponent: wgsl.v2f) =>\n vec2f(base.x ** exponent.x, base.y ** exponent.y),\n vec2h: (base: wgsl.v2h, exponent: wgsl.v2h) =>\n vec2h(base.x ** exponent.x, base.y ** exponent.y),\n\n vec3f: (base: wgsl.v3f, exponent: wgsl.v3f) =>\n vec3f(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n vec3h: (base: wgsl.v3h, exponent: wgsl.v3h) =>\n vec3h(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n\n vec4f: (base: wgsl.v4f, exponent: wgsl.v4f) =>\n vec4f(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n vec4h: (base: wgsl.v4h, exponent: wgsl.v4h) =>\n vec4h(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h' | 'number',\n <T extends wgsl.AnyFloatVecInstance | number>(a: T, b: T) => T\n >,\n\n mix: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f, e3: wgsl.v2f | number) => {\n if (typeof e3 === 'number') {\n return vec2f(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h, e3: wgsl.v2h | number) => {\n if (typeof e3 === 'number') {\n return vec2h(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f, e3: wgsl.v3f | number) => {\n if (typeof e3 === 'number') {\n return vec3f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h, e3: wgsl.v3h | number) => {\n if (typeof e3 === 'number') {\n return vec3h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f, e3: wgsl.v4f | number) => {\n if (typeof e3 === 'number') {\n return vec4f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h, e3: wgsl.v4h | number) => {\n if (typeof e3 === 'number') {\n return vec4h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h',\n <T extends wgsl.v2f | wgsl.v3f | wgsl.v4f | wgsl.v2h | wgsl.v3h | wgsl.v4h>(\n a: T,\n b: T,\n c: T | number,\n ) => T\n >,\n\n sin: {\n vec2f: unary2f(Math.sin),\n vec2h: unary2h(Math.sin),\n\n vec3f: unary3f(Math.sin),\n vec3h: unary3h(Math.sin),\n\n vec4f: unary4f(Math.sin),\n vec4h: unary4h(Math.sin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cos: {\n vec2f: unary2f(Math.cos),\n vec2h: unary2h(Math.cos),\n\n vec3f: unary3f(Math.cos),\n vec3h: unary3h(Math.cos),\n\n vec4f: unary4f(Math.cos),\n vec4h: unary4h(Math.cos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n exp: {\n vec2f: unary2f(Math.exp),\n vec2h: unary2h(Math.exp),\n\n vec3f: unary3f(Math.exp),\n vec3h: unary3h(Math.exp),\n\n vec4f: unary4f(Math.exp),\n vec4h: unary4h(Math.exp),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n fract: {\n vec2f: unary2f((value) => value - Math.floor(value)),\n vec2h: unary2h((value) => value - Math.floor(value)),\n\n vec3f: unary3f((value) => value - Math.floor(value)),\n vec3h: unary3h((value) => value - Math.floor(value)),\n\n vec4f: unary4f((value) => value - Math.floor(value)),\n vec4h: unary4h((value) => value - Math.floor(value)),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n isCloseToZero: {\n vec2f: (v: wgsl.v2f, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n vec2h: (v: wgsl.v2h, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n\n vec3f: (v: wgsl.v3f, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n vec3h: (v: wgsl.v3h, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n\n vec4f: (v: wgsl.v4f, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n vec4h: (v: wgsl.v4h, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n } as Record<VecKind, <T extends vBase>(v: T, n: number) => boolean>,\n\n select: {\n vec2f: (f: wgsl.v2f, t: wgsl.v2f, c: wgsl.v2b) =>\n vec2f(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2h: (f: wgsl.v2h, t: wgsl.v2h, c: wgsl.v2b) =>\n vec2h(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2i: (f: wgsl.v2i, t: wgsl.v2i, c: wgsl.v2b) =>\n vec2i(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2u: (f: wgsl.v2u, t: wgsl.v2u, c: wgsl.v2b) =>\n vec2u(c.x ? t.x : f.x, c.y ? t.y : f.y),\n 'vec2<bool>': (f: wgsl.v2b, t: wgsl.v2b, c: wgsl.v2b) =>\n vec2b(c.x ? t.x : f.x, c.y ? t.y : f.y),\n\n vec3f: (f: wgsl.v3f, t: wgsl.v3f, c: wgsl.v3b) =>\n vec3f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3h: (f: wgsl.v3h, t: wgsl.v3h, c: wgsl.v3b) =>\n vec3h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3i: (f: wgsl.v3i, t: wgsl.v3i, c: wgsl.v3b) =>\n vec3i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3u: (f: wgsl.v3u, t: wgsl.v3u, c: wgsl.v3b) =>\n vec3u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n 'vec3<bool>': (f: wgsl.v3b, t: wgsl.v3b, c: wgsl.v3b) =>\n vec3b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n\n vec4f: (f: wgsl.v4f, t: wgsl.v4f, c: wgsl.v4b) =>\n vec4f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4h: (f: wgsl.v4h, t: wgsl.v4h, c: wgsl.v4b) =>\n vec4h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4i: (f: wgsl.v4i, t: wgsl.v4i, c: wgsl.v4b) =>\n vec4i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4u: (f: wgsl.v4u, t: wgsl.v4u, c: wgsl.v4b) =>\n vec4u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n 'vec4<bool>': (f: wgsl.v4b, t: wgsl.v4b, c: wgsl.v4b) =>\n vec4b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n f: T,\n t: T,\n c: T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b,\n ) => T\n >,\n};\n","import { f32 } from '../data/numeric';\nimport { VectorOps } from '../data/vectorOps';\nimport type {\n AnyFloatVecInstance,\n AnyMatInstance,\n AnyNumericVecInstance,\n AnyWgslData,\n v3f,\n v3h,\n vBaseForMat,\n} from '../data/wgslTypes';\nimport { createDualImpl } from '../shared/generators';\nimport type { Resource } from '../types';\n\nexport function isNumeric(element: Resource) {\n const type = element.dataType.type;\n return (\n type === 'abstractInt' ||\n type === 'abstractFloat' ||\n type === 'f32' ||\n type === 'f16' ||\n type === 'i32' ||\n type === 'u32'\n );\n}\n\nexport const add = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} + ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\nexport const sub = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} - ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\ntype MulOverload = {\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;\n <T extends AnyNumericVecInstance | AnyMatInstance>(s: number | T, v: T): T;\n};\n\nexport const mul: MulOverload = createDualImpl(\n // CPU implementation\n (\n s: number | AnyNumericVecInstance | AnyMatInstance,\n v: AnyNumericVecInstance | AnyMatInstance,\n ): AnyNumericVecInstance | AnyMatInstance => {\n if (typeof s === 'number') {\n // Scalar * Vector/Matrix case\n return VectorOps.mulSxV[v.kind](s, v);\n }\n if (\n typeof s === 'object' &&\n typeof v === 'object' &&\n 'kind' in s &&\n 'kind' in v\n ) {\n const sIsVector = !s.kind.startsWith('mat');\n const vIsVector = !v.kind.startsWith('mat');\n if (!sIsVector && vIsVector) {\n // Matrix * Vector case\n return VectorOps.mulMxV[(s as AnyMatInstance).kind](\n s as AnyMatInstance,\n v as vBaseForMat<AnyMatInstance>,\n );\n }\n if (sIsVector && !vIsVector) {\n // Vector * Matrix case\n return VectorOps.mulVxM[(v as AnyMatInstance).kind](\n s as vBaseForMat<AnyMatInstance>,\n v as AnyMatInstance,\n );\n }\n }\n // Vector * Vector or Matrix * Matrix case\n return VectorOps.mulVxV[v.kind](s, v);\n },\n // GPU implementation\n (s, v) => {\n const returnType = isNumeric(s)\n ? // Scalar * Vector/Matrix\n (v.dataType as AnyWgslData)\n : !s.dataType.type.startsWith('mat')\n ? // Vector * Matrix\n (s.dataType as AnyWgslData)\n : !v.dataType.type.startsWith('mat')\n ? // Matrix * Vector\n (v.dataType as AnyWgslData)\n : // Vector * Vector or Matrix * Matrix\n (s.dataType as AnyWgslData);\n return { value: `(${s.value} * ${v.value})`, dataType: returnType };\n },\n);\n\nexport const abs = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.abs(value) as T;\n }\n return VectorOps.abs[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `abs(${value.value})`, dataType: value.dataType }),\n);\n\nexport const atan2 = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(y: T, x: T): T => {\n if (typeof y === 'number' && typeof x === 'number') {\n return Math.atan2(y, x) as T;\n }\n return VectorOps.atan2[(y as AnyFloatVecInstance).kind](\n y as never,\n x as never,\n ) as T;\n },\n // GPU implementation\n (y, x) => ({ value: `atan2(${y.value}, ${x.value})`, dataType: y.dataType }),\n);\n\nexport const acos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.acos(value) as T;\n }\n return VectorOps.acos[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `acos(${value.value})`, dataType: value.dataType }),\n);\n\nexport const asin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.asin(value) as T;\n }\n return VectorOps.asin[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `asin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#ceil-builtin\n */\nexport const ceil = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.ceil(value) as T;\n }\n return VectorOps.ceil[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `ceil(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#clamp\n */\nexport const clamp = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T, low: T, high: T): T => {\n if (typeof value === 'number') {\n return Math.min(Math.max(low as number, value), high as number) as T;\n }\n return VectorOps.clamp[value.kind](\n value,\n low as AnyNumericVecInstance,\n high as AnyNumericVecInstance,\n ) as T;\n },\n // GPU implementation\n (value, low, high) => {\n return {\n value: `clamp(${value.value}, ${low.value}, ${high.value})`,\n dataType: value.dataType,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cos-builtin\n */\nexport const cos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.cos(value) as T;\n }\n return VectorOps.cos[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `cos(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cross-builtin\n */\nexport const cross = createDualImpl(\n // CPU implementation\n <T extends v3f | v3h>(a: T, b: T): T => VectorOps.cross[a.kind](a, b),\n // GPU implementation\n (a, b) => ({ value: `cross(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#dot-builtin\n */\nexport const dot = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({ value: `dot(${lhs.value}, ${rhs.value})`, dataType: f32 }),\n);\n\nexport const normalize = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(v: T): T => VectorOps.normalize[v.kind](v),\n // GPU implementation\n (v) => ({ value: `normalize(${v.value})`, dataType: v.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#floor-builtin\n */\nexport const floor = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.floor(value) as T;\n }\n return VectorOps.floor[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `floor(${value.value})`, dataType: value.dataType }),\n);\n\nexport const fract = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T): T => {\n if (typeof a === 'number') {\n return (a - Math.floor(a)) as T;\n }\n return VectorOps.fract[a.kind](a) as T;\n },\n // GPU implementation\n (a) => ({ value: `fract(${a.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#length-builtin\n */\nexport const length = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): number => {\n if (typeof value === 'number') {\n return Math.abs(value);\n }\n return VectorOps.length[value.kind](value);\n },\n // GPU implementation\n (value) => ({ value: `length(${value.value})`, dataType: f32 }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#max-float-builtin\n */\nexport const max = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.max(a, b as number) as T;\n }\n return VectorOps.max[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `max(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#min-float-builtin\n */\nexport const min = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.min(a, b as number) as T;\n }\n return VectorOps.min[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `min(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#sin-builtin\n */\nexport const sin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.sin(value) as T;\n }\n return VectorOps.sin[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `sin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#exp-builtin\n */\nexport const exp = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.exp(value) as T;\n }\n return VectorOps.exp[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `exp(${value.value})`, dataType: value.dataType }),\n);\n\ntype PowOverload = {\n (base: number, exponent: number): number;\n <T extends AnyFloatVecInstance>(base: T, exponent: T): T;\n};\n\nexport const pow: PowOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(base: T, exponent: T): T => {\n if (typeof base === 'number' && typeof exponent === 'number') {\n return (base ** exponent) as T;\n }\n if (\n typeof base === 'object' &&\n typeof exponent === 'object' &&\n 'kind' in base &&\n 'kind' in exponent\n ) {\n return VectorOps.pow[base.kind](base, exponent) as T;\n }\n throw new Error('Invalid arguments to pow()');\n },\n // GPU implementation\n (base, exponent) => {\n return {\n value: `pow(${base.value}, ${exponent.value})`,\n dataType: base.dataType,\n };\n },\n);\n\ntype MixOverload = {\n (e1: number, e2: number, e3: number): number;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: number): T;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: T): T;\n};\n\nexport const mix: MixOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(e1: T, e2: T, e3: T | number): T => {\n if (typeof e1 === 'number') {\n if (typeof e3 !== 'number' || typeof e2 !== 'number') {\n throw new Error(\n 'When e1 and e2 are numbers, the blend factor must be a number.',\n );\n }\n return (e1 * (1 - e3) + e2 * e3) as T;\n }\n\n if (typeof e1 === 'number' || typeof e2 === 'number') {\n throw new Error('e1 and e2 need to both be vectors of the same kind.');\n }\n\n return VectorOps.mix[e1.kind](e1, e2, e3) as T;\n },\n // GPU implementation\n (e1, e2, e3) => {\n return {\n value: `mix(${e1.value}, ${e2.value}, ${e3.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const reflect = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(e1: T, e2: T): T =>\n sub(e1, mul(2 * dot(e2, e1), e2)),\n // GPU implementation\n (e1, e2) => {\n return {\n value: `reflect(${e1.value}, ${e2.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const distance = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T, b: T): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b);\n }\n return length(\n sub(a as AnyFloatVecInstance, b as AnyFloatVecInstance),\n ) as number;\n },\n // GPU implementation\n (a, b) => ({ value: `distance(${a.value}, ${b.value})`, dataType: f32 }),\n);\n","import { bool, f32, vec2b, vec3b, vec4b } from '../data';\nimport { VectorOps } from '../data/vectorOps';\nimport type {\n AnyBooleanVecInstance,\n AnyFloatVecInstance,\n AnyNumericVecInstance,\n AnyVec2Instance,\n AnyVec3Instance,\n AnyVecInstance,\n ScalarData,\n v2b,\n v3b,\n v4b,\n} from '../data/wgslTypes';\nimport { createDualImpl } from '../shared/generators';\nimport type { Resource } from '../types';\nimport { isNumeric, sub } from './numeric';\n\nfunction correspondingBooleanVectorSchema(value: Resource) {\n if (value.dataType.type.includes('2')) {\n return vec2b;\n }\n if (value.dataType.type.includes('3')) {\n return vec3b;\n }\n return vec4b;\n}\n\n// comparison\n\n/**\n * Checks whether `lhs == rhs` on all components.\n * Equivalent to `all(eq(lhs, rhs))`.\n * @example\n * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false\n * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true\n */\nexport const allEq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => all(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `all(${lhs.value} == ${rhs.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs == rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.\n * @example\n * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)\n * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)\n * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true\n * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true\n */\nexport const eq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n VectorOps.eq[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} == ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs != rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `any`.\n * @example\n * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)\n * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)\n * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true\n */\nexport const ne = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => not(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} != ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs < rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)\n * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)\n * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true\n */\nexport const lt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n VectorOps.lt[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} < ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs <= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)\n * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)\n * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true\n */\nexport const le = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n or(lt(lhs, rhs), eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} <= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs > rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)\n * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)\n * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const gt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n and(not(lt(lhs, rhs)), not(eq(lhs, rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} > ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs >= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)\n * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)\n * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const ge = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) => not(lt(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} >= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n// logical ops\n\n/**\n * Returns **component-wise** `!value`.\n * @example\n * not(vec2b(false, true)) // returns vec2b(true, false)\n * not(vec3b(true, true, false)) // returns vec3b(false, false, true)\n */\nexport const not = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(value: T): T =>\n VectorOps.neg[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `!(${value.value})`,\n dataType: value.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `or` result.\n * @example\n * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)\n * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)\n */\nexport const or = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n VectorOps.or[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} | ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `and` result.\n * @example\n * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)\n * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)\n */\nexport const and = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n not(or(not(lhs), not(rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} & ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n// logical aggregation\n\n/**\n * Returns `true` if each component of `value` is true.\n * @example\n * all(vec2b(false, true)) // returns false\n * all(vec3b(true, true, true)) // returns true\n */\nexport const all = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => VectorOps.all[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `all(${value.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Returns `true` if any component of `value` is true.\n * @example\n * any(vec2b(false, true)) // returns true\n * any(vec3b(false, false, false)) // returns false\n */\nexport const any = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => !all(not(value)),\n // GPU implementation\n (value) => ({\n value: `any(${value.value})`,\n dataType: bool,\n }),\n);\n\n// other\n\n/**\n * Checks whether the given elements differ by at most the `precision` value.\n * Checks all elements of `lhs` and `rhs` if arguments are vectors.\n * @example\n * isCloseTo(0, 0.1) // returns false\n * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true\n *\n * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.\n */\nexport const isCloseTo = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(\n lhs: T,\n rhs: T,\n precision = 0.01,\n ) => {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return Math.abs(lhs - rhs) < precision;\n }\n if (typeof lhs !== 'number' && typeof rhs !== 'number') {\n return VectorOps.isCloseToZero[lhs.kind](sub(lhs, rhs), precision);\n }\n return false;\n },\n // GPU implementation\n (lhs, rhs, precision = { value: 0.01, dataType: f32 }) => {\n if (isNumeric(lhs) && isNumeric(rhs)) {\n return {\n value: `(abs(f32(${lhs.value}) - f32(${rhs.value})) <= ${precision.value})`,\n dataType: bool,\n };\n }\n if (!isNumeric(lhs) && !isNumeric(rhs)) {\n return {\n // https://www.w3.org/TR/WGSL/#vector-multi-component:~:text=Binary%20arithmetic%20expressions%20with%20mixed%20scalar%20and%20vector%20operands\n // (a-a)+prec creates a vector of a.length elements, all equal to prec\n value: `all(abs(${lhs.value} - ${rhs.value}) <= (${lhs.value} - ${lhs.value}) + ${precision.value})`,\n dataType: bool,\n };\n }\n return {\n value: 'false',\n dataType: bool,\n };\n },\n);\n\nexport type SelectOverload = {\n <T extends ScalarData | AnyVecInstance>(f: T, t: T, cond: boolean): T;\n <T extends AnyVecInstance>(\n f: T,\n t: T,\n cond: T extends AnyVec2Instance\n ? v2b\n : T extends AnyVec3Instance\n ? v3b\n : v4b,\n ): T;\n};\n\n/**\n * Returns `t` if `cond` is `true`, and `f` otherwise.\n * Component-wise if `cond` is a vector.\n * @example\n * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)\n * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)\n */\nexport const select: SelectOverload = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance | ScalarData>(\n f: T,\n t: T,\n cond: AnyBooleanVecInstance | boolean,\n ) => {\n if (typeof cond === 'boolean') {\n return cond ? t : f;\n }\n return VectorOps.select[(f as AnyVecInstance).kind](\n f as AnyVecInstance,\n t as AnyVecInstance,\n cond,\n );\n },\n // GPU implementation\n (f, t, cond) => ({\n value: `select(${f.value}, ${t.value}, ${cond.value})`,\n dataType: f.dataType,\n }),\n);\n","import { type atomicI32, type atomicU32, isWgslData } from '../data/wgslTypes';\nimport { createDualImpl } from '../shared/generators';\nimport { Void } from '../types';\n\ntype AnyAtomic = atomicI32 | atomicU32;\n\nexport const workgroupBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('workgroupBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'workgroupBarrier()', dataType: Void }),\n);\n\nexport const storageBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('storageBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'storageBarrier()', dataType: Void }),\n);\n\nexport const textureBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('textureBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'textureBarrier()', dataType: Void }),\n);\n\nexport const atomicLoad = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return { value: `atomicLoad(&${a.value})`, dataType: a.dataType.inner };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicStore = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): void => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (!isWgslData(a.dataType) || a.dataType.type !== 'atomic') {\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n }\n return {\n value: `atomicStore(&${a.value}, ${value.value})`,\n dataType: Void,\n };\n },\n);\n\nexport const atomicAdd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAdd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicSub = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicSub(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMax = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMax(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMin = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMin(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicAnd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAnd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicOr = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicOr(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicXor = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicXor(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n","import { u32 } from '../data/numeric';\nimport { createDualImpl } from '../shared/generators';\n\nexport const arrayLength = createDualImpl(\n // CPU implementation\n (a: unknown[]) => a.length,\n // GPU implementation\n (a) => ({ value: `arrayLength(&${a.value})`, dataType: u32 }),\n);\n"],"mappings":"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EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAA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","names":["discard","createDualImpl","Void","lengthVec2","v","lengthVec3","lengthVec4","dotVec2","lhs","rhs","dotVec3","dotVec4","clamp","value","low","high","unary2f","op","a","vec2f","unary2h","vec2h","unary2i","vec2i","unary2u","vec2u","unary3f","vec3f","unary3h","vec3h","unary3i","vec3i","unary3u","vec3u","unary4f","vec4f","unary4h","vec4h","unary4i","vec4i","unary4u","vec4u","binaryComponentWise2f","b","binaryComponentWise2h","binaryComponentWise2i","binaryComponentWise2u","binaryComponentWise3f","binaryComponentWise3h","binaryComponentWise3i","binaryComponentWise3u","binaryComponentWise4f","binaryComponentWise4h","binaryComponentWise4i","binaryComponentWise4u","VectorOps","e1","e2","vec2b","vec3b","vec4b","s","m","m_","mat2x2f","mat3x3f","mat4x4f","a_","b_","len","base","exponent","e3","n","f","c","isNumeric","element","type","add","createDualImpl","lhs","rhs","VectorOps","sub","mul","s","v","sIsVector","vIsVector","returnType","abs","value","atan2","y","x","acos","asin","ceil","clamp","low","high","cos","cross","a","b","dot","f32","normalize","floor","fract","length","max","min","sin","exp","pow","base","exponent","mix","e1","e2","e3","reflect","distance","correspondingBooleanVectorSchema","value","vec2b","vec3b","vec4b","allEq","createDualImpl","lhs","rhs","all","eq","bool","VectorOps","ne","not","lt","le","or","gt","and","ge","any","isCloseTo","precision","sub","f32","isNumeric","select","f","cond","workgroupBarrier","createDualImpl","Void","storageBarrier","textureBarrier","atomicLoad","a","isWgslData","atomicStore","value","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","arrayLength","createDualImpl","a","u32"]}