typegpu 0.8.2 → 0.9.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/matrix.ts","../src/data/numberOps.ts","../src/data/vectorOps.ts","../src/std/operators.ts","../src/data/texture.ts"],"sourcesContent":["import { comptime } from '../core/function/comptime.ts';\nimport { dualImpl } from '../core/function/dualImpl.ts';\nimport { stitch } from '../core/resolve/stitch.ts';\nimport { $repr } from '../shared/symbols.ts';\nimport { $internal, $resolve } from '../shared/symbols.ts';\nimport type { SelfResolvable } from '../types.ts';\nimport type { AnyData } from './dataTypes.ts';\nimport { f32 } from './numeric.ts';\nimport { type ResolvedSnippet, snip } from './snippet.ts';\nimport { vec2f, vec3f, vec4f } from './vector.ts';\nimport {\n isVec,\n type m2x2f,\n type m3x3f,\n type m4x4f,\n type mat2x2,\n type Mat2x2f,\n type mat3x3,\n type Mat3x3f,\n type mat4x4,\n type Mat4x4f,\n type NumberArrayView,\n type v2f,\n type v3f,\n type v4f,\n type VecKind,\n} from './wgslTypes.ts';\n\n// --------------\n// Implementation\n// --------------\n\ntype vBase = {\n kind: VecKind;\n length: number;\n [n: number]: number;\n};\n\nexport abstract class MatBase<TColumn> implements NumberArrayView {\n abstract readonly [$internal]: true;\n abstract readonly columns: readonly TColumn[];\n\n abstract readonly length: number;\n abstract [Symbol.iterator](): Iterator<number>;\n [n: number]: number;\n}\n\ninterface MatSchemaOptions<TType extends string, ColumnType> {\n type: TType;\n rows: 2 | 3 | 4;\n columns: 2 | 3 | 4;\n MatImpl: new (...args: number[]) => MatBase<ColumnType>;\n}\n\ntype MatConstructor<\n ValueType extends MatBase<ColumnType>,\n ColumnType extends vBase,\n> = (...args: (number | ColumnType)[]) => ValueType;\n\nfunction createMatSchema<\n TType extends string,\n ValueType extends MatBase<ColumnType>,\n ColumnType extends vBase,\n>(\n options: MatSchemaOptions<TType, ColumnType>,\n): { type: TType; [$repr]: ValueType } & MatConstructor<ValueType, ColumnType> {\n const construct = dualImpl({\n name: options.type,\n normalImpl: (...args: (number | ColumnType)[]): ValueType => {\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n for (let i = 0; i < arg.length; ++i) {\n elements.push(arg[i] as number);\n }\n }\n }\n\n if (\n elements.length !== 0 &&\n elements.length !== options.columns * options.rows\n ) {\n throw new Error(\n `'${options.type}' constructor called with invalid number of arguments.`,\n );\n }\n\n for (let i = elements.length; i < options.columns * options.rows; ++i) {\n elements.push(0);\n }\n\n return new options.MatImpl(...elements) as ValueType;\n },\n ignoreImplicitCastWarning: true,\n signature: (...args) => ({\n argTypes: args.map((arg) => (isVec(arg) ? arg : f32)),\n returnType: schema as unknown as AnyData,\n }),\n codegenImpl: (...args) => stitch`${options.type}(${args})`,\n });\n\n const schema = Object.assign(construct, {\n type: options.type,\n identity: identityFunctions[options.columns],\n translation: options.columns === 4 ? translation4 : undefined,\n scaling: options.columns === 4 ? scaling4 : undefined,\n rotationX: options.columns === 4 ? rotationX4 : undefined,\n rotationY: options.columns === 4 ? rotationY4 : undefined,\n rotationZ: options.columns === 4 ? rotationZ4 : undefined,\n }) as unknown as {\n type: TType;\n [$repr]: ValueType;\n } & MatConstructor<ValueType, ColumnType>;\n\n // TODO: Remove workaround\n // it's a workaround for circular dependencies caused by us using schemas in the shader generator\n // biome-ignore lint/suspicious/noExplicitAny: explained above\n (options.MatImpl.prototype as any).schema = schema;\n\n return schema;\n}\n\nabstract class mat2x2Impl<TColumn extends v2f> extends MatBase<TColumn>\n implements mat2x2<TColumn>, SelfResolvable {\n public readonly [$internal] = true;\n public readonly columns: readonly [TColumn, TColumn];\n public readonly length = 4;\n public abstract readonly kind: string;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n super();\n this.columns = [\n this.makeColumn(elements[0] as number, elements[1] as number),\n this.makeColumn(elements[2] as number, elements[3] as number),\n ];\n }\n\n abstract makeColumn(e0: number, e1: number): TColumn;\n\n get 0() {\n return this.columns[0].x;\n }\n\n get 1() {\n return this.columns[0].y;\n }\n\n get 2() {\n return this.columns[1].x;\n }\n\n get 3() {\n return this.columns[1].y;\n }\n\n set 0(value: number) {\n this.columns[0].x = value;\n }\n\n set 1(value: number) {\n this.columns[0].y = value;\n }\n\n set 2(value: number) {\n this.columns[1].x = value;\n }\n\n set 3(value: number) {\n this.columns[1].y = value;\n }\n\n *[Symbol.iterator]() {\n yield this[0];\n yield this[1];\n yield this[2];\n yield this[3];\n }\n\n [$resolve](): ResolvedSnippet {\n return snip(\n `${this.kind}(${\n Array.from({ length: this.length })\n .map((_, i) => this[i])\n .join(', ')\n })`,\n mat2x2f,\n /* origin */ 'runtime',\n );\n }\n\n toString() {\n return this[$resolve]().value;\n }\n}\n\nclass mat2x2fImpl extends mat2x2Impl<v2f> {\n public readonly kind = 'mat2x2f';\n\n makeColumn(e0: number, e1: number): v2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends v3f> extends MatBase<TColumn>\n implements mat3x3<TColumn>, SelfResolvable {\n public readonly [$internal] = true;\n public readonly columns: readonly [TColumn, TColumn, TColumn];\n public readonly length = 12;\n public abstract readonly kind: string;\n [n: number]: number;\n\n constructor(...elements: number[]) {\n super();\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n ),\n this.makeColumn(\n elements[3] as number,\n elements[4] as number,\n elements[5] as number,\n ),\n this.makeColumn(\n elements[6] as number,\n elements[7] as number,\n elements[8] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number): TColumn;\n\n get 0() {\n return this.columns[0].x;\n }\n\n get 1() {\n return this.columns[0].y;\n }\n\n get 2() {\n return this.columns[0].z;\n }\n\n get 3() {\n return 0;\n }\n\n get 4() {\n return this.columns[1].x;\n }\n\n get 5() {\n return this.columns[1].y;\n }\n\n get 6() {\n return this.columns[1].z;\n }\n\n get 7() {\n return 0;\n }\n\n get 8() {\n return this.columns[2].x;\n }\n\n get 9() {\n return this.columns[2].y;\n }\n\n get 10() {\n return this.columns[2].z;\n }\n\n get 11() {\n return 0;\n }\n\n set 0(value: number) {\n this.columns[0].x = value;\n }\n\n set 1(value: number) {\n this.columns[0].y = value;\n }\n\n set 2(value: number) {\n this.columns[0].z = value;\n }\n\n set 3(_: number) {}\n\n set 4(value: number) {\n this.columns[1].x = value;\n }\n\n set 5(value: number) {\n this.columns[1].y = value;\n }\n\n set 6(value: number) {\n this.columns[1].z = value;\n }\n\n set 7(_: number) {}\n\n set 8(value: number) {\n this.columns[2].x = value;\n }\n\n set 9(value: number) {\n this.columns[2].y = value;\n }\n\n set 10(value: number) {\n this.columns[2].z = value;\n }\n\n set 11(_: number) {}\n\n *[Symbol.iterator]() {\n for (let i = 0; i < 12; i++) {\n yield this[i] as number;\n }\n }\n\n [$resolve](): ResolvedSnippet {\n return snip(\n `${this.kind}(${this[0]}, ${this[1]}, ${this[2]}, ${this[4]}, ${\n this[5]\n }, ${this[6]}, ${this[8]}, ${this[9]}, ${this[10]})`,\n mat3x3f,\n /* origin */ 'runtime',\n );\n }\n\n toString() {\n return this[$resolve]().value;\n }\n}\n\nclass mat3x3fImpl extends mat3x3Impl<v3f> {\n public readonly kind = 'mat3x3f';\n makeColumn(x: number, y: number, z: number): v3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends v4f> extends MatBase<TColumn>\n implements mat4x4<TColumn>, SelfResolvable {\n public readonly [$internal] = true;\n public readonly columns: readonly [TColumn, TColumn, TColumn, TColumn];\n public abstract readonly kind: string;\n\n constructor(...elements: number[]) {\n super();\n this.columns = [\n this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n elements[3] as number,\n ),\n this.makeColumn(\n elements[4] as number,\n elements[5] as number,\n elements[6] as number,\n elements[7] as number,\n ),\n this.makeColumn(\n elements[8] as number,\n elements[9] as number,\n elements[10] as number,\n elements[11] as number,\n ),\n this.makeColumn(\n elements[12] as number,\n elements[13] as number,\n elements[14] as number,\n elements[15] as number,\n ),\n ];\n }\n\n abstract makeColumn(x: number, y: number, z: number, w: number): TColumn;\n\n public readonly length = 16;\n [n: number]: number;\n\n get 0() {\n return this.columns[0].x;\n }\n\n get 1() {\n return this.columns[0].y;\n }\n\n get 2() {\n return this.columns[0].z;\n }\n\n get 3() {\n return this.columns[0].w;\n }\n\n get 4() {\n return this.columns[1].x;\n }\n\n get 5() {\n return this.columns[1].y;\n }\n\n get 6() {\n return this.columns[1].z;\n }\n\n get 7() {\n return this.columns[1].w;\n }\n\n get 8() {\n return this.columns[2].x;\n }\n\n get 9() {\n return this.columns[2].y;\n }\n\n get 10() {\n return this.columns[2].z;\n }\n\n get 11() {\n return this.columns[2].w;\n }\n\n get 12() {\n return this.columns[3].x;\n }\n\n get 13() {\n return this.columns[3].y;\n }\n\n get 14() {\n return this.columns[3].z;\n }\n\n get 15() {\n return this.columns[3].w;\n }\n\n set 0(value: number) {\n this.columns[0].x = value;\n }\n\n set 1(value: number) {\n this.columns[0].y = value;\n }\n\n set 2(value: number) {\n this.columns[0].z = value;\n }\n\n set 3(value: number) {\n this.columns[0].w = value;\n }\n\n set 4(value: number) {\n this.columns[1].x = value;\n }\n\n set 5(value: number) {\n this.columns[1].y = value;\n }\n\n set 6(value: number) {\n this.columns[1].z = value;\n }\n\n set 7(value: number) {\n this.columns[1].w = value;\n }\n\n set 8(value: number) {\n this.columns[2].x = value;\n }\n\n set 9(value: number) {\n this.columns[2].y = value;\n }\n\n set 10(value: number) {\n this.columns[2].z = value;\n }\n\n set 11(value: number) {\n this.columns[2].w = value;\n }\n\n set 12(value: number) {\n this.columns[3].x = value;\n }\n\n set 13(value: number) {\n this.columns[3].y = value;\n }\n\n set 14(value: number) {\n this.columns[3].z = value;\n }\n\n set 15(value: number) {\n this.columns[3].w = value;\n }\n\n *[Symbol.iterator]() {\n for (let i = 0; i < 16; i++) {\n yield this[i] as number;\n }\n }\n\n [$resolve](): ResolvedSnippet {\n return snip(\n `${this.kind}(${\n Array.from({ length: this.length })\n .map((_, i) => this[i])\n .join(', ')\n })`,\n mat4x4f,\n /* origin */ 'runtime',\n );\n }\n\n toString() {\n return this[$resolve]().value;\n }\n}\n\nclass mat4x4fImpl extends mat4x4Impl<v4f> {\n public readonly kind = 'mat4x4f';\n\n makeColumn(x: number, y: number, z: number, w: number): v4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Matrix ops\n// ----------\n\n/**\n * Returns a 2-by-2 identity matrix.\n * @returns {m2x2f} The result matrix.\n */\nexport const identity2 = comptime(() => mat2x2f(1, 0, 0, 1)).$name('identity2');\n\n/**\n * Returns a 3-by-3 identity matrix.\n * @returns {m3x3f} The result matrix.\n */\nexport const identity3 = comptime(\n () => mat3x3f(1, 0, 0, 0, 1, 0, 0, 0, 1),\n).$name('identity3');\n\n/**\n * Returns a 4-by-4 identity matrix.\n * @returns {m4x4f} The result matrix.\n */\nexport const identity4 = comptime(\n () => mat4x4f(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),\n).$name('identity4');\n\nconst identityFunctions = {\n 2: identity2,\n 3: identity3,\n 4: identity4,\n};\n\n/**\n * Creates a 4-by-4 matrix which translates by the given vector v.\n * @param {v3f} vector - The vector by which to translate.\n * @returns {m4x4f} The translation matrix.\n */\nexport const translation4 = dualImpl({\n name: 'translation4',\n normalImpl: (vector: v3f) =>\n // deno-fmt-ignore\n mat4x4f(\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n vector.x, vector.y, vector.z, 1,\n ),\n get signature() {\n return { argTypes: [vec3f], returnType: mat4x4f };\n },\n codegenImpl: (v) =>\n stitch`mat4x4f(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, ${v}.x, ${v}.y, ${v}.z, 1)`,\n});\n\n/**\n * Creates a 4-by-4 matrix which scales in each dimension by an amount given by the corresponding entry in the given vector.\n * @param {v3f} vector - A vector of three entries specifying the factor by which to scale in each dimension.\n * @returns {m4x4f} The scaling matrix.\n */\nexport const scaling4 = dualImpl({\n name: 'scaling4',\n normalImpl: (vector: v3f) =>\n // deno-fmt-ignore\n mat4x4f(\n vector.x, 0, 0, 0,\n 0, vector.y, 0, 0,\n 0, 0, vector.z, 0,\n 0, 0, 0, 1,\n ),\n get signature() {\n return { argTypes: [vec3f], returnType: mat4x4f };\n },\n codegenImpl: (v) =>\n stitch`mat4x4f(${v}.x, 0, 0, 0, 0, ${v}.y, 0, 0, 0, 0, ${v}.z, 0, 0, 0, 0, 1)`,\n});\n\n/**\n * Creates a 4-by-4 matrix which rotates around the x-axis by the given angle.\n * @param {number} angle - The angle by which to rotate (in radians).\n * @returns {m4x4f} The rotation matrix.\n */\nexport const rotationX4 = dualImpl({\n name: 'rotationX4',\n normalImpl: (a: number) =>\n // deno-fmt-ignore\n mat4x4f(\n 1, 0, 0, 0,\n 0, Math.cos(a), Math.sin(a), 0,\n 0, -Math.sin(a), Math.cos(a), 0,\n 0, 0, 0, 1,\n ),\n get signature() {\n return { argTypes: [f32], returnType: mat4x4f };\n },\n codegenImpl: (a) =>\n stitch`mat4x4f(1, 0, 0, 0, 0, cos(${a}), sin(${a}), 0, 0, -sin(${a}), cos(${a}), 0, 0, 0, 0, 1)`,\n});\n\n/**\n * Creates a 4-by-4 matrix which rotates around the y-axis by the given angle.\n * @param {number} angle - The angle by which to rotate (in radians).\n * @returns {m4x4f} The rotation matrix.\n */\nexport const rotationY4 = dualImpl({\n name: 'rotationY4',\n normalImpl: (a: number) =>\n // deno-fmt-ignore\n mat4x4f(\n Math.cos(a), 0, -Math.sin(a), 0,\n 0, 1, 0, 0,\n Math.sin(a), 0, Math.cos(a), 0,\n 0, 0, 0, 1,\n ),\n get signature() {\n return { argTypes: [f32], returnType: mat4x4f };\n },\n codegenImpl: (a) =>\n stitch`mat4x4f(cos(${a}), 0, -sin(${a}), 0, 0, 1, 0, 0, sin(${a}), 0, cos(${a}), 0, 0, 0, 0, 1)`,\n});\n\n/**\n * Creates a 4-by-4 matrix which rotates around the z-axis by the given angle.\n * @param {number} angle - The angle by which to rotate (in radians).\n * @returns {m4x4f} The rotation matrix.\n */\nexport const rotationZ4 = dualImpl({\n name: 'rotationZ4',\n normalImpl: (a: number) =>\n // deno-fmt-ignore\n mat4x4f(\n Math.cos(a), Math.sin(a), 0, 0,\n -Math.sin(a), Math.cos(a), 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ),\n get signature() {\n return { argTypes: [f32], returnType: mat4x4f };\n },\n codegenImpl: (a) =>\n stitch`mat4x4f(cos(${a}), sin(${a}), 0, 0, -sin(${a}), cos(${a}), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)`,\n});\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Schema representing mat2x2f - a matrix with 2 rows and 2 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero2x2 = mat2x2f(); // filled with zeros\n *\n * @example\n * const mat = mat2x2f(0, 1, 2, 3);\n * mat.columns[0] // vec2f(0, 1)\n * mat.columns[1] // vec2f(2, 3)\n *\n * @example\n * const mat = mat2x2f(\n * vec2f(0, 1), // column 0\n * vec2f(1, 2), // column 1\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat2x2f, d.mat2x2f(0, 1, 2, 3)); // buffer holding a d.mat2x2f value, with an initial value of ((0, 1), (2, 3))\n */\nexport const mat2x2f = createMatSchema<'mat2x2f', m2x2f, v2f>({\n type: 'mat2x2f',\n rows: 2,\n columns: 2,\n MatImpl: mat2x2fImpl,\n}) as Mat2x2f;\n\n/**\n * Schema representing mat3x3f - a matrix with 3 rows and 3 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero3x3 = mat3x3f(); // filled with zeros\n *\n * @example\n * const mat = mat3x3f(0, 1, 2, 3, 4, 5, 6, 7, 8);\n * mat.columns[0] // vec3f(0, 1, 2)\n * mat.columns[1] // vec3f(3, 4, 5)\n * mat.columns[2] // vec3f(6, 7, 8)\n *\n * @example\n * const mat = mat3x3f(\n * vec3f(0, 1, 2), // column 0\n * vec3f(2, 3, 4), // column 1\n * vec3f(5, 6, 7), // column 2\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat3x3f, d.mat3x3f()); // buffer holding a d.mat3x3f value, with an initial value of mat3x3f filled with zeros\n */\nexport const mat3x3f = createMatSchema<'mat3x3f', m3x3f, v3f>({\n type: 'mat3x3f',\n rows: 3,\n columns: 3,\n MatImpl: mat3x3fImpl,\n}) as Mat3x3f;\n\n/**\n * Schema representing mat4x4f - a matrix with 4 rows and 4 columns, with elements of type f32.\n * Also a constructor function for this matrix type.\n *\n * @example\n * const zero4x4 = mat4x4f(); // filled with zeros\n *\n * @example\n * const mat = mat4x4f(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n * mat.columns[0] // vec4f(0, 1, 2, 3)\n * mat.columns[1] // vec4f(4, 5, 6, 7)\n * mat.columns[2] // vec4f(8, 9, 10, 11)\n * mat.columns[3] // vec4f(12, 13, 14, 15)\n *\n * @example\n * const mat = mat4x4f(\n * vec4f(0, 1, 2, 3), // column 0\n * vec4f(4, 5, 6, 7), // column 1\n * vec4f(8, 9, 10, 11), // column 2\n * vec4f(12, 13, 14, 15), // column 3\n * );\n *\n * @example\n * const buffer = root.createBuffer(d.mat4x4f, d.mat4x4f()); // buffer holding a d.mat4x4f value, with an initial value of mat4x4f filled with zeros\n */\nexport const mat4x4f = createMatSchema<'mat4x4f', m4x4f, v4f>({\n type: 'mat4x4f',\n rows: 4,\n columns: 4,\n MatImpl: mat4x4fImpl,\n}) as Mat4x4f;\n\nexport function matToArray(mat: m2x2f | m3x3f | m4x4f): number[] {\n if (mat.kind === 'mat3x3f') {\n return [\n mat[0],\n mat[1],\n mat[2],\n mat[4],\n mat[5],\n mat[6],\n mat[8],\n mat[9],\n mat[10],\n ] as number[];\n }\n\n return Array.from({ length: mat.length }).map((_, idx) => mat[idx] as number);\n}\n","export const smoothstepScalar = (\n edge0: number,\n edge1: number,\n x: number,\n): number => {\n if (edge0 === edge1) {\n return 0; // WGSL spec says this is an indeterminate value\n }\n const t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n return t * t * (3 - 2 * t);\n};\n\nexport const clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(low, value), high);\n\nexport const divInteger = (lhs: number, rhs: number) => {\n if (rhs === 0) {\n return lhs;\n }\n return Math.trunc(lhs / rhs);\n};\n\nexport function bitcastU32toF32Impl(n: number): number {\n const dataView = new DataView(new ArrayBuffer(4));\n dataView.setUint32(0, n, true);\n return dataView.getFloat32(0, true);\n}\n\nexport function bitcastU32toI32Impl(n: number): number {\n const dataView = new DataView(new ArrayBuffer(4));\n dataView.setUint32(0, n, true);\n return dataView.getInt32(0, true);\n}\n","import { $internal } from '../shared/symbols.ts';\nimport { mat2x2f, mat3x3f, mat4x4f } from './matrix.ts';\nimport {\n bitcastU32toF32Impl,\n bitcastU32toI32Impl,\n clamp,\n divInteger,\n smoothstepScalar,\n} from './numberOps.ts';\nimport * as vectorConstructors from './vector.ts';\nimport type * as wgsl from './wgslTypes.ts';\nimport type { VecKind } from './wgslTypes.ts';\n\ntype vBase = { kind: VecKind };\ntype mBase = { kind: MatKind };\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\n// We're doing operations on the CPU, so we fallthrough directly to the JS impl\nconst vec2b = vectorConstructors.vec2b[$internal].jsImpl;\nconst vec2f = vectorConstructors.vec2f[$internal].jsImpl;\nconst vec2h = vectorConstructors.vec2h[$internal].jsImpl;\nconst vec2i = vectorConstructors.vec2i[$internal].jsImpl;\nconst vec2u = vectorConstructors.vec2u[$internal].jsImpl;\nconst vec3b = vectorConstructors.vec3b[$internal].jsImpl;\nconst vec3f = vectorConstructors.vec3f[$internal].jsImpl;\nconst vec3h = vectorConstructors.vec3h[$internal].jsImpl;\nconst vec3i = vectorConstructors.vec3i[$internal].jsImpl;\nconst vec3u = vectorConstructors.vec3u[$internal].jsImpl;\nconst vec4b = vectorConstructors.vec4b[$internal].jsImpl;\nconst vec4f = vectorConstructors.vec4f[$internal].jsImpl;\nconst vec4h = vectorConstructors.vec4h[$internal].jsImpl;\nconst vec4i = vectorConstructors.vec4i[$internal].jsImpl;\nconst vec4u = vectorConstructors.vec4u[$internal].jsImpl;\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\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 unary2x2f = (op: UnaryOp) => (a: wgsl.m2x2f) => {\n const a_ = a.columns as [wgsl.v2f, wgsl.v2f];\n return mat2x2f(unary2f(op)(a_[0]), unary2f(op)(a_[1]));\n};\n\nconst unary3x3f = (op: UnaryOp) => (a: wgsl.m3x3f) => {\n const a_ = a.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return mat3x3f(unary3f(op)(a_[0]), unary3f(op)(a_[1]), unary3f(op)(a_[2]));\n};\n\nconst unary4x4f = (op: UnaryOp) => (a: wgsl.m4x4f) => {\n const a_ = a.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return mat4x4f(\n unary4f(op)(a_[0]),\n unary4f(op)(a_[1]),\n unary4f(op)(a_[2]),\n unary4f(op)(a_[3]),\n );\n};\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\nconst binaryComponentWise2x2f =\n (op: BinaryOp) => (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 return mat2x2f(\n binaryComponentWise2f(op)(a_[0], b_[0]),\n binaryComponentWise2f(op)(a_[1], b_[1]),\n );\n };\n\nconst binaryComponentWise3x3f =\n (op: BinaryOp) => (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 return mat3x3f(\n binaryComponentWise3f(op)(a_[0], b_[0]),\n binaryComponentWise3f(op)(a_[1], b_[1]),\n binaryComponentWise3f(op)(a_[2], b_[2]),\n );\n };\n\nconst binaryComponentWise4x4f =\n (op: BinaryOp) => (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 return mat4x4f(\n binaryComponentWise4f(op)(a_[0], b_[0]),\n binaryComponentWise4f(op)(a_[1], b_[1]),\n binaryComponentWise4f(op)(a_[2], b_[2]),\n binaryComponentWise4f(op)(a_[3], b_[3]),\n );\n };\n\ntype TernaryOp = (a: number, b: number, c: number) => number;\n\nconst ternaryComponentWise2f =\n (op: TernaryOp) => (a: wgsl.v2f, b: wgsl.v2f, c: wgsl.v2f) =>\n vec2f(op(a.x, b.x, c.x), op(a.y, b.y, c.y));\n\nconst ternaryComponentWise2h =\n (op: TernaryOp) => (a: wgsl.v2h, b: wgsl.v2h, c: wgsl.v2h) =>\n vec2h(op(a.x, b.x, c.x), op(a.y, b.y, c.y));\n\nconst ternaryComponentWise3f =\n (op: TernaryOp) => (a: wgsl.v3f, b: wgsl.v3f, c: wgsl.v3f) =>\n vec3f(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z));\n\nconst ternaryComponentWise3h =\n (op: TernaryOp) => (a: wgsl.v3h, b: wgsl.v3h, c: wgsl.v3h) =>\n vec3h(op(a.x, b.x, c.x), op(a.y, b.y, c.y), op(a.z, b.z, c.z));\n\nconst ternaryComponentWise4f =\n (op: TernaryOp) => (a: wgsl.v4f, b: wgsl.v4f, c: wgsl.v4f) =>\n vec4f(\n op(a.x, b.x, c.x),\n op(a.y, b.y, c.y),\n op(a.z, b.z, c.z),\n op(a.w, b.w, c.w),\n );\n\nconst ternaryComponentWise4h =\n (op: TernaryOp) => (a: wgsl.v4h, b: wgsl.v4h, c: wgsl.v4h) =>\n vec4h(\n op(a.x, b.x, c.x),\n op(a.y, b.y, c.y),\n op(a.z, b.z, c.z),\n op(a.w, b.w, c.w),\n );\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 ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? 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 ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? wgsl.v3b\n : wgsl.v4b\n >,\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 acosh: {\n vec2f: unary2f(Math.acosh),\n vec2h: unary2h(Math.acosh),\n\n vec3f: unary3f(Math.acosh),\n vec3h: unary3h(Math.acosh),\n\n vec4f: unary4f(Math.acosh),\n vec4h: unary4h(Math.acosh),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asin: {\n vec2f: unary2f(Math.asin),\n vec2h: unary2h(Math.asin),\n\n vec3f: unary3f(Math.asin),\n vec3h: unary3h(Math.asin),\n\n vec4f: unary4f(Math.asin),\n vec4h: unary4h(Math.asin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asinh: {\n vec2f: unary2f(Math.asinh),\n vec2h: unary2h(Math.asinh),\n\n vec3f: unary3f(Math.asinh),\n vec3h: unary3h(Math.asinh),\n\n vec4f: unary4f(Math.asinh),\n vec4h: unary4h(Math.asinh),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atan: {\n vec2f: unary2f(Math.atan),\n vec2h: unary2h(Math.atan),\n\n vec3f: unary3f(Math.atan),\n vec3h: unary3h(Math.atan),\n\n vec4f: unary4f(Math.atan),\n vec4h: unary4h(Math.atan),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atanh: {\n vec2f: unary2f(Math.atanh),\n vec2h: unary2h(Math.atanh),\n\n vec3f: unary3f(Math.atanh),\n vec3h: unary3h(Math.atanh),\n\n vec4f: unary4f(Math.atanh),\n vec4h: unary4h(Math.atanh),\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: binaryComponentWise2f((a, b) => a + b),\n vec2h: binaryComponentWise2h((a, b) => a + b),\n vec2i: binaryComponentWise2i((a, b) => a + b),\n vec2u: binaryComponentWise2u((a, b) => a + b),\n\n vec3f: binaryComponentWise3f((a, b) => a + b),\n vec3h: binaryComponentWise3h((a, b) => a + b),\n vec3i: binaryComponentWise3i((a, b) => a + b),\n vec3u: binaryComponentWise3u((a, b) => a + b),\n\n vec4f: binaryComponentWise4f((a, b) => a + b),\n vec4h: binaryComponentWise4h((a, b) => a + b),\n vec4i: binaryComponentWise4i((a, b) => a + b),\n vec4u: binaryComponentWise4u((a, b) => a + b),\n\n mat2x2f: binaryComponentWise2x2f((a, b) => a + b),\n mat3x3f: binaryComponentWise3x3f((a, b) => a + b),\n mat4x4f: binaryComponentWise4x4f((a, b) => a + b),\n } as Record<\n VecKind | MatKind,\n <T extends vBase | mBase>(lhs: T, rhs: T) => T\n >,\n\n smoothstep: {\n vec2f: ternaryComponentWise2f(smoothstepScalar),\n vec2h: ternaryComponentWise2h(smoothstepScalar),\n vec3f: ternaryComponentWise3f(smoothstepScalar),\n vec3h: ternaryComponentWise3h(smoothstepScalar),\n vec4f: ternaryComponentWise4f(smoothstepScalar),\n vec4h: ternaryComponentWise4h(smoothstepScalar),\n } as Record<\n VecKind,\n <T extends vBase>(\n edge0: T,\n edge1: T,\n x: T,\n ) => T extends wgsl.AnyVec2Instance ? wgsl.v2f\n : T extends wgsl.AnyVec3Instance ? wgsl.v3f\n : T extends wgsl.AnyVec4Instance ? wgsl.v4f\n : wgsl.AnyVecInstance\n >,\n\n addMixed: {\n vec2f: (a: wgsl.v2f, b: number) => unary2f((e) => e + b)(a),\n vec2h: (a: wgsl.v2h, b: number) => unary2h((e) => e + b)(a),\n vec2i: (a: wgsl.v2i, b: number) => unary2i((e) => e + b)(a),\n vec2u: (a: wgsl.v2u, b: number) => unary2u((e) => e + b)(a),\n\n vec3f: (a: wgsl.v3f, b: number) => unary3f((e) => e + b)(a),\n vec3h: (a: wgsl.v3h, b: number) => unary3h((e) => e + b)(a),\n vec3i: (a: wgsl.v3i, b: number) => unary3i((e) => e + b)(a),\n vec3u: (a: wgsl.v3u, b: number) => unary3u((e) => e + b)(a),\n\n vec4f: (a: wgsl.v4f, b: number) => unary4f((e) => e + b)(a),\n vec4h: (a: wgsl.v4h, b: number) => unary4h((e) => e + b)(a),\n vec4i: (a: wgsl.v4i, b: number) => unary4i((e) => e + b)(a),\n vec4u: (a: wgsl.v4u, b: number) => unary4u((e) => e + b)(a),\n\n mat2x2f: (a: wgsl.m2x2f, b: number) => unary2x2f((e) => e + b)(a),\n mat3x3f: (a: wgsl.m3x3f, b: number) => unary3x3f((e) => e + b)(a),\n mat4x4f: (a: wgsl.m4x4f, b: number) => unary4x4f((e) => e + b)(a),\n } as Record<\n VecKind | MatKind,\n <T extends vBase | mBase>(lhs: T, rhs: number) => T\n >,\n\n mulSxV: {\n vec2f: (s: number, v: wgsl.v2f) => unary2f((e) => s * e)(v),\n vec2h: (s: number, v: wgsl.v2h) => unary2h((e) => s * e)(v),\n vec2i: (s: number, v: wgsl.v2i) => unary2i((e) => s * e)(v),\n vec2u: (s: number, v: wgsl.v2u) => unary2u((e) => s * e)(v),\n\n vec3f: (s: number, v: wgsl.v3f) => unary3f((e) => s * e)(v),\n vec3h: (s: number, v: wgsl.v3h) => unary3h((e) => s * e)(v),\n vec3i: (s: number, v: wgsl.v3i) => unary3i((e) => s * e)(v),\n vec3u: (s: number, v: wgsl.v3u) => unary3u((e) => s * e)(v),\n\n vec4f: (s: number, v: wgsl.v4f) => unary4f((e) => s * e)(v),\n vec4h: (s: number, v: wgsl.v4h) => unary4h((e) => s * e)(v),\n vec4i: (s: number, v: wgsl.v4i) => unary4i((e) => s * e)(v),\n vec4u: (s: number, v: wgsl.v4u) => unary4u((e) => s * e)(v),\n\n mat2x2f: (s: number, m: wgsl.m2x2f) => unary2x2f((e) => s * e)(m),\n mat3x3f: (s: number, m: wgsl.m3x3f) => unary3x3f((e) => s * e)(m),\n mat4x4f: (s: number, m: wgsl.m4x4f) => unary4x4f((e) => s * e)(m),\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(s: number, v: T) => T\n >,\n\n mulVxV: {\n vec2f: binaryComponentWise2f((a, b) => a * b),\n vec2h: binaryComponentWise2h((a, b) => a * b),\n vec2i: binaryComponentWise2i((a, b) => a * b),\n vec2u: binaryComponentWise2u((a, b) => a * b),\n\n vec3f: binaryComponentWise3f((a, b) => a * b),\n vec3h: binaryComponentWise3h((a, b) => a * b),\n vec3i: binaryComponentWise3i((a, b) => a * b),\n vec3u: binaryComponentWise3u((a, b) => a * b),\n\n vec4f: binaryComponentWise4f((a, b) => a * b),\n vec4h: binaryComponentWise4h((a, b) => a * b),\n vec4i: binaryComponentWise4i((a, b) => a * b),\n vec4u: binaryComponentWise4u((a, b) => a * b),\n\n mat2x2f: (a: wgsl.m2x2f, b: wgsl.m2x2f) => {\n const a_ = a.columns;\n const b_ = b.columns;\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 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;\n const b_ = b.columns;\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 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 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;\n const b_ = b.columns;\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 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 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 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;\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;\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;\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;\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;\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;\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 div: {\n vec2f: binaryComponentWise2f((a, b) => a / b),\n vec2h: binaryComponentWise2h((a, b) => a / b),\n vec2i: binaryComponentWise2i(divInteger),\n vec2u: binaryComponentWise2u(divInteger),\n\n vec3f: binaryComponentWise3f((a, b) => a / b),\n vec3h: binaryComponentWise3h((a, b) => a / b),\n vec3i: binaryComponentWise3i(divInteger),\n vec3u: binaryComponentWise3u(divInteger),\n\n vec4f: binaryComponentWise4f((a, b) => a / b),\n vec4h: binaryComponentWise4h((a, b) => a / b),\n vec4i: binaryComponentWise4i(divInteger),\n vec4u: binaryComponentWise4u(divInteger),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\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 mod: {\n vec2f: binaryComponentWise2f((a, b) => a % b),\n vec2h: binaryComponentWise2h((a, b) => a % b),\n vec2i: binaryComponentWise2i((a, b) => a % b),\n vec2u: binaryComponentWise2u((a, b) => a % b),\n\n vec3f: binaryComponentWise3f((a, b) => a % b),\n vec3h: binaryComponentWise3h((a, b) => a % b),\n vec3i: binaryComponentWise3i((a, b) => a % b),\n vec3u: binaryComponentWise3u((a, b) => a % b),\n\n vec4f: binaryComponentWise4f((a, b) => a % b),\n vec4h: binaryComponentWise4h((a, b) => a % b),\n vec4i: binaryComponentWise4i((a, b) => a % b),\n vec4u: binaryComponentWise4u((a, b) => a % b),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\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 sign: {\n vec2f: unary2f(Math.sign),\n vec2h: unary2h(Math.sign),\n vec2i: unary2i(Math.sign),\n\n vec3f: unary3f(Math.sign),\n vec3h: unary3h(Math.sign),\n vec3i: unary3i(Math.sign),\n\n vec4f: unary4f(Math.sign),\n vec4h: unary4h(Math.sign),\n vec4i: unary4i(Math.sign),\n } as Record<VecKind, <T extends vBase>(e: T) => T>,\n\n sqrt: {\n vec2f: unary2f(Math.sqrt),\n vec2h: unary2h(Math.sqrt),\n\n vec3f: unary3f(Math.sqrt),\n vec3h: unary3h(Math.sqrt),\n\n vec4f: unary4f(Math.sqrt),\n vec4h: unary4h(Math.sqrt),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\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 cosh: {\n vec2f: unary2f(Math.cosh),\n vec2h: unary2h(Math.cosh),\n\n vec3f: unary3f(Math.cosh),\n vec3h: unary3h(Math.cosh),\n\n vec4f: unary4f(Math.cosh),\n vec4h: unary4h(Math.cosh),\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 exp2: {\n vec2f: unary2f((val) => 2 ** val),\n vec2h: unary2h((val) => 2 ** val),\n\n vec3f: unary3f((val) => 2 ** val),\n vec3h: unary3h((val) => 2 ** val),\n\n vec4f: unary4f((val) => 2 ** val),\n vec4h: unary4h((val) => 2 ** val),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n log: {\n vec2f: unary2f(Math.log),\n vec2h: unary2h(Math.log),\n\n vec3f: unary3f(Math.log),\n vec3h: unary3h(Math.log),\n\n vec4f: unary4f(Math.log),\n vec4h: unary4h(Math.log),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n log2: {\n vec2f: unary2f(Math.log2),\n vec2h: unary2h(Math.log2),\n\n vec3f: unary3f(Math.log2),\n vec3h: unary3h(Math.log2),\n\n vec4f: unary4f(Math.log2),\n vec4h: unary4h(Math.log2),\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 neg: {\n vec2f: unary2f((value) => -value),\n vec2h: unary2h((value) => -value),\n vec2i: unary2i((value) => -value),\n vec2u: unary2u((value) => -value),\n 'vec2<bool>': (e: wgsl.v2b) => vec2b(!e.x, !e.y),\n\n vec3f: unary3f((value) => -value),\n vec3h: unary3h((value) => -value),\n vec3i: unary3i((value) => -value),\n vec3u: unary3u((value) => -value),\n 'vec3<bool>': (e: wgsl.v3b) => vec3b(!e.x, !e.y, !e.z),\n\n vec4f: unary4f((value) => -value),\n vec4h: unary4h((value) => -value),\n vec4i: unary4i((value) => -value),\n vec4u: unary4u((value) => -value),\n 'vec4<bool>': (e: wgsl.v4b) => vec4b(!e.x, !e.y, !e.z, !e.w),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\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 ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? wgsl.v3b\n : wgsl.v4b,\n ) => T\n >,\n\n tanh: {\n vec2f: unary2f(Math.tanh),\n vec2h: unary2h(Math.tanh),\n\n vec3f: unary3f(Math.tanh),\n vec3h: unary3h(Math.tanh),\n\n vec4f: unary4f(Math.tanh),\n vec4h: unary4h(Math.tanh),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n bitcastU32toF32: {\n vec2u: (n: wgsl.v2u) =>\n vec2f(bitcastU32toF32Impl(n.x), bitcastU32toF32Impl(n.y)),\n vec3u: (n: wgsl.v3u) =>\n vec3f(\n bitcastU32toF32Impl(n.x),\n bitcastU32toF32Impl(n.y),\n bitcastU32toF32Impl(n.z),\n ),\n vec4u: (n: wgsl.v4u) =>\n vec4f(\n bitcastU32toF32Impl(n.x),\n bitcastU32toF32Impl(n.y),\n bitcastU32toF32Impl(n.z),\n bitcastU32toF32Impl(n.w),\n ),\n } as Record<\n VecKind,\n <T extends wgsl.AnyUnsignedVecInstance>(\n v: T,\n ) => T extends wgsl.v2u ? wgsl.v2f\n : T extends wgsl.v3u ? wgsl.v3f\n : wgsl.v4f\n >,\n\n bitcastU32toI32: {\n vec2u: (n: wgsl.v2u) =>\n vec2i(bitcastU32toI32Impl(n.x), bitcastU32toI32Impl(n.y)),\n vec3u: (n: wgsl.v3u) =>\n vec3i(\n bitcastU32toI32Impl(n.x),\n bitcastU32toI32Impl(n.y),\n bitcastU32toI32Impl(n.z),\n ),\n vec4u: (n: wgsl.v4u) =>\n vec4i(\n bitcastU32toI32Impl(n.x),\n bitcastU32toI32Impl(n.y),\n bitcastU32toI32Impl(n.z),\n bitcastU32toI32Impl(n.w),\n ),\n } as Record<\n VecKind,\n <T extends wgsl.AnyUnsignedVecInstance>(\n v: T,\n ) => T extends wgsl.v2u ? wgsl.v2i\n : T extends wgsl.v3u ? wgsl.v3i\n : wgsl.v4i\n >,\n};\n","import { dualImpl } from '../core/function/dualImpl.ts';\nimport { stitch } from '../core/resolve/stitch.ts';\nimport { abstractFloat, f16, f32 } from '../data/numeric.ts';\nimport { vecTypeToConstructor } from '../data/vector.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport {\n type AnyMatInstance,\n type AnyNumericVecInstance,\n isFloat32VecInstance,\n isMatInstance,\n isNumericSchema,\n isVecInstance,\n type mBaseForVec,\n type vBaseForMat,\n} from '../data/wgslTypes.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport { unify } from '../tgsl/conversion.ts';\n\ntype NumVec = AnyNumericVecInstance;\ntype Mat = AnyMatInstance;\n\nfunction cpuAdd(lhs: number, rhs: number): number; // default addition\nfunction cpuAdd<T extends NumVec>(lhs: number, rhs: T): T; // mixed addition\nfunction cpuAdd<T extends NumVec>(lhs: T, rhs: number): T; // mixed addition\nfunction cpuAdd<T extends NumVec | Mat>(lhs: T, rhs: T): T; // component-wise addition\nfunction cpuAdd<\n // union overload\n Lhs extends number | NumVec | Mat,\n Rhs extends Lhs extends number ? number | NumVec\n : Lhs extends NumVec ? number | Lhs\n : Lhs extends Mat ? Lhs\n : never,\n>(lhs: Lhs, rhs: Rhs): Lhs | Rhs;\nfunction cpuAdd(lhs: number | NumVec | Mat, rhs: number | NumVec | Mat) {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return lhs + rhs; // default addition\n }\n if (typeof lhs === 'number' && isVecInstance(rhs)) {\n return VectorOps.addMixed[rhs.kind](rhs, lhs); // mixed addition\n }\n if (isVecInstance(lhs) && typeof rhs === 'number') {\n return VectorOps.addMixed[lhs.kind](lhs, rhs); // mixed addition\n }\n if (\n (isVecInstance(lhs) && isVecInstance(rhs)) ||\n (isMatInstance(lhs) && isMatInstance(rhs))\n ) {\n return VectorOps.add[lhs.kind](lhs, rhs); // component-wise addition\n }\n\n throw new Error('Add/Sub called with invalid arguments.');\n}\n\nexport const add = dualImpl({\n name: 'add',\n signature: (...args) => {\n const uargs = unify(args) ?? args;\n return {\n argTypes: uargs,\n returnType: isNumericSchema(uargs[0]) ? uargs[1] : uargs[0],\n };\n },\n normalImpl: cpuAdd,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} + ${rhs})`,\n});\n\nfunction cpuSub(lhs: number, rhs: number): number; // default subtraction\nfunction cpuSub<T extends NumVec>(lhs: number, rhs: T): T; // mixed subtraction\nfunction cpuSub<T extends NumVec>(lhs: T, rhs: number): T; // mixed subtraction\nfunction cpuSub<T extends NumVec | Mat>(lhs: T, rhs: T): T; // component-wise subtraction\nfunction cpuSub<\n // union overload\n Lhs extends number | NumVec | Mat,\n Rhs extends Lhs extends number ? number | NumVec\n : Lhs extends NumVec ? number | Lhs\n : Lhs extends Mat ? Lhs\n : never,\n>(lhs: Lhs, rhs: Rhs): Lhs | Rhs;\nfunction cpuSub(lhs: number | NumVec | Mat, rhs: number | NumVec | Mat) {\n // while illegal on the wgsl side, we can do this in js\n return cpuAdd(lhs, cpuMul(-1, rhs));\n}\n\nexport const sub = dualImpl({\n name: 'sub',\n signature: (...args) => {\n const uargs = unify(args) ?? args;\n return {\n argTypes: uargs,\n returnType: isNumericSchema(uargs[0]) ? uargs[1] : uargs[0],\n };\n },\n normalImpl: cpuSub,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} - ${rhs})`,\n});\n\nfunction cpuMul(lhs: number, rhs: number): number; // default multiplication\nfunction cpuMul<MV extends NumVec | Mat>(lhs: number, rhs: MV): MV; // scale\nfunction cpuMul<MV extends NumVec | Mat>(lhs: MV, rhs: number): MV; // scale\nfunction cpuMul<V extends NumVec>(lhs: V, rhs: V): V; // component-wise multiplication\nfunction cpuMul<M extends Mat, V extends vBaseForMat<M>>(lhs: V, rhs: M): V; // row-vector-matrix\nfunction cpuMul<M extends Mat, V extends vBaseForMat<M>>(lhs: M, rhs: V): V; // matrix-column-vector\nfunction cpuMul<M extends Mat>(lhs: M, rhs: M): M; // matrix multiplication\nfunction cpuMul<\n // union overload\n Lhs extends number | NumVec | Mat,\n Rhs extends Lhs extends number ? number | NumVec | Mat\n : Lhs extends NumVec ? number | Lhs | mBaseForVec<Lhs>\n : Lhs extends Mat ? number | vBaseForMat<Lhs> | Lhs\n : never,\n>(lhs: Lhs, rhs: Rhs): Lhs | Rhs;\nfunction cpuMul(lhs: number | NumVec | Mat, rhs: number | NumVec | Mat) {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return lhs * rhs; // default multiplication\n }\n if (typeof lhs === 'number' && (isVecInstance(rhs) || isMatInstance(rhs))) {\n return VectorOps.mulSxV[rhs.kind](lhs, rhs); // scale\n }\n if ((isVecInstance(lhs) || isMatInstance(lhs)) && typeof rhs === 'number') {\n return VectorOps.mulSxV[lhs.kind](rhs, lhs); // scale\n }\n if (isVecInstance(lhs) && isVecInstance(rhs)) {\n return VectorOps.mulVxV[lhs.kind](lhs, rhs); // component-wise\n }\n if (isFloat32VecInstance(lhs) && isMatInstance(rhs)) {\n return VectorOps.mulVxM[rhs.kind](lhs, rhs); // row-vector-matrix\n }\n if (isMatInstance(lhs) && isFloat32VecInstance(rhs)) {\n return VectorOps.mulMxV[lhs.kind](lhs, rhs); // matrix-column-vector\n }\n if (isMatInstance(lhs) && isMatInstance(rhs)) {\n return VectorOps.mulVxV[lhs.kind](lhs, rhs); // matrix multiplication\n }\n\n throw new Error('Mul called with invalid arguments.');\n}\n\nexport const mul = dualImpl({\n name: 'mul',\n signature: (...args) => {\n const uargs = unify(args) ?? args;\n const returnType = isNumericSchema(uargs[0])\n // Scalar * Scalar/Vector/Matrix\n ? uargs[1]\n : isNumericSchema(uargs[1])\n // Vector/Matrix * Scalar\n ? uargs[0]\n : uargs[0].type.startsWith('vec')\n // Vector * Vector/Matrix\n ? uargs[0]\n : uargs[1].type.startsWith('vec')\n // Matrix * Vector\n ? uargs[1]\n // Matrix * Matrix\n : uargs[0];\n\n return ({ argTypes: uargs, returnType });\n },\n normalImpl: cpuMul,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} * ${rhs})`,\n});\n\nfunction cpuDiv(lhs: number, rhs: number): number; // default js division\nfunction cpuDiv<T extends NumVec>(lhs: T, rhs: T): T; // component-wise division\nfunction cpuDiv<T extends NumVec>(lhs: number, rhs: T): T; // mixed division\nfunction cpuDiv<T extends NumVec>(lhs: T, rhs: number): T; // mixed division\nfunction cpuDiv(lhs: NumVec | number, rhs: NumVec | number): NumVec | number {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return lhs / rhs;\n }\n if (typeof lhs === 'number' && isVecInstance(rhs)) {\n const schema = vecTypeToConstructor[rhs.kind][$internal].jsImpl;\n return VectorOps.div[rhs.kind](schema(lhs), rhs);\n }\n if (isVecInstance(lhs) && typeof rhs === 'number') {\n const schema = vecTypeToConstructor[lhs.kind][$internal].jsImpl;\n return VectorOps.div[lhs.kind](lhs, schema(rhs));\n }\n if (isVecInstance(lhs) && isVecInstance(rhs)) {\n return VectorOps.div[lhs.kind](lhs, rhs);\n }\n throw new Error('Div called with invalid arguments.');\n}\n\nexport const div = dualImpl({\n name: 'div',\n signature: (...args) => {\n const uargs = unify(args, [f32, f16, abstractFloat]) ?? args;\n return ({\n argTypes: uargs,\n returnType: isNumericSchema(uargs[0]) ? uargs[1] : uargs[0],\n });\n },\n normalImpl: cpuDiv,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} / ${rhs})`,\n ignoreImplicitCastWarning: true,\n});\n\ntype ModOverload = {\n (a: number, b: number): number;\n <T extends NumVec>(a: T, b: T): T;\n <T extends NumVec>(a: number, b: T): T;\n <T extends NumVec>(a: T, b: number): T;\n};\n\n/**\n * @privateRemarks\n * Both JS and WGSL implementations use truncated definition of modulo\n */\nexport const mod: ModOverload = dualImpl({\n name: 'mod',\n signature: (...args) => {\n const uargs = unify(args) ?? args;\n return {\n argTypes: uargs,\n returnType: isNumericSchema(uargs[0]) ? uargs[1] : uargs[0],\n };\n },\n normalImpl<T extends NumVec | number>(a: T, b: T): T {\n if (typeof a === 'number' && typeof b === 'number') {\n return (a % b) as T; // scalar % scalar\n }\n if (typeof a === 'number' && isVecInstance(b)) {\n // scalar % vector\n const schema = vecTypeToConstructor[b.kind];\n return VectorOps.mod[b.kind](schema(a), b) as T;\n }\n if (isVecInstance(a) && typeof b === 'number') {\n const schema = vecTypeToConstructor[a.kind];\n // vector % scalar\n return VectorOps.mod[a.kind](a, schema(b)) as T;\n }\n\n if (isVecInstance(a) && isVecInstance(b)) {\n // vector % vector\n return VectorOps.mod[a.kind](a, b) as T;\n }\n throw new Error(\n 'Mod called with invalid arguments, expected types: number or vector.',\n );\n },\n codegenImpl: (lhs, rhs) => stitch`(${lhs} % ${rhs})`,\n});\n\nfunction cpuNeg(value: number): number;\nfunction cpuNeg<T extends NumVec>(value: T): T;\nfunction cpuNeg(value: NumVec | number): NumVec | number {\n if (typeof value === 'number') {\n return -value;\n }\n return VectorOps.neg[value.kind](value);\n}\n\nexport const neg = dualImpl({\n name: 'neg',\n signature: (arg) => ({\n argTypes: [arg],\n returnType: arg,\n }),\n normalImpl: cpuNeg,\n codegenImpl: (arg) => stitch`-(${arg})`,\n});\n","import type { StorageTextureFormats } from '../core/texture/textureFormats.ts';\nimport { $internal, $repr } from '../shared/symbols.ts';\nimport type { Default, WithDefaults } from '../shared/utilityTypes.ts';\nimport { f32 } from './numeric.ts';\nimport type { F32 } from './wgslTypes.ts';\nimport type { BaseData, TextureSampleTypes } from './wgslTypes.ts';\n\nexport type StorageTextureDimension = '1d' | '2d' | '2d-array' | '3d';\n\nexport type WgslTextureProps = {\n dimension: GPUTextureViewDimension;\n sampleType: TextureSampleTypes;\n multisampled: boolean;\n};\n\nexport type WgslStorageTextureProps = {\n dimension: StorageTextureDimension;\n format: StorageTextureFormats;\n access: GPUStorageTextureAccess;\n};\n\ntype ResolvedTextureProps<\n TProps extends Partial<WgslTextureProps>,\n> = WithDefaults<TProps, WgslTextureProps>;\n\ntype ResolvedStorageTextureProps<\n TProps extends Partial<WgslStorageTextureProps>,\n> = WithDefaults<TProps, WgslStorageTextureProps>;\n\ntype SampledTextureLiteral = `texture_${\n | '1d'\n | '2d'\n | '2d_array'\n | '3d'\n | 'cube'\n | 'cube_array'\n | 'multisampled_2d'\n | 'depth_multisampled_2d'\n | 'depth_2d'\n | 'depth_2d_array'\n | 'depth_cube'\n | 'depth_cube_array'}`;\ntype StorageTextureLiteral = `texture_storage_${\n | '1d'\n | '2d'\n | '2d_array'\n | '3d'}`;\n\nexport interface WgslTexture<\n TProps extends Partial<WgslTextureProps> = WgslTextureProps,\n> extends BaseData {\n readonly [$repr]: unknown;\n readonly type: SampledTextureLiteral;\n\n readonly sampleType: ResolvedTextureProps<TProps>['sampleType'];\n readonly dimension: ResolvedTextureProps<TProps>['dimension'];\n readonly multisampled: ResolvedTextureProps<TProps>['multisampled'];\n readonly bindingSampleType: [GPUTextureSampleType, ...GPUTextureSampleType[]];\n}\n\nexport interface WgslStorageTexture<\n TProps extends Partial<WgslStorageTextureProps> = WgslStorageTextureProps,\n> extends BaseData {\n readonly [$repr]: unknown;\n readonly type: StorageTextureLiteral;\n\n readonly format: ResolvedStorageTextureProps<TProps>['format'];\n readonly dimension: ResolvedStorageTextureProps<TProps>['dimension'];\n readonly access: ResolvedStorageTextureProps<TProps>['access'];\n}\n\nexport interface WgslExternalTexture extends BaseData {\n readonly [$repr]: textureExternal;\n readonly type: 'texture_external';\n\n readonly dimension: '2d';\n}\n\nexport interface WgslTexture1d<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: '1d';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_1d';\n readonly [$repr]: texture1d<TSample>;\n}\n\nexport interface WgslTexture2d<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: '2d';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_2d';\n readonly [$repr]: texture2d<TSample>;\n}\n\nexport interface WgslTextureMultisampled2d<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: '2d';\n sampleType: TSample;\n multisampled: true;\n }> {\n readonly type: 'texture_multisampled_2d';\n readonly [$repr]: textureMultisampled2d<TSample>;\n}\n\nexport interface WgslTexture2dArray<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: '2d-array';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_2d_array';\n readonly [$repr]: texture2dArray<TSample>;\n}\n\nexport interface WgslTextureCube<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: 'cube';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_cube';\n readonly [$repr]: textureCube<TSample>;\n}\n\nexport interface WgslTextureCubeArray<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: 'cube-array';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_cube_array';\n readonly [$repr]: textureCubeArray<TSample>;\n}\n\nexport interface WgslTexture3d<\n TSample extends TextureSampleTypes = TextureSampleTypes,\n> extends\n WgslTexture<{\n dimension: '3d';\n sampleType: TSample;\n multisampled: false;\n }> {\n readonly type: 'texture_3d';\n readonly [$repr]: texture3d<TSample>;\n}\n\n// Depth textures (sample type is always f32)\nexport interface WgslTextureDepth2d extends\n WgslTexture<{\n dimension: '2d';\n sampleType: F32;\n multisampled: false;\n }> {\n readonly type: 'texture_depth_2d';\n readonly [$repr]: textureDepth2d;\n}\n\nexport interface WgslTextureDepthMultisampled2d extends\n WgslTexture<{\n dimension: '2d';\n sampleType: F32;\n multisampled: true;\n }> {\n readonly type: 'texture_depth_multisampled_2d';\n readonly [$repr]: textureDepthMultisampled2d;\n}\n\nexport interface WgslTextureDepth2dArray extends\n WgslTexture<{\n dimension: '2d-array';\n sampleType: F32;\n multisampled: false;\n }> {\n readonly type: 'texture_depth_2d_array';\n readonly [$repr]: textureDepth2dArray;\n}\n\nexport interface WgslTextureDepthCube extends\n WgslTexture<{\n dimension: 'cube';\n sampleType: F32;\n multisampled: false;\n }> {\n readonly type: 'texture_depth_cube';\n readonly [$repr]: textureDepthCube;\n}\n\nexport interface WgslTextureDepthCubeArray extends\n WgslTexture<{\n dimension: 'cube-array';\n sampleType: F32;\n multisampled: false;\n }> {\n readonly type: 'texture_depth_cube_array';\n readonly [$repr]: textureDepthCubeArray;\n}\n\n// Storage textures\nexport interface WgslStorageTexture1d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> extends\n WgslStorageTexture<{\n dimension: '1d';\n format: TFormat;\n access: TAccess;\n }> {\n readonly type: 'texture_storage_1d';\n readonly [$repr]: textureStorage1d<TFormat, TAccess>;\n}\n\nexport interface WgslStorageTexture2d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> extends\n WgslStorageTexture<{\n dimension: '2d';\n format: TFormat;\n access: TAccess;\n }> {\n readonly type: 'texture_storage_2d';\n readonly [$repr]: textureStorage2d<TFormat, TAccess>;\n}\n\nexport interface WgslStorageTexture2dArray<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> extends\n WgslStorageTexture<{\n dimension: '2d-array';\n format: TFormat;\n access: TAccess;\n }> {\n readonly type: 'texture_storage_2d_array';\n readonly [$repr]: textureStorage2dArray<TFormat, TAccess>;\n}\n\nexport interface WgslStorageTexture3d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> extends\n WgslStorageTexture<{\n dimension: '3d';\n format: TFormat;\n access: TAccess;\n }> {\n readonly type: 'texture_storage_3d';\n readonly [$repr]: textureStorage3d<TFormat, TAccess>;\n}\n\ntype SampledTextureSchemaMap<T extends WgslTextureProps> = {\n multisampled: {\n '1d': never;\n '2d': WgslTextureMultisampled2d<T['sampleType']>;\n '2d-array': never;\n '3d': never;\n cube: never;\n 'cube-array': never;\n };\n sampled: {\n '1d': WgslTexture1d<T['sampleType']>;\n '2d': WgslTexture2d<T['sampleType']>;\n '2d-array': WgslTexture2dArray<T['sampleType']>;\n '3d': WgslTexture3d<T['sampleType']>;\n cube: WgslTextureCube<T['sampleType']>;\n 'cube-array': WgslTextureCubeArray<T['sampleType']>;\n };\n};\n\ntype StorageTextureSchemaMap<T extends WgslStorageTextureProps> = {\n '1d': WgslStorageTexture1d<T['format'], T['access']>;\n '2d': WgslStorageTexture2d<T['format'], T['access']>;\n '2d-array': WgslStorageTexture2dArray<T['format'], T['access']>;\n '3d': WgslStorageTexture3d<T['format'], T['access']>;\n};\n\nexport type TextureSchemaForDescriptor<\n T extends WgslTextureProps | WgslStorageTextureProps,\n> = T extends WgslTextureProps\n ? T['multisampled'] extends true\n ? SampledTextureSchemaMap<T>['multisampled'][T['dimension']]\n : SampledTextureSchemaMap<T>['sampled'][T['dimension']]\n : T extends WgslStorageTextureProps\n ? StorageTextureSchemaMap<T>[T['dimension']]\n : never;\n\nexport function textureDescriptorToSchema<\n T extends WgslTextureProps | WgslStorageTextureProps,\n>(desc: T): TextureSchemaForDescriptor<T> {\n if ('multisampled' in desc) {\n if (desc.multisampled) {\n if (desc.dimension === '2d') {\n return textureMultisampled2d(\n desc.sampleType,\n ) as TextureSchemaForDescriptor<T>;\n }\n throw new Error(\n `Multisampled textures only support '2d' dimension, got '${desc.dimension}'`,\n );\n }\n\n switch (desc.dimension) {\n case '1d':\n return texture1d(desc.sampleType) as TextureSchemaForDescriptor<T>;\n case '2d':\n return texture2d(desc.sampleType) as TextureSchemaForDescriptor<T>;\n case '2d-array':\n return texture2dArray(\n desc.sampleType,\n ) as TextureSchemaForDescriptor<T>;\n case '3d':\n return texture3d(desc.sampleType) as TextureSchemaForDescriptor<T>;\n case 'cube':\n return textureCube(\n desc.sampleType,\n ) as TextureSchemaForDescriptor<T>;\n case 'cube-array':\n return textureCubeArray(\n desc.sampleType,\n ) as TextureSchemaForDescriptor<T>;\n default:\n throw new Error(\n // @ts-expect-error\n `Unsupported texture dimension: '${desc.dimension}'`,\n );\n }\n }\n if (!('access' in desc)) {\n throw new Error('Descriptor is neither a sampled nor a storage texture');\n }\n\n switch (desc.dimension) {\n case '1d':\n return textureStorage1d(\n desc.format,\n desc.access,\n ) as TextureSchemaForDescriptor<T>;\n case '2d':\n return textureStorage2d(\n desc.format,\n desc.access,\n ) as TextureSchemaForDescriptor<T>;\n case '2d-array':\n return textureStorage2dArray(\n desc.format,\n desc.access,\n ) as TextureSchemaForDescriptor<T>;\n case '3d':\n return textureStorage3d(\n desc.format,\n desc.access,\n ) as TextureSchemaForDescriptor<T>;\n default:\n throw new Error(\n // @ts-expect-error\n `Unsupported storage texture dimension: '${desc.dimension}'`,\n );\n }\n}\n\nfunction createTexture<TProps extends WgslTextureProps>(\n type: SampledTextureLiteral,\n props: TProps,\n): WgslTexture<TProps> {\n const isDepth = type.startsWith('texture_depth');\n const sampleTypes: [GPUTextureSampleType, ...GPUTextureSampleType[]] = isDepth\n ? ['depth', 'float', 'unfilterable-float']\n : props.sampleType.type === 'i32'\n ? ['sint']\n : props.sampleType.type === 'u32'\n ? ['uint']\n : ['float', 'unfilterable-float'];\n\n return {\n [$internal]: true,\n [$repr]: undefined as unknown as WgslTexture<TProps>,\n type,\n bindingSampleType: sampleTypes,\n ...props,\n };\n}\n\nfunction createStorageTexture<TProps extends WgslStorageTextureProps>(\n type: StorageTextureLiteral,\n props: TProps,\n): WgslStorageTexture<TProps> {\n return {\n [$internal]: true,\n [$repr]: undefined as unknown as WgslStorageTexture<TProps>,\n type,\n ...props,\n };\n}\n\nconst textureCache = new Map<\n string,\n WgslTexture | WgslStorageTexture | WgslExternalTexture\n>();\n\nexport const accessModeMap: Record<GPUStorageTextureAccess, string> = {\n 'write-only': 'write',\n 'read-only': 'read',\n 'read-write': 'read_write',\n};\n\nfunction getOrCreate<\n T extends WgslTexture | WgslStorageTexture | WgslExternalTexture,\n>(key: string, factory: () => T): T {\n let cached = textureCache.get(key) as T | undefined;\n if (!cached) {\n cached = factory();\n textureCache.set(key, cached);\n }\n return cached;\n}\n\nexport interface texture1d<T extends TextureSampleTypes = TextureSampleTypes> {\n readonly kind: `texture_1d<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function texture1d<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTexture1d<T>;\nexport function texture1d(): WgslTexture1d<F32>;\nexport function texture1d<T extends TextureSampleTypes>(sampleType?: T) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_1d<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_1d', {\n dimension: '1d',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface texture2d<T extends TextureSampleTypes = TextureSampleTypes> {\n readonly kind: `texture_2d<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function texture2d<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTexture2d<T>;\nexport function texture2d(): WgslTexture2d<F32>;\nexport function texture2d<T extends TextureSampleTypes>(sampleType?: T) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_2d<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_2d', {\n dimension: '2d',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface textureMultisampled2d<\n T extends TextureSampleTypes = TextureSampleTypes,\n> {\n readonly kind: `texture_multisampled_2d<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function textureMultisampled2d<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTextureMultisampled2d<T>;\nexport function textureMultisampled2d(): WgslTextureMultisampled2d<F32>;\nexport function textureMultisampled2d<T extends TextureSampleTypes>(\n sampleType?: T,\n) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_multisampled_2d<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_multisampled_2d', {\n dimension: '2d',\n sampleType: actualSampleType,\n multisampled: true,\n }));\n}\n\nexport interface texture2dArray<\n T extends TextureSampleTypes = TextureSampleTypes,\n> {\n readonly kind: `texture_2d_array<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function texture2dArray<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTexture2dArray<T>;\nexport function texture2dArray(): WgslTexture2dArray<F32>;\nexport function texture2dArray<T extends TextureSampleTypes>(sampleType?: T) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_2d_array<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_2d_array', {\n dimension: '2d-array',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface textureCube<\n T extends TextureSampleTypes = TextureSampleTypes,\n> {\n readonly kind: `texture_cube<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function textureCube<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTextureCube<T>;\nexport function textureCube(): WgslTextureCube<F32>;\nexport function textureCube<T extends TextureSampleTypes>(sampleType?: T) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_cube<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_cube', {\n dimension: 'cube',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface textureCubeArray<\n T extends TextureSampleTypes = TextureSampleTypes,\n> {\n readonly kind: `texture_cube_array<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function textureCubeArray<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTextureCubeArray<T>;\nexport function textureCubeArray(): WgslTextureCubeArray<F32>;\nexport function textureCubeArray<T extends TextureSampleTypes>(\n sampleType?: T,\n) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_cube_array<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_cube_array', {\n dimension: 'cube-array',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface texture3d<T extends TextureSampleTypes = TextureSampleTypes> {\n readonly kind: `texture_3d<${T['type']}>`;\n [$internal]: T;\n}\n\nexport function texture3d<T extends TextureSampleTypes>(\n sampleType: T,\n): WgslTexture3d<T>;\nexport function texture3d(): WgslTexture3d<F32>;\nexport function texture3d<T extends TextureSampleTypes>(sampleType?: T) {\n const actualSampleType = (sampleType || f32) as Default<T, F32>;\n const key = `texture_3d<${actualSampleType.type}>`;\n return getOrCreate(key, () =>\n createTexture('texture_3d', {\n dimension: '3d',\n sampleType: actualSampleType,\n multisampled: false,\n }));\n}\n\nexport interface textureStorage1d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> {\n readonly kind: `texture_storage_1d<${TFormat}, ${TAccess}>`;\n [$internal]: [TFormat, TAccess];\n}\n\nexport function textureStorage1d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access: TAccess): WgslStorageTexture1d<TFormat, TAccess>;\nexport function textureStorage1d<TFormat extends StorageTextureFormats>(\n format: TFormat,\n): WgslStorageTexture1d<TFormat, 'write-only'>;\nexport function textureStorage1d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access?: TAccess) {\n const actualAccess = (access || 'write-only') as Default<\n TAccess,\n 'write-only'\n >;\n const key = `texture_storage_1d<${format}, ${accessModeMap[actualAccess]}>`;\n return getOrCreate(key, () =>\n createStorageTexture('texture_storage_1d', {\n dimension: '1d',\n format,\n access: actualAccess,\n }));\n}\n\nexport interface textureStorage2d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> {\n readonly kind: `texture_storage_2d<${TFormat}, ${TAccess}>`;\n [$internal]: [TFormat, TAccess];\n}\n\nexport function textureStorage2d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access: TAccess): WgslStorageTexture2d<TFormat, TAccess>;\nexport function textureStorage2d<TFormat extends StorageTextureFormats>(\n format: TFormat,\n): WgslStorageTexture2d<TFormat, 'write-only'>;\nexport function textureStorage2d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access?: TAccess) {\n const actualAccess = (access || 'write-only') as Default<\n TAccess,\n 'write-only'\n >;\n const key = `texture_storage_2d<${format}, ${accessModeMap[actualAccess]}>`;\n return getOrCreate(key, () =>\n createStorageTexture('texture_storage_2d', {\n dimension: '2d',\n format,\n access: actualAccess,\n }));\n}\n\nexport interface textureStorage2dArray<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> {\n readonly kind: `texture_storage_2d_array<${TFormat}, ${TAccess}>`;\n [$internal]: [TFormat, TAccess];\n}\n\nexport function textureStorage2dArray<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(\n format: TFormat,\n access: TAccess,\n): WgslStorageTexture2dArray<TFormat, TAccess>;\nexport function textureStorage2dArray<TFormat extends StorageTextureFormats>(\n format: TFormat,\n): WgslStorageTexture2dArray<TFormat, 'write-only'>;\nexport function textureStorage2dArray<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access?: TAccess) {\n const actualAccess = (access || 'write-only') as Default<\n TAccess,\n 'write-only'\n >;\n const key = `texture_storage_2d_array<${format}, ${\n accessModeMap[actualAccess]\n }>`;\n return getOrCreate(\n key,\n () =>\n createStorageTexture('texture_storage_2d_array', {\n dimension: '2d-array',\n format,\n access: actualAccess,\n }),\n );\n}\n\nexport interface textureStorage3d<\n TFormat extends StorageTextureFormats = StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess = GPUStorageTextureAccess,\n> {\n readonly kind: `texture_storage_3d<${TFormat}, ${TAccess}>`;\n [$internal]: [TFormat, TAccess];\n}\n\nexport function textureStorage3d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access: TAccess): WgslStorageTexture3d<TFormat, TAccess>;\nexport function textureStorage3d<TFormat extends StorageTextureFormats>(\n format: TFormat,\n): WgslStorageTexture3d<TFormat, 'write-only'>;\nexport function textureStorage3d<\n TFormat extends StorageTextureFormats,\n TAccess extends GPUStorageTextureAccess,\n>(format: TFormat, access?: TAccess) {\n const actualAccess = (access || 'write-only') as Default<\n TAccess,\n 'write-only'\n >;\n const key = `texture_storage_3d<${format}, ${accessModeMap[actualAccess]}>`;\n return getOrCreate(key, () =>\n createStorageTexture('texture_storage_3d', {\n dimension: '3d',\n format,\n access: actualAccess,\n }));\n}\n\nexport interface textureDepth2d {\n readonly kind: 'texture_depth_2d';\n [$internal]: F32;\n}\n\nexport function textureDepth2d() {\n const key = 'texture_depth_2d';\n return getOrCreate(key, () =>\n createTexture('texture_depth_2d', {\n dimension: '2d',\n sampleType: f32,\n multisampled: false,\n })) as WgslTextureDepth2d;\n}\n\nexport interface textureDepthMultisampled2d {\n readonly kind: 'texture_depth_multisampled_2d';\n [$internal]: F32;\n}\n\nexport function textureDepthMultisampled2d() {\n const key = 'texture_depth_multisampled_2d';\n return getOrCreate(key, () =>\n createTexture('texture_depth_multisampled_2d', {\n dimension: '2d',\n sampleType: f32,\n multisampled: true,\n })) as WgslTextureDepthMultisampled2d;\n}\n\nexport interface textureDepth2dArray {\n readonly kind: 'texture_depth_2d_array';\n [$internal]: F32;\n}\n\nexport function textureDepth2dArray() {\n const key = 'texture_depth_2d_array';\n return getOrCreate(key, () =>\n createTexture('texture_depth_2d_array', {\n dimension: '2d-array',\n sampleType: f32,\n multisampled: false,\n })) as WgslTextureDepth2dArray;\n}\n\nexport interface textureDepthCube {\n readonly kind: 'texture_depth_cube';\n [$internal]: F32;\n}\n\nexport function textureDepthCube() {\n const key = 'texture_depth_cube';\n return getOrCreate(key, () =>\n createTexture('texture_depth_cube', {\n dimension: 'cube',\n sampleType: f32,\n multisampled: false,\n })) as WgslTextureDepthCube;\n}\n\nexport interface textureDepthCubeArray {\n readonly kind: 'texture_depth_cube_array';\n [$internal]: F32;\n}\n\nexport function textureDepthCubeArray() {\n const key = 'texture_depth_cube_array';\n return getOrCreate(key, () =>\n createTexture('texture_depth_cube_array', {\n dimension: 'cube-array',\n sampleType: f32,\n multisampled: false,\n })) as WgslTextureDepthCubeArray;\n}\n\nexport interface textureExternal {\n readonly kind: 'texture_external';\n [$internal]: true;\n}\n\nexport function textureExternal() {\n const key = 'texture_external';\n return getOrCreate(key, () => ({\n [$internal]: true,\n [$repr]: undefined as unknown as textureExternal,\n type: 'texture_external',\n dimension: '2d',\n })) as WgslExternalTexture;\n}\n\nexport function isWgslTexture(value: unknown): value is WgslTexture {\n return (\n !!(value as WgslTexture)[$internal] &&\n typeof (value as WgslTexture).multisampled === 'boolean'\n );\n}\n\nexport function isWgslStorageTexture(\n value: unknown,\n): value is WgslStorageTexture {\n return (\n !!(value as WgslStorageTexture)[$internal] &&\n typeof (value as WgslStorageTexture).format === 'string' &&\n typeof (value as WgslStorageTexture).access === 'string'\n );\n}\n\nexport function isWgslExternalTexture(\n value: unknown,\n): value is WgslExternalTexture {\n return (\n !!(value as WgslExternalTexture)[$internal] &&\n (value as WgslExternalTexture).type === 'texture_external'\n );\n}\n"],"mappings":"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C,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAClBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EACdpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,EAAG,CAAC,EAAE,EAAIoB,EAAG,CAAC,EAAE,EAChBpB,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","names":["MatBase","createMatSchema","options","construct","dualImpl","args","elements","arg","i","isVec","f32","schema","stitch","identityFunctions","translation4","scaling4","rotationX4","rotationY4","rotationZ4","mat2x2Impl","$internal","value","$resolve","snip","_","mat2x2f","mat2x2fImpl","e0","e1","vec2f","mat3x3Impl","mat3x3f","mat3x3fImpl","x","y","z","vec3f","mat4x4Impl","mat4x4f","mat4x4fImpl","w","vec4f","identity2","comptime","identity3","identity4","vector","v","a","matToArray","mat","idx","smoothstepScalar","edge0","edge1","x","t","clamp","value","low","high","divInteger","lhs","rhs","bitcastU32toF32Impl","n","dataView","bitcastU32toI32Impl","vec2b","$internal","vec2f","vec2h","vec2i","vec2u","vec3b","vec3f","vec3h","vec3i","vec3u","vec4b","vec4f","vec4h","vec4i","vec4u","lengthVec2","v","lengthVec3","lengthVec4","dotVec2","lhs","rhs","dotVec3","dotVec4","unary2f","op","a","unary2h","unary2i","unary2u","unary3f","unary3h","unary3i","unary3u","unary4f","unary4h","unary4i","unary4u","unary2x2f","a_","mat2x2f","unary3x3f","mat3x3f","unary4x4f","mat4x4f","binaryComponentWise2f","b","binaryComponentWise2h","binaryComponentWise2i","binaryComponentWise2u","binaryComponentWise3f","binaryComponentWise3h","binaryComponentWise3i","binaryComponentWise3u","binaryComponentWise4f","binaryComponentWise4h","binaryComponentWise4i","binaryComponentWise4u","binaryComponentWise2x2f","b_","binaryComponentWise3x3f","binaryComponentWise4x4f","ternaryComponentWise2f","c","ternaryComponentWise2h","ternaryComponentWise3f","ternaryComponentWise3h","ternaryComponentWise4f","ternaryComponentWise4h","VectorOps","e1","e2","low","high","clamp","smoothstepScalar","e","s","m","m_","divInteger","len","base","exponent","e3","val","value","n","f","bitcastU32toF32Impl","bitcastU32toI32Impl","cpuAdd","lhs","rhs","isVecInstance","VectorOps","isMatInstance","add","dualImpl","args","uargs","unify","isNumericSchema","stitch","cpuSub","cpuMul","sub","isFloat32VecInstance","mul","returnType","cpuDiv","schema","vecTypeToConstructor","$internal","div","f32","f16","abstractFloat","mod","a","b","cpuNeg","value","neg","arg","textureDescriptorToSchema","desc","textureMultisampled2d","texture1d","texture2d","texture2dArray","texture3d","textureCube","textureCubeArray","textureStorage1d","textureStorage2d","textureStorage2dArray","textureStorage3d","createTexture","type","props","sampleTypes","$internal","$repr","createStorageTexture","textureCache","accessModeMap","getOrCreate","key","factory","cached","sampleType","actualSampleType","f32","format","access","actualAccess","textureDepth2d","textureDepthMultisampled2d","textureDepth2dArray","textureDepthCube","textureDepthCubeArray","textureExternal","isWgslTexture","value","isWgslStorageTexture"]}
@@ -0,0 +1,2 @@
1
+ import{r as q,s as H,t as J,u as Q}from"./chunk-EHLRP4V2.js";import{$ as M,Ab as E,Ba as l,Bb as K,C as y,D as S,E as x,Gb as j,La as s,P as h,Q as v,U as T,Xa as b,_ as t,a as o,aa as U,da as $,eb as w,g as p,ga as a,gb as W,hb as d,jb as g,kb as C,lb as P,nb as z,ob as A,pb as F,qb as I,rb as G,sb as k,tb as D,ub as L,v as m,vb as V,wb as O,xb as R,yb as _,z as f,zb as B}from"./chunk-SHSILTWI.js";var Y=["vec2f","vec3f","vec4f","vec2h","vec3h","vec4h","vec2i","vec3i","vec4i","vec2u","vec3u","vec4u","mat2x2f","mat3x3f","mat4x4f"],X={add:q,sub:H,mul:J,div:Q},Z={f:{1:C,2:z,3:k,4:R},h:{1:P,2:A,3:D,4:_},i:{1:g,2:F,3:L,4:B},u:{1:d,2:I,3:V,4:E},b:{1:W,2:G,3:O,4:K}};function N(e,r){if(Y.includes(e.dataType.type)&&r in X)return a(new M(r,e,X[r][o].gpuImpl),t,e.origin);if(y(e.dataType)&&r==="length")return e.dataType.elementCount===0?a(s`arrayLength(&${e})`,d,"runtime"):a(e.dataType.elementCount,w,"constant");if(f(e.dataType)&&r==="columns")return a(new U(e),t,e.origin);if(S(e.dataType)||T(e.dataType)){let n=e.dataType.propTypes[r];return n?(n=v(n),a(s`${e}.${r}`,n,e.origin==="argument"?"argument":!$(e)&&!h(n)?e.origin:e.origin==="constant"||e.origin==="constant-tgpu-const-ref"?"constant":"runtime")):void 0}if(x(e.dataType)){let n=b(e);return r==="$"?n:N(n,r)}if(m(e.dataType)&&r==="kind")return a(e.dataType.type,t,"constant");let i=r.length;if(m(e.dataType)&&i>=1&&i<=4){let n=e.dataType.type.includes("bool")?"b":e.dataType.type[4],u=Z[n][i];return u?a(l(e)?e.value[r]:s`${e}.${r}`,u,e.origin==="argument"&&i===1?"argument":e.origin==="constant"||e.origin==="constant-tgpu-const-ref"?"constant":"runtime"):void 0}if(l(e)||e.dataType.type==="unknown")return j(e.value[r])}function ue(){return{[o]:!0,type:"sampler",[p]:void 0}}function fe(){return{[o]:!0,type:"sampler_comparison",[p]:void 0}}function ye(e){return!!e[o]&&e.type==="sampler"}function Se(e){return!!e[o]&&e.type==="sampler_comparison"}function ve(e){return new c(e)}var c=class{constructor(r){this.inner=r}[o]=!0;type="atomic"};export{X as a,N as b,ue as c,fe as d,ye as e,Se as f,ve as g};
2
+ //# sourceMappingURL=chunk-LMPPDGRD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tgsl/accessProp.ts","../src/data/sampler.ts","../src/data/atomic.ts"],"sourcesContent":["import { stitch } from '../core/resolve/stitch.ts';\nimport {\n type AnyData,\n InfixDispatch,\n isUnstruct,\n MatrixColumnsAccess,\n undecorate,\n UnknownData,\n} from '../data/dataTypes.ts';\nimport { abstractInt, bool, f16, f32, i32, u32 } from '../data/numeric.ts';\nimport { derefSnippet } from '../data/ref.ts';\nimport { isEphemeralSnippet, snip, type Snippet } from '../data/snippet.ts';\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 '../data/vector.ts';\nimport {\n isMat,\n isNaturallyEphemeral,\n isPtr,\n isVec,\n isWgslArray,\n isWgslStruct,\n} from '../data/wgslTypes.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport { add, div, mul, sub } from '../std/operators.ts';\nimport { isKnownAtComptime } from '../types.ts';\nimport { coerceToSnippet } from './generationHelpers.ts';\n\nconst infixKinds = [\n 'vec2f',\n 'vec3f',\n 'vec4f',\n 'vec2h',\n 'vec3h',\n 'vec4h',\n 'vec2i',\n 'vec3i',\n 'vec4i',\n 'vec2u',\n 'vec3u',\n 'vec4u',\n 'mat2x2f',\n 'mat3x3f',\n 'mat4x4f',\n];\n\nexport const infixOperators = {\n add,\n sub,\n mul,\n div,\n} as const;\n\nexport type InfixOperator = keyof typeof infixOperators;\n\ntype SwizzleableType = 'f' | 'h' | 'i' | 'u' | 'b';\ntype SwizzleLength = 1 | 2 | 3 | 4;\n\nconst swizzleLenToType: Record<\n SwizzleableType,\n Record<SwizzleLength, AnyData>\n> = {\n f: {\n 1: f32,\n 2: vec2f,\n 3: vec3f,\n 4: vec4f,\n },\n h: {\n 1: f16,\n 2: vec2h,\n 3: vec3h,\n 4: vec4h,\n },\n i: {\n 1: i32,\n 2: vec2i,\n 3: vec3i,\n 4: vec4i,\n },\n u: {\n 1: u32,\n 2: vec2u,\n 3: vec3u,\n 4: vec4u,\n },\n b: {\n 1: bool,\n 2: vec2b,\n 3: vec3b,\n 4: vec4b,\n },\n} as const;\n\nexport function accessProp(\n target: Snippet,\n propName: string,\n): Snippet | undefined {\n if (infixKinds.includes(target.dataType.type) && propName in infixOperators) {\n return snip(\n new InfixDispatch(\n propName,\n target,\n infixOperators[propName as InfixOperator][$internal].gpuImpl,\n ),\n UnknownData,\n /* origin */ target.origin,\n );\n }\n\n if (isWgslArray(target.dataType) && propName === 'length') {\n if (target.dataType.elementCount === 0) {\n // Dynamically-sized array\n return snip(stitch`arrayLength(&${target})`, u32, /* origin */ 'runtime');\n }\n\n return snip(\n target.dataType.elementCount,\n abstractInt,\n /* origin */ 'constant',\n );\n }\n\n if (isMat(target.dataType) && propName === 'columns') {\n return snip(\n new MatrixColumnsAccess(target),\n UnknownData,\n /* origin */ target.origin,\n );\n }\n\n if (isWgslStruct(target.dataType) || isUnstruct(target.dataType)) {\n let propType = target.dataType.propTypes[propName];\n if (!propType) {\n return undefined;\n }\n propType = undecorate(propType);\n\n return snip(\n stitch`${target}.${propName}`,\n propType,\n /* origin */ target.origin === 'argument'\n ? 'argument'\n : !isEphemeralSnippet(target) && !isNaturallyEphemeral(propType)\n ? target.origin\n : target.origin === 'constant' ||\n target.origin === 'constant-tgpu-const-ref'\n ? 'constant'\n : 'runtime',\n );\n }\n\n if (isPtr(target.dataType)) {\n const derefed = derefSnippet(target);\n\n if (propName === '$') {\n // Dereference pointer\n return derefed;\n }\n\n // Sometimes values that are typed as pointers aren't instances of `d.ref`, so we\n // allow access to member props as if it wasn't a pointer.\n return accessProp(derefed, propName);\n }\n\n if (isVec(target.dataType)) {\n // Example: d.vec3f().kind === 'vec3f'\n if (propName === 'kind') {\n return snip(target.dataType.type, UnknownData, 'constant');\n }\n }\n\n const propLength = propName.length;\n if (isVec(target.dataType) && propLength >= 1 && propLength <= 4) {\n const swizzleTypeChar = target.dataType.type.includes('bool')\n ? 'b'\n : (target.dataType.type[4] as SwizzleableType);\n const swizzleType =\n swizzleLenToType[swizzleTypeChar][propLength as SwizzleLength];\n if (!swizzleType) {\n return undefined;\n }\n\n return snip(\n isKnownAtComptime(target)\n // biome-ignore lint/suspicious/noExplicitAny: it's fine, the prop is there\n ? (target.value as any)[propName]\n : stitch`${target}.${propName}`,\n swizzleType,\n // Swizzling creates new vectors (unless they're on the lhs of an assignment, but that's not yet supported in WGSL)\n /* origin */ target.origin === 'argument' && propLength === 1\n ? 'argument'\n : target.origin === 'constant' ||\n target.origin === 'constant-tgpu-const-ref'\n ? 'constant'\n : 'runtime',\n );\n }\n\n if (isKnownAtComptime(target) || target.dataType.type === 'unknown') {\n // biome-ignore lint/suspicious/noExplicitAny: we either know exactly what it is, or have no idea at all\n return coerceToSnippet((target.value as any)[propName]);\n }\n\n return undefined;\n}\n","import { $internal, $repr } from '../shared/symbols.ts';\nimport type { BaseData } from './wgslTypes.ts';\n\nexport interface WgslSamplerProps {\n addressModeU?: GPUAddressMode;\n addressModeV?: GPUAddressMode;\n /**\n * Specifies the address modes for the texture width, height, and depth\n * coordinates, respectively.\n */\n addressModeW?: GPUAddressMode;\n /**\n * Specifies the sampling behavior when the sample footprint is smaller than or equal to one\n * texel.\n */\n magFilter?: GPUFilterMode;\n /**\n * Specifies the sampling behavior when the sample footprint is larger than one texel.\n */\n minFilter?: GPUFilterMode;\n /**\n * Specifies behavior for sampling between mipmap levels.\n */\n mipmapFilter?: GPUMipmapFilterMode;\n lodMinClamp?: number;\n /**\n * Specifies the minimum and maximum levels of detail, respectively, used internally when\n * sampling a texture.\n */\n lodMaxClamp?: number;\n /**\n * Specifies the maximum anisotropy value clamp used by the sampler. Anisotropic filtering is\n * enabled when {@link GPUSamplerDescriptor.maxAnisotropy} is > 1 and the implementation supports it.\n * Anisotropic filtering improves the image quality of textures sampled at oblique viewing\n * angles. Higher {@link GPUSamplerDescriptor.maxAnisotropy} values indicate the maximum ratio of\n * anisotropy supported when filtering.\n *\n * Most implementations support {@link GPUSamplerDescriptor.maxAnisotropy} values in range\n * between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor.maxAnisotropy}\n * will be clamped to the maximum value that the platform supports.\n * The precise filtering behavior is implementation-dependent.\n */\n maxAnisotropy?: number;\n}\n\nexport interface WgslComparisonSamplerProps {\n compare: GPUCompareFunction;\n addressModeU?: GPUAddressMode;\n addressModeV?: GPUAddressMode;\n /**\n * Specifies the address modes for the texture width, height, and depth\n * coordinates, respectively.\n */\n addressModeW?: GPUAddressMode;\n /**\n * Specifies the sampling behavior when the sample footprint is smaller than or equal to one\n * texel.\n */\n magFilter?: GPUFilterMode;\n /**\n * Specifies the sampling behavior when the sample footprint is larger than one texel.\n */\n minFilter?: GPUFilterMode;\n /**\n * Specifies behavior for sampling between mipmap levels.\n */\n mipmapFilter?: GPUMipmapFilterMode;\n lodMinClamp?: number;\n /**\n * Specifies the minimum and maximum levels of detail, respectively, used internally when\n * sampling a texture.\n */\n lodMaxClamp?: number;\n /**\n * Specifies the maximum anisotropy value clamp used by the sampler. Anisotropic filtering is\n * enabled when {@link GPUSamplerDescriptor.maxAnisotropy} is > 1 and the implementation supports it.\n * Anisotropic filtering improves the image quality of textures sampled at oblique viewing\n * angles. Higher {@link GPUSamplerDescriptor.maxAnisotropy} values indicate the maximum ratio of\n * anisotropy supported when filtering.\n *\n * Most implementations support {@link GPUSamplerDescriptor.maxAnisotropy} values in range\n * between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor.maxAnisotropy}\n * will be clamped to the maximum value that the platform supports.\n * The precise filtering behavior is implementation-dependent.\n */\n maxAnisotropy?: number;\n}\n\nconst SamplerPropsDefaults: WgslSamplerProps = {\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge',\n addressModeW: 'clamp-to-edge',\n magFilter: 'nearest',\n minFilter: 'nearest',\n mipmapFilter: 'nearest',\n lodMinClamp: 0,\n lodMaxClamp: 32,\n maxAnisotropy: 1,\n};\n\nexport interface sampler {\n [$internal]: true;\n type: 'sampler';\n}\n\nexport function sampler(): WgslSampler {\n return {\n [$internal]: true,\n type: 'sampler',\n [$repr]: undefined as unknown as sampler,\n };\n}\n\nexport interface comparisonSampler {\n [$internal]: true;\n type: 'sampler_comparison';\n}\n\nexport function comparisonSampler(): WgslComparisonSampler {\n return {\n [$internal]: true,\n type: 'sampler_comparison',\n [$repr]: undefined as unknown as comparisonSampler,\n };\n}\n\nexport interface WgslSampler extends BaseData {\n readonly [$repr]: sampler;\n readonly type: 'sampler';\n}\n\nexport interface WgslComparisonSampler extends BaseData {\n readonly [$repr]: comparisonSampler;\n readonly type: 'sampler_comparison';\n}\n\nexport function isWgslSampler(value: unknown): value is WgslSampler {\n return (\n !!(value as WgslSampler)[$internal] &&\n (value as WgslSampler).type === 'sampler'\n );\n}\n\nexport function isWgslComparisonSampler(\n value: unknown,\n): value is WgslComparisonSampler {\n return (\n !!(value as WgslComparisonSampler)[$internal] &&\n (value as WgslComparisonSampler).type === 'sampler_comparison'\n );\n}\n","import type { Infer, MemIdentity } from '../shared/repr.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport {\n $gpuRepr,\n $memIdent,\n $repr,\n $validStorageSchema,\n $validUniformSchema,\n $validVertexSchema,\n} from '../shared/symbols.ts';\nimport type { Atomic, atomicI32, atomicU32, I32, U32 } from './wgslTypes.ts';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Marks a concrete integer scalar type schema (u32 or i32) as a WGSL atomic.\n *\n * @example\n * const atomicU32 = d.atomic(d.u32);\n * const atomicI32 = d.atomic(d.i32);\n *\n * @param data Underlying type schema.\n */\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<TSchema> {\n return new AtomicImpl(data);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass AtomicImpl<TSchema extends U32 | I32> implements Atomic<TSchema> {\n public readonly [$internal] = true;\n public readonly type = 'atomic';\n\n // Type-tokens, not available at runtime\n declare readonly [$repr]: Infer<TSchema>;\n declare readonly [$memIdent]: MemIdentity<TSchema>;\n declare readonly [$gpuRepr]: TSchema extends U32 ? atomicU32 : atomicI32;\n declare readonly [$validStorageSchema]: true;\n declare readonly [$validUniformSchema]: true;\n declare readonly [$validVertexSchema]: true;\n // ---\n\n constructor(public readonly inner: TSchema) {}\n}\n"],"mappings":"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","names":["infixKinds","infixOperators","add","sub","mul","div","swizzleLenToType","f32","vec2f","vec3f","vec4f","f16","vec2h","vec3h","vec4h","i32","vec2i","vec3i","vec4i","u32","vec2u","vec3u","vec4u","bool","vec2b","vec3b","vec4b","accessProp","target","propName","snip","InfixDispatch","$internal","UnknownData","isWgslArray","stitch","abstractInt","isMat","MatrixColumnsAccess","isWgslStruct","isUnstruct","propType","undecorate","isEphemeralSnippet","isNaturallyEphemeral","isPtr","derefed","derefSnippet","isVec","propLength","swizzleTypeChar","swizzleType","isKnownAtComptime","coerceToSnippet","sampler","$internal","$repr","comparisonSampler","isWgslSampler","value","isWgslComparisonSampler","atomic","data","AtomicImpl","inner","$internal"]}
@@ -0,0 +1,2 @@
1
+ import{Ac as V,B as S,C as T,D,G as w,H as _,Hb as h,Ib as E,K as v,L as p,Lb as O,S as L,T as x,U as b,V as u,W as d,X as k,a as o,gb as $,hb as c,kb as W,vb as g,xb as z}from"./chunk-SHSILTWI.js";var R={f32:4,f16:2,i32:4,u32:4,bool:4,u16:2,vec2f:8,vec2h:4,vec2i:8,vec2u:8,vec2b:8,vec3f:16,vec3h:8,vec3i:16,vec3u:16,vec3b:16,vec4f:16,vec4h:8,vec4i:16,vec4u:16,vec4b:16,mat2x2f:8,mat3x3f:16,mat4x4f:16,atomic:4};function j(e){let t=e?.type,r=R[t];if(r!==void 0)return r;if(D(e))return Object.values(e.propTypes).map(s).reduce((n,a)=>n>a?n:a);if(T(e))return s(e.elementType);if(b(e)){let n=Object.values(e.propTypes)[0];return n?d(n)??1:1}if(x(e))return d(e.elementType)??1;if(p(e)||u(e))return d(e)??s(e.inner);if(O.has(t))return 1;throw new Error(`Cannot determine alignment of data: ${E(e)}`)}function G(e){if(b(e)){let t=Object.values(e.propTypes)[0];return t?y(t):1}return x(e)?y(e.elementType):u(e)?d(e)??y(e.inner):d(e)??1}var U=new WeakMap,C=new WeakMap;function s(e){let t=U.get(e);return t===void 0&&(t=j(e),U.set(e,t)),t}function y(e){let t=C.get(e);return t===void 0&&(t=G(e),C.set(e,t)),t}function ne(e){return s(e)}var f=(e,t)=>{let r=t-1,n=~r;return(e&r)===0?e:(e&n)+t};var K={bool:4,f32:4,f16:2,i32:4,u32:4,u16:2,vec2f:8,vec2h:4,vec2i:8,vec2u:8,"vec2<bool>":8,vec3f:12,vec3h:6,vec3i:12,vec3u:12,"vec3<bool>":12,vec4f:16,vec4h:8,vec4i:16,vec4u:16,"vec4<bool>":16,mat2x2f:16,mat3x3f:48,mat4x4f:64,uint8:1,uint8x2:2,uint8x4:4,sint8:1,sint8x2:2,sint8x4:4,unorm8:1,unorm8x2:2,unorm8x4:4,snorm8:1,snorm8x2:2,snorm8x4:4,uint16:2,uint16x2:4,uint16x4:8,sint16:2,sint16x2:4,sint16x4:8,unorm16:2,unorm16x2:4,unorm16x4:8,snorm16:2,snorm16x2:4,snorm16x4:8,float16:2,float16x2:4,float16x4:8,float32:4,float32x2:8,float32x3:12,float32x4:16,uint32:4,uint32x2:8,uint32x3:12,uint32x4:16,sint32:4,sint32x2:8,sint32x3:12,sint32x4:16,"unorm10-10-10-2":4,"unorm8x4-bgra":4,atomic:4};function H(e){let t=0,r=e.propTypes;for(let n of Object.values(r)){if(Number.isNaN(t))throw new Error("Only the last property of a struct can be unbounded");if(t=f(t,s(n)),t+=l(n),Number.isNaN(t)&&n.type!=="array")throw new Error("Cannot nest unbounded struct within another struct")}return f(t,s(e))}function q(e){let t=0,r=e.propTypes;for(let n of Object.values(r)){let a=y(n);t=f(t,a),t+=l(n)}return t}function J(e){let t=K[e?.type];if(t!==void 0)return t;if(D(e))return H(e);if(b(e))return q(e);if(T(e)){if(e.elementCount===0)return Number.NaN;let r=s(e.elementType);return f(l(e.elementType),r)*e.elementCount}if(x(e)){let r=y(e.elementType);return f(l(e.elementType),r)*e.elementCount}if(p(e)||u(e))return k(e)??l(e.inner);throw new Error(`Cannot determine size of data: ${e}`)}var N=new WeakMap;function l(e){let t=N.get(e);return t===void 0&&(t=J(e),N.set(e,t)),t}function ue(e){return l(e)}function m(e,t){return p(e)?new B(e.inner,[t,...e.attribs]):u(e)?new A(e.inner,[t,...e.attribs]):L(e)?new A(e,[t]):new B(e,[t])}function xe(e,t){return m(t,{[o]:!0,type:"@align",params:[e]})}function be(e,t){return m(t,{[o]:!0,type:"@size",params:[e]})}function ge(e,t){return m(t,{[o]:!0,type:"@location",params:[e]})}function Te(e,t){return m(t,{[o]:!0,type:"@interpolate",params:[e]})}function De(e){if(!Q(e))throw new Error("The @invariant attribute must only be applied to the position built-in value.");let t=p(e)||u(e)?e.attribs.find(v):void 0;if(!t||t.params[0]!=="position")throw new Error("The @invariant attribute must only be applied to the position built-in value.");return m(e,{[o]:!0,type:"@invariant",params:[]})}function Q(e){return(p(e)||u(e))&&e.attribs.find(v)!==void 0}function Ie(e){return!p(e)&&!u(e)?"":e.attribs.map(t=>t.params.length===0?`${t.type} `:`${t.type}(${t.params.join(", ")}) `).join("")}var I=class{constructor(t,r){this.inner=t;this.attribs=r;let n=r.find(w)?.params[0],a=r.find(_)?.params[0];if(n!==void 0){if(n<=0)throw new Error(`Custom data alignment must be a positive number, got: ${n}.`);if(Math.log2(n)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${n}.`);if(S(this.inner)&&n%s(this.inner)!==0)throw new Error(`Custom alignment has to be a multiple of the standard data alignment. Got: ${n}, expected multiple of: ${s(this.inner)}.`)}if(a!==void 0){if(a<l(this.inner))throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${a}, expected at least: ${l(this.inner)}.`);if(a<=0)throw new Error(`Custom data size must be a positive number. Got: ${a}.`)}}[o]=!0},B=class extends I{[o]=!0;type="decorated"},A=class extends I{[o]=!0;type="loose-decorated"};var F=h(((e,t)=>t===void 0?h(r=>P(e,r)):P(e,t))).$name("arrayOf");function P(e,t){let r=n=>{if(n&&n.length!==t)throw new Error(`Array schema of ${t} elements of type ${e.type} called with ${n.length} argument(s).`);return Array.from({length:t},(a,M)=>V(e,n?.[M]))};if(Object.setPrototypeOf(r,X),Number.isNaN(l(e)))throw new Error("Cannot nest runtime sized arrays.");if(r.elementType=e,!Number.isInteger(t)||t<0)throw new Error(`Cannot create array schema with invalid element count: ${t}.`);return r.elementCount=t,r}var X={[o]:!0,type:"array",toString(){return`arrayOf(${this.elementType}, ${this.elementCount})`}};function i(e,t){return m(e,{[o]:!0,type:"@builtin",params:[t]})}var ze={vertexIndex:i(c,"vertex_index"),instanceIndex:i(c,"instance_index"),position:i(z,"position"),clipDistances:i(F(c,8),"clip_distances"),frontFacing:i($,"front_facing"),fragDepth:i(W,"frag_depth"),sampleIndex:i(c,"sample_index"),sampleMask:i(c,"sample_mask"),localInvocationId:i(g,"local_invocation_id"),localInvocationIndex:i(c,"local_invocation_index"),globalInvocationId:i(g,"global_invocation_id"),workgroupId:i(g,"workgroup_id"),numWorkgroups:i(g,"num_workgroups"),subgroupInvocationId:i(c,"subgroup_invocation_id"),subgroupSize:i(c,"subgroup_size")};export{s as a,y as b,ne as c,f as d,l as e,ue as f,xe as g,be as h,ge as i,Te as j,De as k,Q as l,Ie as m,F as n,ze as o};
2
+ //# sourceMappingURL=chunk-MBB2XFH6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data/alignmentOf.ts","../src/mathUtils.ts","../src/data/sizeOf.ts","../src/data/attributes.ts","../src/data/array.ts","../src/builtin.ts"],"sourcesContent":["import { safeStringify } from '../shared/stringify.ts';\nimport {\n type AnyData,\n getCustomAlignment,\n isDisarray,\n isLooseDecorated,\n isUnstruct,\n} from './dataTypes.ts';\nimport { packedFormats } from './vertexFormatData.ts';\nimport {\n type BaseData,\n isDecorated,\n isWgslArray,\n isWgslStruct,\n} from './wgslTypes.ts';\n\nconst knownAlignmentMap: Record<string, number> = {\n f32: 4,\n f16: 2,\n i32: 4,\n u32: 4,\n bool: 4,\n u16: 2,\n vec2f: 8,\n vec2h: 4,\n vec2i: 8,\n vec2u: 8,\n vec2b: 8,\n vec3f: 16,\n vec3h: 8,\n vec3i: 16,\n vec3u: 16,\n vec3b: 16,\n vec4f: 16,\n vec4h: 8,\n vec4i: 16,\n vec4u: 16,\n vec4b: 16,\n mat2x2f: 8,\n mat3x3f: 16,\n mat4x4f: 16,\n atomic: 4,\n};\n\nfunction computeAlignment(data: object): number {\n const dataType = (data as BaseData)?.type;\n const knownAlignment = knownAlignmentMap[dataType];\n if (knownAlignment !== undefined) {\n return knownAlignment;\n }\n\n if (isWgslStruct(data)) {\n return Object.values(data.propTypes as Record<string, BaseData>)\n .map(alignmentOf)\n .reduce((a, b) => (a > b ? a : b));\n }\n\n if (isWgslArray(data)) {\n return alignmentOf(data.elementType);\n }\n\n if (isUnstruct(data)) {\n // A loose struct is aligned to its first property.\n const firstProp =\n Object.values(data.propTypes as Record<string, BaseData>)[0];\n return firstProp ? (getCustomAlignment(firstProp) ?? 1) : 1;\n }\n\n if (isDisarray(data)) {\n return getCustomAlignment(data.elementType) ?? 1;\n }\n\n if (isDecorated(data) || isLooseDecorated(data)) {\n return getCustomAlignment(data) ?? alignmentOf(data.inner);\n }\n\n if (packedFormats.has(dataType)) {\n return 1;\n }\n\n throw new Error(\n `Cannot determine alignment of data: ${safeStringify(data)}`,\n );\n}\n\nfunction computeCustomAlignment(data: BaseData): number {\n if (isUnstruct(data)) {\n // A loose struct is aligned to its first property.\n const firstProp =\n Object.values(data.propTypes as Record<string, BaseData>)[0];\n return firstProp ? customAlignmentOf(firstProp) : 1;\n }\n\n if (isDisarray(data)) {\n return customAlignmentOf(data.elementType);\n }\n\n if (isLooseDecorated(data)) {\n return getCustomAlignment(data) ?? customAlignmentOf(data.inner);\n }\n\n return getCustomAlignment(data) ?? 1;\n}\n\n/**\n * Since alignments can be inferred from data types, they are not stored on them.\n * Instead, this weak map acts as an extended property of those data types.\n */\nconst cachedAlignments = new WeakMap<object, number>();\n\nconst cachedCustomAlignments = new WeakMap<object, number>();\n\nexport function alignmentOf(data: BaseData): number {\n let alignment = cachedAlignments.get(data);\n if (alignment === undefined) {\n alignment = computeAlignment(data);\n cachedAlignments.set(data, alignment);\n }\n\n return alignment;\n}\n\nexport function customAlignmentOf(data: BaseData): number {\n let alignment = cachedCustomAlignments.get(data);\n if (alignment === undefined) {\n alignment = computeCustomAlignment(data);\n cachedCustomAlignments.set(data, alignment);\n }\n\n return alignment;\n}\n\n/**\n * Returns the alignment (in bytes) of data represented by the `schema`.\n */\nexport function PUBLIC_alignmentOf(schema: AnyData): number {\n return alignmentOf(schema);\n}\n","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n","import { roundUp } from '../mathUtils.ts';\nimport { alignmentOf, customAlignmentOf } from './alignmentOf.ts';\nimport type { AnyData, LooseTypeLiteral, Unstruct } from './dataTypes.ts';\nimport {\n getCustomSize,\n isDisarray,\n isLooseDecorated,\n isUnstruct,\n} from './dataTypes.ts';\nimport type { BaseData, WgslStruct, WgslTypeLiteral } from './wgslTypes.ts';\nimport { isDecorated, isWgslArray, isWgslStruct } from './wgslTypes.ts';\n\nconst knownSizesMap: Record<string, number> = {\n bool: 4,\n f32: 4,\n f16: 2,\n i32: 4,\n u32: 4,\n u16: 2,\n vec2f: 8,\n vec2h: 4,\n vec2i: 8,\n vec2u: 8,\n 'vec2<bool>': 8,\n vec3f: 12,\n vec3h: 6,\n vec3i: 12,\n vec3u: 12,\n 'vec3<bool>': 12,\n vec4f: 16,\n vec4h: 8,\n vec4i: 16,\n vec4u: 16,\n 'vec4<bool>': 16,\n mat2x2f: 16,\n mat3x3f: 48,\n mat4x4f: 64,\n uint8: 1,\n uint8x2: 2,\n uint8x4: 4,\n sint8: 1,\n sint8x2: 2,\n sint8x4: 4,\n unorm8: 1,\n unorm8x2: 2,\n unorm8x4: 4,\n snorm8: 1,\n snorm8x2: 2,\n snorm8x4: 4,\n uint16: 2,\n uint16x2: 4,\n uint16x4: 8,\n sint16: 2,\n sint16x2: 4,\n sint16x4: 8,\n unorm16: 2,\n unorm16x2: 4,\n unorm16x4: 8,\n snorm16: 2,\n snorm16x2: 4,\n snorm16x4: 8,\n float16: 2,\n float16x2: 4,\n float16x4: 8,\n float32: 4,\n float32x2: 8,\n float32x3: 12,\n float32x4: 16,\n uint32: 4,\n uint32x2: 8,\n uint32x3: 12,\n uint32x4: 16,\n sint32: 4,\n sint32x2: 8,\n sint32x3: 12,\n sint32x4: 16,\n 'unorm10-10-10-2': 4,\n 'unorm8x4-bgra': 4,\n atomic: 4,\n} satisfies Partial<Record<WgslTypeLiteral | LooseTypeLiteral, number>>;\n\nfunction sizeOfStruct(struct: WgslStruct) {\n let size = 0;\n const propTypes = struct.propTypes as Record<string, BaseData>;\n for (const property of Object.values(propTypes)) {\n if (Number.isNaN(size)) {\n throw new Error('Only the last property of a struct can be unbounded');\n }\n\n size = roundUp(size, alignmentOf(property));\n size += sizeOf(property);\n\n if (Number.isNaN(size) && property.type !== 'array') {\n throw new Error('Cannot nest unbounded struct within another struct');\n }\n }\n\n return roundUp(size, alignmentOf(struct));\n}\n\nfunction sizeOfUnstruct(data: Unstruct) {\n let size = 0;\n\n const propTypes = data.propTypes as Record<string, BaseData>;\n for (const property of Object.values(propTypes)) {\n const alignment = customAlignmentOf(property);\n size = roundUp(size, alignment);\n size += sizeOf(property);\n }\n\n return size;\n}\n\nfunction computeSize(data: object): number {\n const knownSize = knownSizesMap[(data as BaseData)?.type];\n\n if (knownSize !== undefined) {\n return knownSize;\n }\n\n if (isWgslStruct(data)) {\n return sizeOfStruct(data);\n }\n\n if (isUnstruct(data)) {\n return sizeOfUnstruct(data);\n }\n\n if (isWgslArray(data)) {\n if (data.elementCount === 0) {\n return Number.NaN;\n }\n\n const alignment = alignmentOf(data.elementType);\n const stride = roundUp(sizeOf(data.elementType), alignment);\n return stride * data.elementCount;\n }\n\n if (isDisarray(data)) {\n const alignment = customAlignmentOf(data.elementType);\n const stride = roundUp(sizeOf(data.elementType), alignment);\n return stride * data.elementCount;\n }\n\n if (isDecorated(data) || isLooseDecorated(data)) {\n return getCustomSize(data) ?? sizeOf(data.inner);\n }\n\n throw new Error(`Cannot determine size of data: ${data}`);\n}\n\n/**\n * Since sizes can be inferred from data types, they are not stored on them.\n * Instead, this weak map acts as an extended property of those data types.\n */\nconst cachedSizes = new WeakMap<BaseData, number>();\n\nexport function sizeOf(schema: BaseData): number {\n let size = cachedSizes.get(schema);\n\n if (size === undefined) {\n size = computeSize(schema);\n cachedSizes.set(schema, size);\n }\n\n return size;\n}\n\n/**\n * Returns the size (in bytes) of data represented by the `schema`.\n */\nexport function PUBLIC_sizeOf(schema: AnyData): number {\n return sizeOf(schema);\n}\n","import type {\n Infer,\n InferGPU,\n InferPartial,\n IsValidStorageSchema,\n IsValidUniformSchema,\n IsValidVertexSchema,\n MemIdentity,\n} from '../shared/repr.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport {\n $gpuRepr,\n $invalidSchemaReason,\n $memIdent,\n $repr,\n $reprPartial,\n $validStorageSchema,\n $validUniformSchema,\n $validVertexSchema,\n} from '../shared/symbols.ts';\nimport { alignmentOf } from './alignmentOf.ts';\nimport {\n type AnyData,\n type AnyLooseData,\n isLooseData,\n isLooseDecorated,\n type LooseDecorated,\n type LooseTypeLiteral,\n type Undecorate,\n} from './dataTypes.ts';\nimport { sizeOf } from './sizeOf.ts';\nimport {\n type Align,\n type AnyWgslData,\n type BaseData,\n type Builtin,\n type Decorated,\n type FlatInterpolatableData,\n type FlatInterpolationType,\n type Interpolate,\n type InterpolationType,\n type Invariant,\n isAlignAttrib,\n isBuiltinAttrib,\n isDecorated,\n isSizeAttrib,\n isWgslData,\n type Location,\n type PerspectiveOrLinearInterpolatableData,\n type PerspectiveOrLinearInterpolationType,\n type Size,\n type Vec4f,\n type WgslTypeLiteral,\n} from './wgslTypes.ts';\n\n// ----------\n// Public API\n// ----------\n\nexport const builtinNames = [\n 'vertex_index',\n 'instance_index',\n 'position',\n 'clip_distances',\n 'front_facing',\n 'frag_depth',\n 'sample_index',\n 'sample_mask',\n 'fragment',\n 'local_invocation_id',\n 'local_invocation_index',\n 'global_invocation_id',\n 'workgroup_id',\n 'num_workgroups',\n 'subgroup_invocation_id',\n 'subgroup_size',\n] as const;\n\nexport type BuiltinName = (typeof builtinNames)[number];\n\nexport type AnyAttribute<\n AllowedBuiltins extends Builtin<BuiltinName> = Builtin<BuiltinName>,\n> =\n | Align<number>\n | Size<number>\n | Location<number>\n | Interpolate<InterpolationType>\n | Invariant\n | AllowedBuiltins;\n\nexport type ExtractAttributes<T> = T extends {\n readonly attribs: unknown[];\n} ? T['attribs']\n : [];\n\n/**\n * Decorates a data-type `TData` with an attribute `TAttrib`.\n *\n * - if `TData` is loose\n * - if `TData` is already `LooseDecorated`\n * - Prepend `TAttrib` to the existing attribute tuple.\n * - else\n * - Wrap `TData` with `LooseDecorated` and a single attribute `[TAttrib]`\n * - else\n * - if `TData` is already `Decorated`\n * - Prepend `TAttrib` to the existing attribute tuple.\n * - else\n * - Wrap `TData` with `Decorated` and a single attribute `[TAttrib]`\n */\nexport type Decorate<\n TData extends BaseData,\n TAttrib extends AnyAttribute,\n> = TData['type'] extends WgslTypeLiteral\n ? Decorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]>\n : TData['type'] extends LooseTypeLiteral\n ? LooseDecorated<Undecorate<TData>, [TAttrib, ...ExtractAttributes<TData>]>\n : never;\n\nexport type IsBuiltin<T> = ExtractAttributes<T>[number] extends [] ? false\n : ExtractAttributes<T>[number] extends Builtin<BuiltinName> ? true\n : false;\n\nexport type HasCustomLocation<T> = ExtractAttributes<T>[number] extends []\n ? false\n : ExtractAttributes<T>[number] extends Location ? true\n : false;\n\nexport function attribute<TData extends BaseData, TAttrib extends AnyAttribute>(\n data: TData,\n attrib: TAttrib,\n): Decorated | LooseDecorated {\n if (isDecorated(data)) {\n return new DecoratedImpl(data.inner, [\n attrib,\n ...data.attribs,\n ]) as Decorated;\n }\n\n if (isLooseDecorated(data)) {\n return new LooseDecoratedImpl(data.inner, [\n attrib,\n ...data.attribs,\n ]) as LooseDecorated;\n }\n\n if (isLooseData(data)) {\n return new LooseDecoratedImpl(data, [attrib]) as unknown as LooseDecorated;\n }\n\n return new DecoratedImpl(data, [attrib]) as unknown as Decorated;\n}\n\n/**\n * Gives the wrapped data-type a custom byte alignment. Useful in order to\n * fulfill uniform alignment requirements.\n *\n * @example\n * const Data = d.struct({\n * a: u32, // takes up 4 bytes\n * // 12 bytes of padding, because `b` is custom aligned to multiples of 16 bytes\n * b: d.align(16, u32),\n * });\n *\n * @param alignment The multiple of bytes this data should align itself to.\n * @param data The data-type to align.\n */\nexport function align<TAlign extends number, TData extends AnyData>(\n alignment: TAlign,\n data: TData,\n): Decorate<TData, Align<TAlign>> {\n return attribute(data, {\n [$internal]: true,\n type: '@align',\n params: [alignment],\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n }) as any;\n}\n\n/**\n * Adds padding bytes after the wrapped data-type, until the whole value takes up `size` bytes.\n *\n * @example\n * const Data = d.struct({\n * a: d.size(16, u32), // takes up 16 bytes, instead of 4\n * b: u32, // starts at byte 16, because `a` has a custom size\n * });\n *\n * @param size The amount of bytes that should be reserved for this data-type.\n * @param data The data-type to wrap.\n */\nexport function size<TSize extends number, TData extends AnyData>(\n size: TSize,\n data: TData,\n): Decorate<TData, Size<TSize>> {\n return attribute(data, {\n [$internal]: true,\n type: '@size',\n params: [size],\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n }) as any;\n}\n\n/**\n * Assigns an explicit numeric location to a struct member or a parameter that has this type.\n *\n * @example\n * const VertexOutput = {\n * a: d.u32, // has implicit location 0\n * b: d.location(5, d.u32),\n * c: d.u32, // has implicit location 6\n * };\n *\n * @param location The explicit numeric location.\n * @param data The data-type to wrap.\n */\nexport function location<TLocation extends number, TData extends AnyData>(\n location: TLocation,\n data: TData,\n): Decorate<TData, Location<TLocation>> {\n return attribute(data, {\n [$internal]: true,\n type: '@location',\n params: [location],\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n }) as any;\n}\n\n/**\n * Specifies how user-defined vertex shader output (fragment shader input)\n * must be interpolated.\n *\n * Tip: Integer outputs cannot be interpolated.\n *\n * @example\n * const VertexOutput = {\n * a: d.f32, // has implicit 'perspective, center' interpolation\n * b: d.interpolate('linear, sample', d.f32),\n * };\n *\n * @param interpolationType How data should be interpolated.\n * @param data The data-type to wrap.\n */\nexport function interpolate<\n TInterpolation extends PerspectiveOrLinearInterpolationType,\n TData extends PerspectiveOrLinearInterpolatableData,\n>(\n interpolationType: TInterpolation,\n data: TData,\n): Decorate<TData, Interpolate<TInterpolation>>;\n\n/**\n * Specifies how user-defined vertex shader output (fragment shader input)\n * must be interpolated.\n *\n * Tip: Default sampling method of `flat` is `first`. Unless you specifically\n * need deterministic behavior provided by `'flat, first'`, prefer explicit\n * `'flat, either'` as it could be slightly faster in hardware.\n *\n * @example\n * const VertexOutput = {\n * a: d.f32, // has implicit 'perspective, center' interpolation\n * b: d.interpolate('flat, either', d.u32), // integer outputs cannot interpolate\n * };\n *\n * @param interpolationType How data should be interpolated.\n * @param data The data-type to wrap.\n */\nexport function interpolate<\n TInterpolation extends FlatInterpolationType,\n TData extends FlatInterpolatableData,\n>(\n interpolationType: TInterpolation,\n data: TData,\n): Decorate<TData, Interpolate<TInterpolation>>;\n\nexport function interpolate<\n TInterpolation extends InterpolationType,\n TData extends AnyData,\n>(\n interpolationType: TInterpolation,\n data: TData,\n): Decorate<TData, Interpolate<TInterpolation>> {\n return attribute(data, {\n [$internal]: true,\n type: '@interpolate',\n params: [interpolationType],\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n }) as any;\n}\n\n/**\n * Marks a position built-in output value as invariant in vertex shaders.\n * If the data and control flow match for two position outputs in different\n * entry points, then the result values are guaranteed to be the same.\n *\n * Must only be applied to the position built-in value.\n *\n * @example\n * const VertexOutput = {\n * pos: d.invariant(d.builtin.position),\n * };\n *\n * @param data The position built-in data-type to mark as invariant.\n */\nexport function invariant(\n data: Decorated<Vec4f, [Builtin<'position'>]>,\n): Decorated<Vec4f, [Builtin<'position'>, Invariant]> {\n // Validate that invariant is only applied to position built-in\n if (!isBuiltin(data)) {\n throw new Error(\n 'The @invariant attribute must only be applied to the position built-in value.',\n );\n }\n\n // Find the builtin attribute to check if it's position\n const builtinAttrib = (isDecorated(data) || isLooseDecorated(data))\n ? data.attribs.find(isBuiltinAttrib)\n : undefined;\n\n if (!builtinAttrib || builtinAttrib.params[0] !== 'position') {\n throw new Error(\n 'The @invariant attribute must only be applied to the position built-in value.',\n );\n }\n\n return attribute(data, {\n [$internal]: true,\n type: '@invariant',\n params: [],\n // biome-ignore lint/suspicious/noExplicitAny: <tired of lying to types>\n }) as any;\n}\n\nexport function isBuiltin<\n T extends\n | Decorated<AnyWgslData, AnyAttribute[]>\n | LooseDecorated<AnyLooseData, AnyAttribute[]>,\n>(value: T | unknown): value is T {\n return (\n (isDecorated(value) || isLooseDecorated(value)) &&\n value.attribs.find(isBuiltinAttrib) !== undefined\n );\n}\n\nexport function getAttributesString<T extends BaseData>(field: T): string {\n if (!isDecorated(field) && !isLooseDecorated(field)) {\n return '';\n }\n\n return (field.attribs as AnyAttribute[])\n .map((attrib) => {\n if (attrib.params.length === 0) {\n return `${attrib.type} `;\n }\n return `${attrib.type}(${attrib.params.join(', ')}) `;\n })\n .join('');\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass BaseDecoratedImpl<TInner extends BaseData, TAttribs extends unknown[]> {\n public readonly [$internal] = true;\n\n // Type-tokens, not available at runtime\n declare readonly [$repr]: Infer<TInner>;\n declare readonly [$gpuRepr]: InferGPU<TInner>;\n declare readonly [$reprPartial]: InferPartial<TInner>;\n // ---\n\n constructor(\n public readonly inner: TInner,\n public readonly attribs: TAttribs,\n ) {\n const alignAttrib = attribs.find(isAlignAttrib)?.params[0];\n const sizeAttrib = attribs.find(isSizeAttrib)?.params[0];\n\n if (alignAttrib !== undefined) {\n if (alignAttrib <= 0) {\n throw new Error(\n `Custom data alignment must be a positive number, got: ${alignAttrib}.`,\n );\n }\n\n if (Math.log2(alignAttrib) % 1 !== 0) {\n throw new Error(\n `Alignment has to be a power of 2, got: ${alignAttrib}.`,\n );\n }\n\n if (isWgslData(this.inner)) {\n if (alignAttrib % alignmentOf(this.inner) !== 0) {\n throw new Error(\n `Custom alignment has to be a multiple of the standard data alignment. Got: ${alignAttrib}, expected multiple of: ${\n alignmentOf(this.inner)\n }.`,\n );\n }\n }\n }\n\n if (sizeAttrib !== undefined) {\n if (sizeAttrib < sizeOf(this.inner)) {\n throw new Error(\n `Custom data size cannot be smaller then the standard data size. Got: ${sizeAttrib}, expected at least: ${\n sizeOf(this.inner)\n }.`,\n );\n }\n\n if (sizeAttrib <= 0) {\n throw new Error(\n `Custom data size must be a positive number. Got: ${sizeAttrib}.`,\n );\n }\n }\n }\n}\n\nclass DecoratedImpl<TInner extends BaseData, TAttribs extends unknown[]>\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements Decorated<TInner, TAttribs> {\n public readonly [$internal] = true;\n public readonly type = 'decorated';\n\n // Type-tokens, not available at runtime\n declare readonly [$memIdent]: TAttribs extends Location[]\n ? MemIdentity<TInner> | Decorated<MemIdentity<TInner>, TAttribs>\n : Decorated<MemIdentity<TInner>, TAttribs>;\n declare readonly [$invalidSchemaReason]:\n Decorated[typeof $invalidSchemaReason];\n declare readonly [$validStorageSchema]: IsValidStorageSchema<TInner>;\n declare readonly [$validUniformSchema]: IsValidUniformSchema<TInner>;\n declare readonly [$validVertexSchema]: IsValidVertexSchema<TInner>;\n // ---\n}\n\nclass LooseDecoratedImpl<TInner extends BaseData, TAttribs extends unknown[]>\n extends BaseDecoratedImpl<TInner, TAttribs>\n implements LooseDecorated<TInner, TAttribs> {\n public readonly [$internal] = true;\n public readonly type = 'loose-decorated';\n\n // Type-tokens, not available at runtime\n declare readonly [$invalidSchemaReason]:\n LooseDecorated[typeof $invalidSchemaReason];\n declare readonly [$validVertexSchema]: IsValidVertexSchema<TInner>;\n // ---\n}\n","import { comptime } from '../core/function/comptime.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport { schemaCallWrapper } from './schemaCallWrapper.ts';\nimport { sizeOf } from './sizeOf.ts';\nimport type { AnyWgslData, WgslArray } from './wgslTypes.ts';\n\n// ----------\n// Public API\n// ----------\n\ninterface WgslArrayConstructor {\n <TElement extends AnyWgslData>(\n elementType: TElement,\n ): (elementCount: number) => WgslArray<TElement>;\n\n <TElement extends AnyWgslData>(\n elementType: TElement,\n elementCount: number,\n ): WgslArray<TElement>;\n}\n\n/**\n * Creates an array schema that can be used to construct gpu buffers.\n * Describes arrays with fixed-size length, storing elements of the same type.\n *\n * @example\n * const LENGTH = 3;\n * const array = d.arrayOf(d.u32, LENGTH);\n *\n * If `elementCount` is not specified, a partially applied function is returned.\n * @example\n * const array = d.arrayOf(d.vec3f);\n * // ^? (n: number) => WgslArray<d.Vec3f>\n *\n * @param elementType The type of elements in the array.\n * @param elementCount The number of elements in the array.\n */\nexport const arrayOf = comptime(\n ((elementType, elementCount) => {\n if (elementCount === undefined) {\n return comptime((count: number) => cpu_arrayOf(elementType, count));\n }\n return cpu_arrayOf(elementType, elementCount);\n }) as WgslArrayConstructor,\n).$name('arrayOf');\n\n// --------------\n// Implementation\n// --------------\n\nfunction cpu_arrayOf<TElement extends AnyWgslData>(\n elementType: TElement,\n elementCount: number,\n): WgslArray<TElement> {\n // In the schema call, create and return a deep copy\n // by wrapping all the values in `elementType` schema calls.\n const arraySchema = (elements?: TElement[]) => {\n if (elements && elements.length !== elementCount) {\n throw new Error(\n `Array schema of ${elementCount} elements of type ${elementType.type} called with ${elements.length} argument(s).`,\n );\n }\n\n return Array.from(\n { length: elementCount },\n (_, i) => schemaCallWrapper(elementType, elements?.[i]),\n );\n };\n Object.setPrototypeOf(arraySchema, WgslArrayImpl);\n\n if (Number.isNaN(sizeOf(elementType))) {\n throw new Error('Cannot nest runtime sized arrays.');\n }\n arraySchema.elementType = elementType;\n\n if (!Number.isInteger(elementCount) || elementCount < 0) {\n throw new Error(\n `Cannot create array schema with invalid element count: ${elementCount}.`,\n );\n }\n arraySchema.elementCount = elementCount;\n\n return arraySchema as unknown as WgslArray<TElement>;\n}\n\nconst WgslArrayImpl = {\n [$internal]: true,\n type: 'array',\n\n toString(this: WgslArray): string {\n return `arrayOf(${this.elementType}, ${this.elementCount})`;\n },\n};\n","import { arrayOf } from './data/array.ts';\nimport { attribute } from './data/attributes.ts';\nimport type { LooseDecorated } from './data/dataTypes.ts';\nimport { bool, f32, u32 } from './data/numeric.ts';\nimport { vec3u, vec4f } from './data/vector.ts';\nimport type {\n AnyWgslData,\n BaseData,\n Bool,\n Builtin,\n Decorated,\n F32,\n U32,\n Vec3u,\n Vec4f,\n WgslArray,\n} from './data/wgslTypes.ts';\nimport { $internal } from './shared/symbols.ts';\n\n// ----------\n// Public API\n// ----------\n\nexport type BuiltinVertexIndex = Decorated<U32, [Builtin<'vertex_index'>]>;\nexport type BuiltinInstanceIndex = Decorated<U32, [Builtin<'instance_index'>]>;\nexport type BuiltinPosition = Decorated<Vec4f, [Builtin<'position'>]>;\nexport type BuiltinClipDistances = Decorated<\n WgslArray<U32>,\n [Builtin<'clip_distances'>]\n>;\nexport type BuiltinFrontFacing = Decorated<Bool, [Builtin<'front_facing'>]>;\nexport type BuiltinFragDepth = Decorated<F32, [Builtin<'frag_depth'>]>;\nexport type BuiltinSampleIndex = Decorated<U32, [Builtin<'sample_index'>]>;\nexport type BuiltinSampleMask = Decorated<U32, [Builtin<'sample_mask'>]>;\nexport type BuiltinLocalInvocationId = Decorated<\n Vec3u,\n [Builtin<'local_invocation_id'>]\n>;\nexport type BuiltinLocalInvocationIndex = Decorated<\n U32,\n [Builtin<'local_invocation_index'>]\n>;\nexport type BuiltinGlobalInvocationId = Decorated<\n Vec3u,\n [Builtin<'global_invocation_id'>]\n>;\nexport type BuiltinWorkgroupId = Decorated<Vec3u, [Builtin<'workgroup_id'>]>;\nexport type BuiltinNumWorkgroups = Decorated<\n Vec3u,\n [Builtin<'num_workgroups'>]\n>;\nexport type BuiltinSubgroupInvocationId = Decorated<\n U32,\n [Builtin<'subgroup_invocation_id'>]\n>;\nexport type BuiltinSubgroupSize = Decorated<U32, [Builtin<'subgroup_size'>]>;\n\nfunction defineBuiltin<T extends Decorated | LooseDecorated>(\n dataType: AnyWgslData,\n value: T['attribs'][0] extends { params: [infer TValue] } ? TValue : never,\n): T {\n return attribute(dataType, {\n [$internal]: true,\n type: '@builtin',\n // biome-ignore lint/suspicious/noExplicitAny: it's fine\n params: [value as any],\n }) as T;\n}\n\nexport const builtin = {\n vertexIndex: defineBuiltin<BuiltinVertexIndex>(u32, 'vertex_index'),\n instanceIndex: defineBuiltin<BuiltinInstanceIndex>(u32, 'instance_index'),\n position: defineBuiltin<BuiltinPosition>(vec4f, 'position'),\n clipDistances: defineBuiltin<BuiltinClipDistances>(\n arrayOf(u32, 8),\n 'clip_distances',\n ),\n frontFacing: defineBuiltin<BuiltinFrontFacing>(bool, 'front_facing'),\n fragDepth: defineBuiltin<BuiltinFragDepth>(f32, 'frag_depth'),\n sampleIndex: defineBuiltin<BuiltinSampleIndex>(u32, 'sample_index'),\n sampleMask: defineBuiltin<BuiltinSampleMask>(u32, 'sample_mask'),\n localInvocationId: defineBuiltin<BuiltinLocalInvocationId>(\n vec3u,\n 'local_invocation_id',\n ),\n localInvocationIndex: defineBuiltin<BuiltinLocalInvocationIndex>(\n u32,\n 'local_invocation_index',\n ),\n globalInvocationId: defineBuiltin<BuiltinGlobalInvocationId>(\n vec3u,\n 'global_invocation_id',\n ),\n workgroupId: defineBuiltin<BuiltinWorkgroupId>(vec3u, 'workgroup_id'),\n numWorkgroups: defineBuiltin<BuiltinNumWorkgroups>(vec3u, 'num_workgroups'),\n subgroupInvocationId: defineBuiltin<BuiltinSubgroupInvocationId>(\n u32,\n 'subgroup_invocation_id',\n ),\n subgroupSize: defineBuiltin<BuiltinSubgroupSize>(u32, 'subgroup_size'),\n} as const;\n\nexport type AnyBuiltin = (typeof builtin)[keyof typeof builtin];\nexport type AnyComputeBuiltin =\n | BuiltinLocalInvocationId\n | BuiltinLocalInvocationIndex\n | BuiltinGlobalInvocationId\n | BuiltinWorkgroupId\n | BuiltinNumWorkgroups\n | BuiltinSubgroupInvocationId\n | BuiltinSubgroupSize;\nexport type AnyVertexInputBuiltin = BuiltinVertexIndex | BuiltinInstanceIndex;\nexport type AnyVertexOutputBuiltin = BuiltinClipDistances | BuiltinPosition;\nexport type AnyFragmentInputBuiltin =\n | BuiltinPosition\n | BuiltinFrontFacing\n | BuiltinSampleIndex\n | BuiltinSampleMask\n | BuiltinSubgroupInvocationId\n | BuiltinSubgroupSize;\nexport type AnyFragmentOutputBuiltin = BuiltinFragDepth | BuiltinSampleMask;\n\nexport type OmitBuiltins<S> = S extends AnyBuiltin ? never\n : S extends BaseData ? S\n : {\n [Key in keyof S as S[Key] extends AnyBuiltin ? never : Key]: S[Key];\n };\n"],"mappings":"sMAgBA,IAAMA,EAA4C,CAChD,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,KAAM,EACN,IAAK,EACL,MAAO,EACP,MAAO,EACP,MAAO,EACP,MAAO,EACP,MAAO,EACP,MAAO,GACP,MAAO,EACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,EACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,QAAS,EACT,QAAS,GACT,QAAS,GACT,OAAQ,CACV,EAEA,SAASC,EAAiBC,EAAsB,CAC9C,IAAMC,EAAYD,GAAmB,KAC/BE,EAAiBJ,EAAkBG,CAAQ,EACjD,GAAIC,IAAmB,OACrB,OAAOA,EAGT,GAAIC,EAAaH,CAAI,EACnB,OAAO,OAAO,OAAOA,EAAK,SAAqC,EAC5D,IAAII,CAAW,EACf,OAAO,CAACC,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,CAAE,EAGrC,GAAIC,EAAYP,CAAI,EAClB,OAAOI,EAAYJ,EAAK,WAAW,EAGrC,GAAIQ,EAAWR,CAAI,EAAG,CAEpB,IAAMS,EACJ,OAAO,OAAOT,EAAK,SAAqC,EAAE,CAAC,EAC7D,OAAOS,EAAaC,EAAmBD,CAAS,GAAK,EAAK,CAC5D,CAEA,GAAIE,EAAWX,CAAI,EACjB,OAAOU,EAAmBV,EAAK,WAAW,GAAK,EAGjD,GAAIY,EAAYZ,CAAI,GAAKa,EAAiBb,CAAI,EAC5C,OAAOU,EAAmBV,CAAI,GAAKI,EAAYJ,EAAK,KAAK,EAG3D,GAAIc,EAAc,IAAIb,CAAQ,EAC5B,MAAO,GAGT,MAAM,IAAI,MACR,uCAAuCc,EAAcf,CAAI,CAAC,EAC5D,CACF,CAEA,SAASgB,EAAuBhB,EAAwB,CACtD,GAAIQ,EAAWR,CAAI,EAAG,CAEpB,IAAMS,EACJ,OAAO,OAAOT,EAAK,SAAqC,EAAE,CAAC,EAC7D,OAAOS,EAAYQ,EAAkBR,CAAS,EAAI,CACpD,CAEA,OAAIE,EAAWX,CAAI,EACViB,EAAkBjB,EAAK,WAAW,EAGvCa,EAAiBb,CAAI,EAChBU,EAAmBV,CAAI,GAAKiB,EAAkBjB,EAAK,KAAK,EAG1DU,EAAmBV,CAAI,GAAK,CACrC,CAMA,IAAMkB,EAAmB,IAAI,QAEvBC,EAAyB,IAAI,QAE5B,SAASf,EAAYJ,EAAwB,CAClD,IAAIoB,EAAYF,EAAiB,IAAIlB,CAAI,EACzC,OAAIoB,IAAc,SAChBA,EAAYrB,EAAiBC,CAAI,EACjCkB,EAAiB,IAAIlB,EAAMoB,CAAS,GAG/BA,CACT,CAEO,SAASH,EAAkBjB,EAAwB,CACxD,IAAIoB,EAAYD,EAAuB,IAAInB,CAAI,EAC/C,OAAIoB,IAAc,SAChBA,EAAYJ,EAAuBhB,CAAI,EACvCmB,EAAuB,IAAInB,EAAMoB,CAAS,GAGrCA,CACT,CAKO,SAASC,GAAmBC,EAAyB,CAC1D,OAAOlB,EAAYkB,CAAM,CAC3B,CCrIO,IAAMC,EAAU,CAACC,EAAeC,IAAmB,CACxD,IAAMC,EAAUD,EAAS,EACnBE,EAAa,CAACD,EACpB,OAAQF,EAAQE,KAAa,EAAIF,GAASA,EAAQG,GAAcF,CAClE,ECIA,IAAMG,EAAwC,CAC5C,KAAM,EACN,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,MAAO,EACP,MAAO,EACP,MAAO,EACP,MAAO,EACP,aAAc,EACd,MAAO,GACP,MAAO,EACP,MAAO,GACP,MAAO,GACP,aAAc,GACd,MAAO,GACP,MAAO,EACP,MAAO,GACP,MAAO,GACP,aAAc,GACd,QAAS,GACT,QAAS,GACT,QAAS,GACT,MAAO,EACP,QAAS,EACT,QAAS,EACT,MAAO,EACP,QAAS,EACT,QAAS,EACT,OAAQ,EACR,SAAU,EACV,SAAU,EACV,OAAQ,EACR,SAAU,EACV,SAAU,EACV,OAAQ,EACR,SAAU,EACV,SAAU,EACV,OAAQ,EACR,SAAU,EACV,SAAU,EACV,QAAS,EACT,UAAW,EACX,UAAW,EACX,QAAS,EACT,UAAW,EACX,UAAW,EACX,QAAS,EACT,UAAW,EACX,UAAW,EACX,QAAS,EACT,UAAW,EACX,UAAW,GACX,UAAW,GACX,OAAQ,EACR,SAAU,EACV,SAAU,GACV,SAAU,GACV,OAAQ,EACR,SAAU,EACV,SAAU,GACV,SAAU,GACV,kBAAmB,EACnB,gBAAiB,EACjB,OAAQ,CACV,EAEA,SAASC,EAAaC,EAAoB,CACxC,IAAIC,EAAO,EACLC,EAAYF,EAAO,UACzB,QAAWG,KAAY,OAAO,OAAOD,CAAS,EAAG,CAC/C,GAAI,OAAO,MAAMD,CAAI,EACnB,MAAM,IAAI,MAAM,qDAAqD,EAMvE,GAHAA,EAAOG,EAAQH,EAAMI,EAAYF,CAAQ,CAAC,EAC1CF,GAAQK,EAAOH,CAAQ,EAEnB,OAAO,MAAMF,CAAI,GAAKE,EAAS,OAAS,QAC1C,MAAM,IAAI,MAAM,oDAAoD,CAExE,CAEA,OAAOC,EAAQH,EAAMI,EAAYL,CAAM,CAAC,CAC1C,CAEA,SAASO,EAAeC,EAAgB,CACtC,IAAIP,EAAO,EAELC,EAAYM,EAAK,UACvB,QAAWL,KAAY,OAAO,OAAOD,CAAS,EAAG,CAC/C,IAAMO,EAAYC,EAAkBP,CAAQ,EAC5CF,EAAOG,EAAQH,EAAMQ,CAAS,EAC9BR,GAAQK,EAAOH,CAAQ,CACzB,CAEA,OAAOF,CACT,CAEA,SAASU,EAAYH,EAAsB,CACzC,IAAMI,EAAYd,EAAeU,GAAmB,IAAI,EAExD,GAAII,IAAc,OAChB,OAAOA,EAGT,GAAIC,EAAaL,CAAI,EACnB,OAAOT,EAAaS,CAAI,EAG1B,GAAIM,EAAWN,CAAI,EACjB,OAAOD,EAAeC,CAAI,EAG5B,GAAIO,EAAYP,CAAI,EAAG,CACrB,GAAIA,EAAK,eAAiB,EACxB,OAAO,OAAO,IAGhB,IAAMC,EAAYJ,EAAYG,EAAK,WAAW,EAE9C,OADeJ,EAAQE,EAAOE,EAAK,WAAW,EAAGC,CAAS,EAC1CD,EAAK,YACvB,CAEA,GAAIQ,EAAWR,CAAI,EAAG,CACpB,IAAMC,EAAYC,EAAkBF,EAAK,WAAW,EAEpD,OADeJ,EAAQE,EAAOE,EAAK,WAAW,EAAGC,CAAS,EAC1CD,EAAK,YACvB,CAEA,GAAIS,EAAYT,CAAI,GAAKU,EAAiBV,CAAI,EAC5C,OAAOW,EAAcX,CAAI,GAAKF,EAAOE,EAAK,KAAK,EAGjD,MAAM,IAAI,MAAM,kCAAkCA,CAAI,EAAE,CAC1D,CAMA,IAAMY,EAAc,IAAI,QAEjB,SAASd,EAAOe,EAA0B,CAC/C,IAAIpB,EAAOmB,EAAY,IAAIC,CAAM,EAEjC,OAAIpB,IAAS,SACXA,EAAOU,EAAYU,CAAM,EACzBD,EAAY,IAAIC,EAAQpB,CAAI,GAGvBA,CACT,CAKO,SAASqB,GAAcD,EAAyB,CACrD,OAAOf,EAAOe,CAAM,CACtB,CC9CO,SAASE,EACdC,EACAC,EAC4B,CAC5B,OAAIC,EAAYF,CAAI,EACX,IAAIG,EAAcH,EAAK,MAAO,CACnCC,EACA,GAAGD,EAAK,OACV,CAAC,EAGCI,EAAiBJ,CAAI,EAChB,IAAIK,EAAmBL,EAAK,MAAO,CACxCC,EACA,GAAGD,EAAK,OACV,CAAC,EAGCM,EAAYN,CAAI,EACX,IAAIK,EAAmBL,EAAM,CAACC,CAAM,CAAC,EAGvC,IAAIE,EAAcH,EAAM,CAACC,CAAM,CAAC,CACzC,CAgBO,SAASM,GACdC,EACAR,EACgC,CAChC,OAAOD,EAAUC,EAAM,CACrB,CAACS,CAAS,EAAG,GACb,KAAM,SACN,OAAQ,CAACD,CAAS,CAEpB,CAAC,CACH,CAcO,SAASE,GACdA,EACAV,EAC8B,CAC9B,OAAOD,EAAUC,EAAM,CACrB,CAACS,CAAS,EAAG,GACb,KAAM,QACN,OAAQ,CAACC,CAAI,CAEf,CAAC,CACH,CAeO,SAASC,GACdA,EACAX,EACsC,CACtC,OAAOD,EAAUC,EAAM,CACrB,CAACS,CAAS,EAAG,GACb,KAAM,YACN,OAAQ,CAACE,CAAQ,CAEnB,CAAC,CACH,CAkDO,SAASC,GAIdC,EACAb,EAC8C,CAC9C,OAAOD,EAAUC,EAAM,CACrB,CAACS,CAAS,EAAG,GACb,KAAM,eACN,OAAQ,CAACI,CAAiB,CAE5B,CAAC,CACH,CAgBO,SAASC,GACdd,EACoD,CAEpD,GAAI,CAACe,EAAUf,CAAI,EACjB,MAAM,IAAI,MACR,+EACF,EAIF,IAAMgB,EAAiBd,EAAYF,CAAI,GAAKI,EAAiBJ,CAAI,EAC7DA,EAAK,QAAQ,KAAKiB,CAAe,EACjC,OAEJ,GAAI,CAACD,GAAiBA,EAAc,OAAO,CAAC,IAAM,WAChD,MAAM,IAAI,MACR,+EACF,EAGF,OAAOjB,EAAUC,EAAM,CACrB,CAACS,CAAS,EAAG,GACb,KAAM,aACN,OAAQ,CAAC,CAEX,CAAC,CACH,CAEO,SAASM,EAIdG,EAAgC,CAChC,OACGhB,EAAYgB,CAAK,GAAKd,EAAiBc,CAAK,IAC7CA,EAAM,QAAQ,KAAKD,CAAe,IAAM,MAE5C,CAEO,SAASE,GAAwCC,EAAkB,CACxE,MAAI,CAAClB,EAAYkB,CAAK,GAAK,CAAChB,EAAiBgB,CAAK,EACzC,GAGDA,EAAM,QACX,IAAKnB,GACAA,EAAO,OAAO,SAAW,EACpB,GAAGA,EAAO,IAAI,IAEhB,GAAGA,EAAO,IAAI,IAAIA,EAAO,OAAO,KAAK,IAAI,CAAC,IAClD,EACA,KAAK,EAAE,CACZ,CAMA,IAAMoB,EAAN,KAA6E,CAS3E,YACkBC,EACAC,EAChB,CAFgB,WAAAD,EACA,aAAAC,EAEhB,IAAMC,EAAcD,EAAQ,KAAKE,CAAa,GAAG,OAAO,CAAC,EACnDC,EAAaH,EAAQ,KAAKI,CAAY,GAAG,OAAO,CAAC,EAEvD,GAAIH,IAAgB,OAAW,CAC7B,GAAIA,GAAe,EACjB,MAAM,IAAI,MACR,yDAAyDA,CAAW,GACtE,EAGF,GAAI,KAAK,KAAKA,CAAW,EAAI,IAAM,EACjC,MAAM,IAAI,MACR,0CAA0CA,CAAW,GACvD,EAGF,GAAII,EAAW,KAAK,KAAK,GACnBJ,EAAcK,EAAY,KAAK,KAAK,IAAM,EAC5C,MAAM,IAAI,MACR,8EAA8EL,CAAW,2BACvFK,EAAY,KAAK,KAAK,CACxB,GACF,CAGN,CAEA,GAAIH,IAAe,OAAW,CAC5B,GAAIA,EAAaI,EAAO,KAAK,KAAK,EAChC,MAAM,IAAI,MACR,wEAAwEJ,CAAU,wBAChFI,EAAO,KAAK,KAAK,CACnB,GACF,EAGF,GAAIJ,GAAc,EAChB,MAAM,IAAI,MACR,oDAAoDA,CAAU,GAChE,CAEJ,CACF,CAtDA,CAAiBjB,CAAS,EAAI,EAuDhC,EAEMN,EAAN,cACUkB,CAC+B,CACvC,CAAiBZ,CAAS,EAAI,GACd,KAAO,WAYzB,EAEMJ,EAAN,cACUgB,CACoC,CAC5C,CAAiBZ,CAAS,EAAI,GACd,KAAO,iBAOzB,EC7ZO,IAAMsB,EAAUC,GACpB,CAACC,EAAaC,IACTA,IAAiB,OACZF,EAAUG,GAAkBC,EAAYH,EAAaE,CAAK,CAAC,EAE7DC,EAAYH,EAAaC,CAAY,EAEhD,EAAE,MAAM,SAAS,EAMjB,SAASE,EACPH,EACAC,EACqB,CAGrB,IAAMG,EAAeC,GAA0B,CAC7C,GAAIA,GAAYA,EAAS,SAAWJ,EAClC,MAAM,IAAI,MACR,mBAAmBA,CAAY,qBAAqBD,EAAY,IAAI,gBAAgBK,EAAS,MAAM,eACrG,EAGF,OAAO,MAAM,KACX,CAAE,OAAQJ,CAAa,EACvB,CAACK,EAAGC,IAAMC,EAAkBR,EAAaK,IAAWE,CAAC,CAAC,CACxD,CACF,EAGA,GAFA,OAAO,eAAeH,EAAaK,CAAa,EAE5C,OAAO,MAAMC,EAAOV,CAAW,CAAC,EAClC,MAAM,IAAI,MAAM,mCAAmC,EAIrD,GAFAI,EAAY,YAAcJ,EAEtB,CAAC,OAAO,UAAUC,CAAY,GAAKA,EAAe,EACpD,MAAM,IAAI,MACR,0DAA0DA,CAAY,GACxE,EAEF,OAAAG,EAAY,aAAeH,EAEpBG,CACT,CAEA,IAAMK,EAAgB,CACpB,CAACE,CAAS,EAAG,GACb,KAAM,QAEN,UAAkC,CAChC,MAAO,WAAW,KAAK,WAAW,KAAK,KAAK,YAAY,GAC1D,CACF,ECnCA,SAASC,EACPC,EACAC,EACG,CACH,OAAOC,EAAUF,EAAU,CACzB,CAACG,CAAS,EAAG,GACb,KAAM,WAEN,OAAQ,CAACF,CAAY,CACvB,CAAC,CACH,CAEO,IAAMG,GAAU,CACrB,YAAaL,EAAkCM,EAAK,cAAc,EAClE,cAAeN,EAAoCM,EAAK,gBAAgB,EACxE,SAAUN,EAA+BO,EAAO,UAAU,EAC1D,cAAeP,EACbQ,EAAQF,EAAK,CAAC,EACd,gBACF,EACA,YAAaN,EAAkCS,EAAM,cAAc,EACnE,UAAWT,EAAgCU,EAAK,YAAY,EAC5D,YAAaV,EAAkCM,EAAK,cAAc,EAClE,WAAYN,EAAiCM,EAAK,aAAa,EAC/D,kBAAmBN,EACjBW,EACA,qBACF,EACA,qBAAsBX,EACpBM,EACA,wBACF,EACA,mBAAoBN,EAClBW,EACA,sBACF,EACA,YAAaX,EAAkCW,EAAO,cAAc,EACpE,cAAeX,EAAoCW,EAAO,gBAAgB,EAC1E,qBAAsBX,EACpBM,EACA,wBACF,EACA,aAAcN,EAAmCM,EAAK,eAAe,CACvE","names":["knownAlignmentMap","computeAlignment","data","dataType","knownAlignment","isWgslStruct","alignmentOf","a","b","isWgslArray","isUnstruct","firstProp","getCustomAlignment","isDisarray","isDecorated","isLooseDecorated","packedFormats","safeStringify","computeCustomAlignment","customAlignmentOf","cachedAlignments","cachedCustomAlignments","alignment","PUBLIC_alignmentOf","schema","roundUp","value","modulo","bitMask","invBitMask","knownSizesMap","sizeOfStruct","struct","size","propTypes","property","roundUp","alignmentOf","sizeOf","sizeOfUnstruct","data","alignment","customAlignmentOf","computeSize","knownSize","isWgslStruct","isUnstruct","isWgslArray","isDisarray","isDecorated","isLooseDecorated","getCustomSize","cachedSizes","schema","PUBLIC_sizeOf","attribute","data","attrib","isDecorated","DecoratedImpl","isLooseDecorated","LooseDecoratedImpl","isLooseData","align","alignment","$internal","size","location","interpolate","interpolationType","invariant","isBuiltin","builtinAttrib","isBuiltinAttrib","value","getAttributesString","field","BaseDecoratedImpl","inner","attribs","alignAttrib","isAlignAttrib","sizeAttrib","isSizeAttrib","isWgslData","alignmentOf","sizeOf","arrayOf","comptime","elementType","elementCount","count","cpu_arrayOf","arraySchema","elements","_","i","schemaCallWrapper","WgslArrayImpl","sizeOf","$internal","defineBuiltin","dataType","value","attribute","$internal","builtin","u32","vec4f","arrayOf","bool","f32","vec3u"]}