typegpu 0.8.0-alpha.2 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +33 -6
  2. package/chunk-2UXPGML5.js +7 -0
  3. package/chunk-2UXPGML5.js.map +1 -0
  4. package/chunk-3246CM7C.cjs +2 -0
  5. package/chunk-3246CM7C.cjs.map +1 -0
  6. package/{chunk-BDGVKGU4.js → chunk-4W5Z7BO4.js} +6 -6
  7. package/chunk-4W5Z7BO4.js.map +1 -0
  8. package/{chunk-ESIHND6W.cjs → chunk-5Y6GTBWR.cjs} +3 -3
  9. package/{chunk-ESIHND6W.cjs.map → chunk-5Y6GTBWR.cjs.map} +1 -1
  10. package/{chunk-DH4X56C7.js → chunk-7S3IK3D4.js} +2 -2
  11. package/{chunk-MJ6A4DOA.js → chunk-7XFSK632.js} +2 -2
  12. package/{chunk-WDMOZFKN.cjs → chunk-PRMFGUQT.cjs} +2 -2
  13. package/{chunk-WDMOZFKN.cjs.map → chunk-PRMFGUQT.cjs.map} +1 -1
  14. package/{chunk-44LAYHPR.cjs → chunk-TRE7NUKE.cjs} +6 -6
  15. package/chunk-TRE7NUKE.cjs.map +1 -0
  16. package/chunk-VOVQAOVG.js +2 -0
  17. package/chunk-VOVQAOVG.js.map +1 -0
  18. package/chunk-ZYGTVBDH.cjs +7 -0
  19. package/chunk-ZYGTVBDH.cjs.map +1 -0
  20. package/common/index.cjs +1 -1
  21. package/common/index.d.cts +1 -1
  22. package/common/index.d.ts +1 -1
  23. package/common/index.js +1 -1
  24. package/data/index.cjs +1 -1
  25. package/data/index.d.cts +3 -3
  26. package/data/index.d.ts +3 -3
  27. package/data/index.js +1 -1
  28. package/index.cjs +51 -51
  29. package/index.cjs.map +1 -1
  30. package/index.d.cts +2 -2
  31. package/index.d.ts +2 -2
  32. package/index.js +40 -40
  33. package/index.js.map +1 -1
  34. package/{matrix-UOB09LaW.d.cts → matrix-DHFT4O8f.d.cts} +1 -1
  35. package/{matrix-CjLuYXH1.d.ts → matrix-DLipCOZF.d.ts} +1 -1
  36. package/package.json +2 -2
  37. package/std/index.cjs +1 -1
  38. package/std/index.cjs.map +1 -1
  39. package/std/index.d.cts +2 -2
  40. package/std/index.d.ts +2 -2
  41. package/std/index.js +1 -1
  42. package/std/index.js.map +1 -1
  43. package/{tgpuConstant-sKeoSjPD.d.ts → tgpuConstant-BU72w5qs.d.cts} +15 -13
  44. package/{tgpuConstant-sKeoSjPD.d.cts → tgpuConstant-BU72w5qs.d.ts} +15 -13
  45. package/chunk-44LAYHPR.cjs.map +0 -1
  46. package/chunk-6OJFCDQF.js +0 -7
  47. package/chunk-6OJFCDQF.js.map +0 -1
  48. package/chunk-BDGVKGU4.js.map +0 -1
  49. package/chunk-CODEFPMD.cjs +0 -2
  50. package/chunk-CODEFPMD.cjs.map +0 -1
  51. package/chunk-HLB6TY7I.cjs +0 -7
  52. package/chunk-HLB6TY7I.cjs.map +0 -1
  53. package/chunk-ZYSFFI3M.js +0 -2
  54. package/chunk-ZYSFFI3M.js.map +0 -1
  55. /package/{chunk-DH4X56C7.js.map → chunk-7S3IK3D4.js.map} +0 -0
  56. /package/{chunk-MJ6A4DOA.js.map → chunk-7XFSK632.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/iwo/Projects/wigsill/packages/typegpu/dist/chunk-HLB6TY7I.cjs","../src/data/matrix.ts","../src/tgsl/wgslGenerator.ts"],"names":["MatBase","createMatSchema","options","construct","createDualImpl","args","elements","arg","i","snip","stitch"],"mappings":"AAAA,qlCAAqjB,ICmC/hBA,EAAAA,CAAf,KAA2D,CAOlE,CAAA,CAcA,SAASC,EAAAA,CAKPC,CAAAA,CAC6E,CAC7E,IAAMC,CAAAA,CAAYC,kCAAAA,CAEhB,GAAIC,CAAAA,CAAAA,EAA6C,CAC/C,IAAMC,CAAAA,CAAqB,CAAC,CAAA,CAE5B,GAAA,CAAA,IAAWC,EAAAA,GAAOF,CAAAA,CAChB,EAAA,CAAI,OAAOE,CAAAA,EAAQ,QAAA,CACjBD,CAAAA,CAAS,IAAA,CAAKC,CAAG,CAAA,CAAA,KAEjB,GAAA,CAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAID,CAAAA,CAAI,MAAA,CAAQ,EAAEC,CAAAA,CAChCF,CAAAA,CAAS,IAAA,CAAKC,CAAAA,CAAIC,CAAC,CAAW,CAAA,CAKpC,EAAA,CACEF,CAAAA,CAAS,MAAA,GAAW,CAAA,EACpBA,CAAAA,CAAS,MAAA,GAAWJ,CAAAA,CAAQ,OAAA,CAAUA,CAAAA,CAAQ,IAAA,CAE9C,MAAM,IAAI,KAAA,CACR,CAAA,CAAA,EAAIA,CAAAA,CAAQ,IAAI,CAAA,sDAAA,CAClB,CAAA,CAGF,GAAA,CAAA,IAASM,CAAAA,CAAIF,CAAAA,CAAS,MAAA,CAAQE,CAAAA,CAAIN,CAAAA,CAAQ,OAAA,CAAUA,CAAAA,CAAQ,IAAA,CAAM,EAAEM,CAAAA,CAClEF,CAAAA,CAAS,IAAA,CAAK,CAAC,CAAA,CAGjB,OAAO,IAAIJ,CAAAA,CAAQ,OAAA,CAAQ,GAAGI,CAAQ,CACxC,CAAA,CAEA,CAAA,GAAID,CAAAA,CAAAA,EACFI,kCAAAA,oBAAKC,CAAAA,EAAAA;AC2DE;AACP;AAsFoC;AA8cG;AA6DjB","file":"/Users/iwo/Projects/wigsill/packages/typegpu/dist/chunk-HLB6TY7I.cjs","sourcesContent":[null,"import { createDualImpl } 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 { type ResolvedSnippet, snip } from './snippet.ts';\nimport { vec2f, vec3f, vec4f } from './vector.ts';\nimport type {\n m2x2f,\n m3x3f,\n m4x4f,\n mat2x2,\n Mat2x2f,\n mat3x3,\n Mat3x3f,\n mat4x4,\n Mat4x4f,\n NumberArrayView,\n v2f,\n v3f,\n v4f,\n 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 = createDualImpl(\n // CPU implementation\n (...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 // CODEGEN implementation\n (...args) =>\n snip(stitch`${options.type}(${args})`, schema as unknown as AnyData),\n options.type,\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 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 );\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 );\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 );\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 = createDualImpl(\n // CPU implementation\n () => mat2x2f(1, 0, 0, 1),\n // CODEGEN implementation\n () => snip('mat2x2f(1, 0, 0, 1)', mat2x2f),\n 'identity2',\n);\n\n/**\n * Returns a 3-by-3 identity matrix.\n * @returns {m3x3f} The result matrix.\n */\nexport const identity3 = createDualImpl(\n // CPU implementation\n () => mat3x3f(1, 0, 0, 0, 1, 0, 0, 0, 1),\n // CODEGEN implementation\n () => snip('mat3x3f(1, 0, 0, 0, 1, 0, 0, 0, 1)', mat3x3f),\n 'identity3',\n);\n\n/**\n * Returns a 4-by-4 identity matrix.\n * @returns {m4x4f} The result matrix.\n */\nexport const identity4 = createDualImpl(\n // CPU implementation\n () => mat4x4f(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),\n // CODEGEN implementation\n () =>\n snip('mat4x4f(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)', mat4x4f),\n 'identity4',\n);\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 = createDualImpl(\n // CPU implementation\n (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 // CODEGEN implementation\n (v) =>\n snip(\n stitch`mat4x4f(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, ${v}.x, ${v}.y, ${v}.z, 1)`,\n mat4x4f,\n ),\n 'translation4',\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 = createDualImpl(\n // CPU implementation\n (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 // CODEGEN implementation\n (v) =>\n snip(\n stitch`mat4x4f(${v}.x, 0, 0, 0, 0, ${v}.y, 0, 0, 0, 0, ${v}.z, 0, 0, 0, 0, 1)`,\n mat4x4f,\n ),\n 'scaling4',\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 = createDualImpl(\n // CPU implementation\n (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 // CODEGEN implementation\n (a) =>\n snip(\n stitch`mat4x4f(1, 0, 0, 0, 0, cos(${a}), sin(${a}), 0, 0, -sin(${a}), cos(${a}), 0, 0, 0, 0, 1)`,\n mat4x4f,\n ),\n 'rotationX4',\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 = createDualImpl(\n // CPU implementation\n (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 // CODEGEN implementation\n (a) =>\n snip(\n stitch`mat4x4f(cos(${a}), 0, -sin(${a}), 0, 0, 1, 0, 0, sin(${a}), 0, cos(${a}), 0, 0, 0, 0, 1)`,\n mat4x4f,\n ),\n 'rotationY4',\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 = createDualImpl(\n // CPU implementation\n (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 // CODEGEN implementation\n (a) =>\n snip(\n stitch`mat4x4f(cos(${a}), sin(${a}), 0, 0, -sin(${a}), cos(${a}), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)`,\n mat4x4f,\n ),\n 'rotationZ4',\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","import * as tinyest from 'tinyest';\nimport { stitch, stitchWithExactTypes } from '../core/resolve/stitch.ts';\nimport { arrayOf } from '../data/array.ts';\nimport {\n type AnyData,\n ConsoleLog,\n InfixDispatch,\n isData,\n isLooseData,\n MatrixColumnsAccess,\n UnknownData,\n} from '../data/dataTypes.ts';\nimport { abstractInt, bool, u32 } from '../data/numeric.ts';\nimport { isSnippet, snip, type Snippet } from '../data/snippet.ts';\nimport * as wgsl from '../data/wgslTypes.ts';\nimport { invariant, ResolutionError, WgslTypeError } from '../errors.ts';\nimport { getName } from '../shared/meta.ts';\nimport { isMarkedInternal } from '../shared/symbols.ts';\nimport { safeStringify } from '../shared/stringify.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport { pow } from '../std/numeric.ts';\nimport { add, div, mul, sub } from '../std/operators.ts';\nimport type { FnArgsConversionHint } from '../types.ts';\nimport {\n convertStructValues,\n convertToCommonType,\n tryConvertSnippet,\n} from './conversion.ts';\nimport {\n coerceToSnippet,\n concretize,\n type GenerationCtx,\n getTypeForIndexAccess,\n getTypeForPropAccess,\n numericLiteralToSnippet,\n} from './generationHelpers.ts';\nimport type { ShaderGenerator } from './shaderGenerator.ts';\n\nconst { NodeTypeCatalog: NODE } = tinyest;\n\nconst parenthesizedOps = [\n '==',\n '!=',\n '<',\n '<=',\n '>',\n '>=',\n '<<',\n '>>',\n '+',\n '-',\n '*',\n '/',\n '%',\n '|',\n '^',\n '&',\n '&&',\n '||',\n];\n\nconst binaryLogicalOps = ['&&', '||', '==', '!=', '<', '<=', '>', '>='];\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 Operator =\n | tinyest.BinaryOperator\n | tinyest.AssignmentOperator\n | tinyest.LogicalOperator\n | tinyest.UnaryOperator;\n\nfunction operatorToType<\n TL extends AnyData | UnknownData,\n TR extends AnyData | UnknownData,\n>(lhs: TL, op: Operator, rhs?: TR): TL | TR | wgsl.Bool {\n if (!rhs) {\n if (op === '!' || op === '~') {\n return bool;\n }\n\n return lhs;\n }\n\n if (binaryLogicalOps.includes(op)) {\n return bool;\n }\n\n if (op === '=') {\n return rhs;\n }\n\n return lhs;\n}\n\nconst opCodeToCodegen = {\n '+': add[$internal].gpuImpl,\n '-': sub[$internal].gpuImpl,\n '*': mul[$internal].gpuImpl,\n '/': div[$internal].gpuImpl,\n '**': pow[$internal].gpuImpl,\n} satisfies Partial<\n Record<tinyest.BinaryOperator, (...args: never[]) => unknown>\n>;\n\nclass WgslGenerator implements ShaderGenerator {\n #ctx: GenerationCtx | undefined = undefined;\n\n public initGenerator(ctx: GenerationCtx) {\n this.#ctx = ctx;\n }\n\n private get ctx(): GenerationCtx {\n if (!this.#ctx) {\n throw new Error(\n 'WGSL Generator has not yet been initialized. Please call initialize(ctx) before using the generator.',\n );\n }\n return this.#ctx;\n }\n\n public block(\n [_, statements]: tinyest.Block,\n ): string {\n this.ctx.pushBlockScope();\n try {\n this.ctx.indent();\n const body = statements.map((statement) => this.statement(statement))\n .join('\\n');\n this.ctx.dedent();\n return `{\n${body}\n${this.ctx.pre}}`;\n } finally {\n this.ctx.popBlockScope();\n }\n }\n\n public blockVariable(\n id: string,\n dataType: wgsl.AnyWgslData | UnknownData,\n ): Snippet {\n const snippet = snip(this.ctx.makeNameValid(id), dataType);\n this.ctx.defineVariable(id, snippet);\n return snippet;\n }\n\n public identifier(id: string): Snippet {\n if (!id) {\n throw new Error('Cannot resolve an empty identifier');\n }\n const res = this.ctx.getById(id);\n\n if (!res) {\n throw new Error(`Identifier ${id} not found`);\n }\n\n return res;\n }\n\n /**\n * A wrapper for `generateExpression` that updates `ctx.expectedType`\n * and tries to convert the result when it does not match the expected type.\n */\n public typedExpression(\n expression: tinyest.Expression,\n expectedType: AnyData,\n ) {\n const prevExpectedType = this.ctx.expectedType;\n this.ctx.expectedType = expectedType;\n\n try {\n const result = this.expression(expression);\n return tryConvertSnippet(result, expectedType);\n } finally {\n this.ctx.expectedType = prevExpectedType;\n }\n }\n\n public expression(\n expression: tinyest.Expression,\n ): Snippet {\n if (typeof expression === 'string') {\n return this.identifier(expression);\n }\n\n if (typeof expression === 'boolean') {\n return snip(expression, bool);\n }\n\n if (\n expression[0] === NODE.logicalExpr ||\n expression[0] === NODE.binaryExpr ||\n expression[0] === NODE.assignmentExpr\n ) {\n // Logical/Binary/Assignment Expression\n const [_, lhs, op, rhs] = expression;\n const lhsExpr = this.expression(lhs);\n const rhsExpr = this.expression(rhs);\n\n const codegen = opCodeToCodegen[op as keyof typeof opCodeToCodegen];\n if (codegen) {\n return codegen(lhsExpr, rhsExpr);\n }\n\n const forcedType = expression[0] === NODE.assignmentExpr\n ? lhsExpr.dataType.type === 'ptr'\n ? [lhsExpr.dataType.inner as AnyData]\n : [lhsExpr.dataType as AnyData]\n : undefined;\n\n const [convLhs, convRhs] =\n convertToCommonType([lhsExpr, rhsExpr], forcedType) ??\n [lhsExpr, rhsExpr];\n\n const lhsStr = this.ctx.resolve(convLhs.value, convLhs.dataType).value;\n const rhsStr = this.ctx.resolve(convRhs.value, convRhs.dataType).value;\n const type = operatorToType(convLhs.dataType, op, convRhs.dataType);\n\n return snip(\n parenthesizedOps.includes(op)\n ? `(${lhsStr} ${op} ${rhsStr})`\n : `${lhsStr} ${op} ${rhsStr}`,\n type,\n );\n }\n\n if (expression[0] === NODE.postUpdate) {\n // Post-Update Expression\n const [_, op, arg] = expression;\n const argExpr = this.expression(arg);\n const argStr = this.ctx.resolve(argExpr.value).value;\n\n return snip(`${argStr}${op}`, argExpr.dataType);\n }\n\n if (expression[0] === NODE.unaryExpr) {\n // Unary Expression\n const [_, op, arg] = expression;\n const argExpr = this.expression(arg);\n const argStr = this.ctx.resolve(argExpr.value).value;\n\n const type = operatorToType(argExpr.dataType, op);\n return snip(`${op}${argStr}`, type);\n }\n\n if (expression[0] === NODE.memberAccess) {\n // Member Access\n const [_, targetNode, property] = expression;\n const target = this.expression(targetNode);\n\n if (target.value === console) {\n return snip(new ConsoleLog(), UnknownData);\n }\n\n if (\n infixKinds.includes(target.dataType.type) &&\n property in infixOperators\n ) {\n return {\n value: new InfixDispatch(\n property,\n target,\n infixOperators[property as InfixOperator][$internal].gpuImpl,\n ),\n dataType: UnknownData,\n };\n }\n\n if (target.dataType.type === 'unknown') {\n // No idea what the type is, so we act on the snippet's value and try to guess\n\n // biome-ignore lint/suspicious/noExplicitAny: we're inspecting the value, and it could be any value\n const propValue = (target.value as any)[property];\n\n // We try to extract any type information based on the prop's value\n return coerceToSnippet(propValue);\n }\n\n if (wgsl.isPtr(target.dataType)) {\n return snip(\n `(*${this.ctx.resolve(target.value).value}).${property}`,\n getTypeForPropAccess(target.dataType.inner as AnyData, property),\n );\n }\n\n if (wgsl.isWgslArray(target.dataType) && property === 'length') {\n if (target.dataType.elementCount === 0) {\n // Dynamically-sized array\n return snip(\n `arrayLength(&${this.ctx.resolve(target.value).value})`,\n u32,\n );\n }\n\n return snip(String(target.dataType.elementCount), abstractInt);\n }\n\n if (wgsl.isMat(target.dataType) && property === 'columns') {\n return snip(new MatrixColumnsAccess(target), UnknownData);\n }\n\n if (\n wgsl.isVec(target.dataType) && wgsl.isVecInstance(target.value)\n ) {\n // We're operating on a vector that's known at resolution time\n // biome-ignore lint/suspicious/noExplicitAny: it's probably a swizzle\n return coerceToSnippet((target.value as any)[property]);\n }\n\n return snip(\n `${this.ctx.resolve(target.value).value}.${property}`,\n getTypeForPropAccess(target.dataType, property),\n );\n }\n\n if (expression[0] === NODE.indexAccess) {\n // Index Access\n const [_, targetNode, propertyNode] = expression;\n const target = this.expression(targetNode);\n const property = this.expression(propertyNode);\n const propertyStr =\n this.ctx.resolve(property.value, property.dataType).value;\n\n if (target.value instanceof MatrixColumnsAccess) {\n return snip(\n stitch`${target.value.matrix}[${propertyStr}]`,\n getTypeForIndexAccess(target.value.matrix.dataType as AnyData),\n );\n }\n const targetStr = this.ctx.resolve(target.value, target.dataType).value;\n\n if (target.dataType.type === 'unknown') {\n // No idea what the type is, so we act on the snippet's value and try to guess\n\n if (\n Array.isArray(propertyNode) && propertyNode[0] === NODE.numericLiteral\n ) {\n return coerceToSnippet(\n // biome-ignore lint/suspicious/noExplicitAny: we're inspecting the value, and it could be any value\n (target.value as any)[propertyNode[1] as number],\n );\n }\n\n throw new Error(\n `Cannot index value ${targetStr} of unknown type with index ${propertyStr}`,\n );\n }\n\n if (wgsl.isMat(target.dataType)) {\n throw new Error(\n \"The only way of accessing matrix elements in TGSL is through the 'columns' property.\",\n );\n }\n\n if (wgsl.isPtr(target.dataType)) {\n return snip(\n `(*${targetStr})[${propertyStr}]`,\n getTypeForIndexAccess(target.dataType.inner as AnyData),\n );\n }\n\n return snip(\n `${targetStr}[${propertyStr}]`,\n isData(target.dataType)\n ? getTypeForIndexAccess(target.dataType)\n : UnknownData,\n );\n }\n\n if (expression[0] === NODE.numericLiteral) {\n // Numeric Literal\n const type = typeof expression[1] === 'string'\n ? numericLiteralToSnippet(parseNumericString(expression[1]))\n : numericLiteralToSnippet(expression[1]);\n if (!type) {\n throw new Error(`Invalid numeric literal ${expression[1]}`);\n }\n return type;\n }\n\n if (expression[0] === NODE.call) {\n // Function Call\n const [_, calleeNode, argNodes] = expression;\n const callee = this.expression(calleeNode);\n\n if (wgsl.isWgslStruct(callee.value) || wgsl.isWgslArray(callee.value)) {\n // Struct/array schema call.\n if (argNodes.length > 1) {\n throw new WgslTypeError(\n 'Array and struct schemas should always be called with at most 1 argument',\n );\n }\n\n // No arguments `Struct()`, resolve struct name and return.\n if (!argNodes[0]) {\n // the schema becomes the data type\n return snip(\n `${this.ctx.resolve(callee.value).value}()`,\n callee.value,\n );\n }\n\n const arg = this.typedExpression(\n argNodes[0],\n callee.value,\n );\n\n // Either `Struct({ x: 1, y: 2 })`, or `Struct(otherStruct)`.\n // In both cases, we just let the argument resolve everything.\n return snip(\n this.ctx.resolve(arg.value, callee.value).value,\n callee.value,\n );\n }\n\n if (callee.value instanceof InfixDispatch) {\n // Infix operator dispatch.\n if (!argNodes[0]) {\n throw new WgslTypeError(\n `An infix operator '${callee.value.name}' was called without any arguments`,\n );\n }\n const rhs = this.expression(argNodes[0]);\n return callee.value.operator(callee.value.lhs, rhs);\n }\n\n if (!isMarkedInternal(callee.value)) {\n const args = argNodes.map((arg) => this.expression(arg));\n const shellless = this.ctx.shelllessRepo.get(\n callee.value as (...args: never[]) => unknown,\n args,\n );\n if (shellless) {\n return this.ctx.withResetIndentLevel(() => {\n const snippet = this.ctx.resolve(shellless);\n return snip(stitch`${snippet.value}(${args})`, snippet.dataType);\n });\n }\n\n throw new Error(\n `Function '${\n getName(callee.value) ?? String(callee.value)\n }' is not marked with the 'use gpu' directive and cannot be used in a shader`,\n );\n }\n\n // Other, including tgsl functions, std and vector/matrix schema calls.\n\n const argConversionHint =\n (callee.value[$internal] as Record<string, unknown>)\n ?.argConversionHint as FnArgsConversionHint ?? 'keep';\n try {\n let convertedArguments: Snippet[];\n\n if (Array.isArray(argConversionHint)) {\n // The hint is an array of schemas.\n convertedArguments = argNodes.map((arg, i) => {\n const argType = argConversionHint[i];\n if (!argType) {\n throw new WgslTypeError(\n `Function '${\n getName(callee.value)\n }' was called with too many arguments`,\n );\n }\n return this.typedExpression(arg, argType);\n });\n } else {\n const snippets = argNodes.map((arg) => this.expression(arg));\n\n if (argConversionHint === 'keep') {\n // The hint tells us to do nothing.\n convertedArguments = snippets;\n } else if (argConversionHint === 'unify') {\n // The hint tells us to unify the types.\n convertedArguments = convertToCommonType(snippets) ?? snippets;\n } else {\n // The hint is a function that converts the arguments.\n convertedArguments = argConversionHint(...snippets)\n .map((type, i) => [type, snippets[i] as Snippet] as const)\n .map(([type, sn]) => tryConvertSnippet(sn, type));\n }\n }\n\n if (callee.value instanceof ConsoleLog) {\n return this.ctx.generateLog(convertedArguments);\n }\n\n // Assuming that `callee` is callable\n const fnRes =\n (callee.value as unknown as (...args: unknown[]) => unknown)(\n ...convertedArguments,\n );\n\n if (!isSnippet(fnRes)) {\n throw new Error(\n 'Functions running in codegen mode must return snippets',\n );\n }\n return fnRes;\n } catch (error) {\n throw new ResolutionError(error, [{\n toString: () => getName(callee.value),\n }]);\n }\n }\n\n if (expression[0] === NODE.objectExpr) {\n // Object Literal\n const obj = expression[1];\n\n const structType = this.ctx.expectedType;\n\n if (!structType || !wgsl.isWgslStruct(structType)) {\n throw new WgslTypeError(\n `No target type could be inferred for object with keys [${\n Object.keys(obj).join(', ')\n }], please wrap the object in the corresponding schema.`,\n );\n }\n\n const entries = Object.fromEntries(\n Object.entries(structType.propTypes).map(([key, value]) => {\n const val = obj[key];\n if (val === undefined) {\n throw new WgslTypeError(\n `Missing property ${key} in object literal for struct ${structType}`,\n );\n }\n const result = this.typedExpression(\n val,\n value as AnyData,\n );\n return [key, result];\n }),\n );\n\n const convertedSnippets = convertStructValues(structType, entries);\n\n return snip(\n stitch`${this.ctx.resolve(structType).value}(${convertedSnippets})`,\n structType,\n );\n }\n\n if (expression[0] === NODE.arrayExpr) {\n const [_, valueNodes] = expression;\n // Array Expression\n const arrType = this.ctx.expectedType;\n let elemType: AnyData;\n let values: Snippet[];\n\n if (wgsl.isWgslArray(arrType)) {\n elemType = arrType.elementType as AnyData;\n // The array is typed, so its elements should be as well.\n values = valueNodes.map((value) =>\n this.typedExpression(value, elemType)\n );\n // Since it's an expected type, we enforce the length\n if (values.length !== arrType.elementCount) {\n throw new WgslTypeError(\n `Cannot create value of type '${arrType}' from an array of length: ${values.length}`,\n );\n }\n } else {\n // The array is not typed, so we try to guess the types.\n const valuesSnippets = valueNodes.map((value) =>\n this.expression(value as tinyest.Expression)\n );\n\n if (valuesSnippets.length === 0) {\n throw new WgslTypeError(\n 'Cannot infer the type of an empty array literal.',\n );\n }\n\n const converted = convertToCommonType(valuesSnippets);\n if (!converted) {\n throw new WgslTypeError(\n 'The given values cannot be automatically converted to a common type. Consider wrapping the array in an appropriate schema',\n );\n }\n\n values = converted;\n elemType = concretize(values[0]?.dataType as wgsl.AnyWgslData);\n }\n\n const arrayType = `array<${\n this.ctx.resolve(elemType).value\n }, ${values.length}>`;\n\n return snip(\n stitch`${arrayType}(${values})`,\n arrayOf[$internal].jsImpl(\n elemType as wgsl.AnyWgslData,\n values.length,\n ) as wgsl.AnyWgslData,\n );\n }\n\n if (expression[0] === NODE.stringLiteral) {\n return snip(expression[1], UnknownData);\n }\n\n if (expression[0] === NODE.preUpdate) {\n throw new Error('Cannot use pre-updates in TGSL.');\n }\n\n assertExhaustive(expression);\n }\n\n public functionDefinition(\n body: tinyest.Block,\n ): string {\n return this.block(body);\n }\n\n public statement(\n statement: tinyest.Statement,\n ): string {\n if (typeof statement === 'string') {\n return `${this.ctx.pre}${\n this.ctx.resolve(this.identifier(statement).value).value\n };`;\n }\n\n if (typeof statement === 'boolean') {\n return `${this.ctx.pre}${statement ? 'true' : 'false'};`;\n }\n\n if (statement[0] === NODE.return) {\n const returnNode = statement[1];\n\n if (returnNode !== undefined) {\n const expectedReturnType = this.ctx.topFunctionReturnType;\n const returnSnippet = expectedReturnType\n ? this.typedExpression(\n returnNode,\n expectedReturnType,\n )\n : this.expression(returnNode);\n\n invariant(\n returnSnippet.dataType.type !== 'unknown',\n 'Return type should be known',\n );\n\n this.ctx.reportReturnType(returnSnippet.dataType);\n return stitch`${this.ctx.pre}return ${returnSnippet};`;\n }\n\n return `${this.ctx.pre}return;`;\n }\n\n if (statement[0] === NODE.if) {\n const [_, condNode, consNode, altNode] = statement;\n const condition = this.typedExpression(condNode, bool);\n\n const consequent = condition.value === false\n ? undefined\n : this.block(blockifySingleStatement(consNode));\n const alternate = condition.value === true || !altNode\n ? undefined\n : this.block(blockifySingleStatement(altNode));\n\n if (condition.value === true) {\n return `${this.ctx.pre}${consequent}`;\n }\n\n if (condition.value === false) {\n return alternate ? `${this.ctx.pre}${alternate}` : '';\n }\n\n if (!alternate) {\n return stitch`${this.ctx.pre}if (${condition}) ${consequent}`;\n }\n\n return stitch`\\\n${this.ctx.pre}if (${condition}) ${consequent}\n${this.ctx.pre}else ${alternate}`;\n }\n\n if (statement[0] === NODE.let || statement[0] === NODE.const) {\n const [_, rawId, rawValue] = statement;\n const eq = rawValue !== undefined ? this.expression(rawValue) : undefined;\n\n if (!eq) {\n throw new Error(\n `Cannot create variable '${rawId}' without an initial value.`,\n );\n }\n\n if (isLooseData(eq.dataType)) {\n throw new Error(\n `Cannot create variable '${rawId}' with loose data type.`,\n );\n }\n\n const snippet = this.blockVariable(\n rawId,\n concretize(eq.dataType as wgsl.AnyWgslData),\n );\n return stitchWithExactTypes`${this.ctx.pre}var ${snippet\n .value as string} = ${eq};`;\n }\n\n if (statement[0] === NODE.block) {\n return this.block(statement);\n }\n\n if (statement[0] === NODE.for) {\n const [_, init, condition, update, body] = statement;\n\n const [initStatement, conditionExpr, updateStatement] = this.ctx\n .withResetIndentLevel(\n () => [\n init ? this.statement(init) : undefined,\n condition ? this.typedExpression(condition, bool) : undefined,\n update ? this.statement(update) : undefined,\n ],\n );\n\n const initStr = initStatement ? initStatement.slice(0, -1) : '';\n const updateStr = updateStatement ? updateStatement.slice(0, -1) : '';\n\n const bodyStr = this.block(blockifySingleStatement(body));\n return stitch`${this.ctx.pre}for (${initStr}; ${conditionExpr}; ${updateStr}) ${bodyStr}`;\n }\n\n if (statement[0] === NODE.while) {\n const [_, condition, body] = statement;\n const condSnippet = this.typedExpression(condition, bool);\n const conditionStr = this.ctx.resolve(condSnippet.value).value;\n\n const bodyStr = this.block(blockifySingleStatement(body));\n return `${this.ctx.pre}while (${conditionStr}) ${bodyStr}`;\n }\n\n if (statement[0] === NODE.continue) {\n return `${this.ctx.pre}continue;`;\n }\n\n if (statement[0] === NODE.break) {\n return `${this.ctx.pre}break;`;\n }\n\n return `${this.ctx.pre}${\n this.ctx.resolve(this.expression(statement).value).value\n };`;\n }\n}\n\nfunction assertExhaustive(value: never): never {\n throw new Error(\n `'${safeStringify(value)}' was not handled by the WGSL generator.`,\n );\n}\n\nfunction parseNumericString(str: string): number {\n // Hex literals\n if (/^0x[0-9a-f]+$/i.test(str)) {\n return Number.parseInt(str);\n }\n\n // Binary literals\n if (/^0b[01]+$/i.test(str)) {\n return Number.parseInt(str.slice(2), 2);\n }\n\n return Number.parseFloat(str);\n}\n\nfunction blockifySingleStatement(statement: tinyest.Statement): tinyest.Block {\n return typeof statement !== 'object' ||\n statement[0] !== NODE.block\n ? [NODE.block, [statement]]\n : statement;\n}\n\nconst wgslGenerator: WgslGenerator = new WgslGenerator();\nexport default wgslGenerator;\n"]}
package/chunk-ZYSFFI3M.js DELETED
@@ -1,2 +0,0 @@
1
- import{S as q,T as W,U as u,W as _}from"./chunk-6OJFCDQF.js";import{$ as b,Ea as r,Ia as w,Ma as v,Oa as c,Ra as B,Sa as o,Ua as i,Va as n,Ya as h,_a as F,a as V,aa as y,ab as U,bb as k,db as N,fb as D,gb as a,ib as p,jb as f,kb as E,r as M,v as z}from"./chunk-BDGVKGU4.js";var ae=c({name:"bitcastU32toF32",normalImpl:(e=>typeof e=="number"?q(e):u.bitcastU32toF32[e.kind](e)),codegenImpl:e=>r`bitcast<f32>(${e})`,signature:(...e)=>{let t=w(e,[o])??e;return{argTypes:t,returnType:z(t[0])?t[0].type==="vec2u"?h:t[0].type==="vec3u"?k:a:n}}}),ne=c({name:"bitcastU32toI32",normalImpl:(e=>typeof e=="number"?W(e):u.bitcastU32toI32[e.kind](e)),codegenImpl:e=>r`bitcast<i32>(${e})`,signature:(...e)=>{let t=w(e,[o])??e;return{argTypes:t,returnType:z(t[0])?t[0].type==="vec2u"?F:t[0].type==="vec3u"?N:p:i}}});import*as m from"typed-binary";var ie=v(e=>{let t=new ArrayBuffer(4);new m.BufferWriter(t).writeUint32(e);let s=new m.BufferReader(t);return h(s.readFloat16(),s.readFloat16())},e=>y(r`unpack2x16float(${e})`,h),"unpack2x16float"),pe=v(e=>{let t=new ArrayBuffer(4),l=new m.BufferWriter(t);l.writeFloat16(e.x),l.writeFloat16(e.y);let s=new m.BufferReader(t);return o(s.readUint32())},e=>y(r`pack2x16float(${e})`,o),"pack2x16float"),fe=v(e=>{let t=new ArrayBuffer(4);new m.BufferWriter(t).writeUint32(e);let s=new m.BufferReader(t);return a(s.readUint8()/255,s.readUint8()/255,s.readUint8()/255,s.readUint8()/255)},e=>y(r`unpack4x8unorm(${e})`,a),"unpack4x8unorm"),ue=v(e=>{let t=new ArrayBuffer(4),l=new m.BufferWriter(t);l.writeUint8(e.x*255),l.writeUint8(e.y*255),l.writeUint8(e.z*255),l.writeUint8(e.w*255);let s=new m.BufferReader(t);return o(s.readUint32())},e=>y(r`pack4x8unorm(${e})`,o),"pack4x8unorm");function T(e){return e.type.includes("2")?U:e.type.includes("3")?D:E}var Re=c({name:"allEq",signature:(...e)=>({argTypes:e,returnType:B}),normalImpl:(e,t)=>$(x(e,t)),codegenImpl:(e,t)=>r`all(${e} == ${t})`}),x=(e,t)=>u.eq[e.kind](e,t),Ae=c({name:"eq",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:x,codegenImpl:(e,t)=>r`(${e} == ${t})`}),Se=c({name:"ne",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:(e,t)=>d(x(e,t)),codegenImpl:(e,t)=>r`(${e} != ${t})`}),A=(e,t)=>u.lt[e.kind](e,t),Me=c({name:"lt",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:A,codegenImpl:(e,t)=>r`(${e} < ${t})`}),ze=c({name:"le",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:(e,t)=>I(A(e,t),x(e,t)),codegenImpl:(e,t)=>r`(${e} <= ${t})`}),we=c({name:"gt",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:(e,t)=>O(d(A(e,t)),d(x(e,t))),codegenImpl:(e,t)=>r`(${e} > ${t})`}),Ie=c({name:"ge",signature:(...e)=>({argTypes:e,returnType:T(e[0])}),normalImpl:(e,t)=>d(A(e,t)),codegenImpl:(e,t)=>r`(${e} >= ${t})`}),d=e=>u.neg[e.kind](e),$e=c({name:"not",signature:(...e)=>({argTypes:e,returnType:e[0]}),normalImpl:d,codegenImpl:e=>r`!(${e})`}),I=(e,t)=>u.or[e.kind](e,t),Ve=c({name:"or",signature:(...e)=>({argTypes:e,returnType:e[0]}),normalImpl:I,codegenImpl:(e,t)=>r`(${e} | ${t})`}),O=(e,t)=>d(I(d(e),d(t))),Fe=c({name:"and",signature:(...e)=>({argTypes:e,returnType:e[0]}),normalImpl:O,codegenImpl:(e,t)=>r`(${e} & ${t})`}),$=e=>u.all[e.kind](e),Ue=c({name:"all",signature:(...e)=>({argTypes:e,returnType:B}),normalImpl:$,codegenImpl:e=>r`all(${e})`}),ke=c({name:"any",signature:(...e)=>({argTypes:e,returnType:B}),normalImpl:e=>!$(d(e)),codegenImpl:e=>r`any(${e})`}),Ne=c({name:"isCloseTo",signature:(...e)=>({argTypes:e,returnType:B}),normalImpl:(e,t,l=.01)=>typeof e=="number"&&typeof t=="number"?Math.abs(e-t)<l:M(e)&&M(t)?u.isCloseToZero[e.kind](_[V].jsImpl(e,t),l):!1,codegenImpl:(e,t,l=y(.01,n))=>b(e)&&b(t)?r`(abs(f32(${e}) - f32(${t})) <= ${l})`:!b(e)&&!b(t)?r`all(abs(${e} - ${t}) <= (${e} - ${e}) + ${l})`:"false"});function j(e,t,l){return typeof l=="boolean"?l?t:e:u.select[e.kind](e,t,l)}var De=c({name:"select",signature:(...e)=>({argTypes:e,returnType:e[0]}),normalImpl:j,codegenImpl:(e,t,l)=>r`select(${e}, ${t}, ${l})`});var L={r8unorm:{channelType:n,vectorType:a,texelSize:1,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only","read-write"]},r8snorm:{channelType:n,vectorType:a,texelSize:1,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only"]},r8uint:{channelType:o,vectorType:f,texelSize:1,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},r8sint:{channelType:i,vectorType:p,texelSize:1,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rg8unorm:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only"]},rg8snorm:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only"]},rg8uint:{channelType:o,vectorType:f,texelSize:2,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rg8sint:{channelType:i,vectorType:p,texelSize:2,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rgba8unorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only","read-write"]},"rgba8unorm-srgb":{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:null},rgba8snorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rgba8uint:{channelType:o,vectorType:f,texelSize:4,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba8sint:{channelType:i,vectorType:p,texelSize:4,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},bgra8unorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only"]},"bgra8unorm-srgb":{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:null},r16unorm:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},r16snorm:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},r16uint:{channelType:o,vectorType:f,texelSize:2,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},r16sint:{channelType:i,vectorType:p,texelSize:2,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},r16float:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only","read-write"]},rg16unorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rg16snorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rg16uint:{channelType:o,vectorType:f,texelSize:4,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rg16sint:{channelType:i,vectorType:p,texelSize:4,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rg16float:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only"]},rgba16unorm:{channelType:n,vectorType:a,texelSize:8,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rgba16snorm:{channelType:n,vectorType:a,texelSize:8,sampleTypes:["unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rgba16uint:{channelType:o,vectorType:f,texelSize:8,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba16sint:{channelType:i,vectorType:p,texelSize:8,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba16float:{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only","read-write"]},r32uint:{channelType:o,vectorType:f,texelSize:4,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},r32sint:{channelType:i,vectorType:p,texelSize:4,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},r32float:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rg32uint:{channelType:o,vectorType:f,texelSize:8,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only"]},rg32sint:{channelType:i,vectorType:p,texelSize:8,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only"]},rg32float:{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba32uint:{channelType:o,vectorType:f,texelSize:16,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba32sint:{channelType:i,vectorType:p,texelSize:16,sampleTypes:["sint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgba32float:{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!1,canResolve:!1,storageBindings:["write-only","read-only","read-write"]},rgb10a2uint:{channelType:o,vectorType:f,texelSize:4,sampleTypes:["uint"],aspects:["color"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:["write-only","read-only"]},rgb10a2unorm:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only"]},rg11b10ufloat:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!0,canBlend:!0,canMultisample:!0,canResolve:!0,storageBindings:["write-only","read-only"]},rgb9e5ufloat:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},stencil8:{channelType:o,vectorType:f,texelSize:1,sampleTypes:["uint"],aspects:["stencil"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},depth16unorm:{channelType:n,vectorType:a,texelSize:2,sampleTypes:["depth","unfilterable-float"],aspects:["depth"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},depth24plus:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["depth","unfilterable-float"],aspects:["depth"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},"depth24plus-stencil8":{channelType:n,vectorType:a,texelSize:4,sampleTypes:["depth","unfilterable-float"],aspects:["depth","stencil"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},depth32float:{channelType:n,vectorType:a,texelSize:4,sampleTypes:["depth","unfilterable-float"],aspects:["depth"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},"depth32float-stencil8":{channelType:n,vectorType:a,texelSize:4,sampleTypes:["depth","unfilterable-float"],aspects:["depth","stencil"],canRenderAttachment:!0,canBlend:!1,canMultisample:!0,canResolve:!1,storageBindings:null},"bc1-rgba-unorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc1-rgba-unorm-srgb":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc2-rgba-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc2-rgba-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc3-rgba-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc3-rgba-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc4-r-unorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc4-r-snorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc5-rg-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc5-rg-snorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc6h-rgb-ufloat":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc6h-rgb-float":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc7-rgba-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"bc7-rgba-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgb8unorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgb8unorm-srgb":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgb8a1unorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgb8a1unorm-srgb":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgba8unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"etc2-rgba8unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"eac-r11unorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"eac-r11snorm":{channelType:n,vectorType:a,texelSize:8,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"eac-rg11unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"eac-rg11snorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-4x4-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-4x4-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-5x4-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-5x4-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-5x5-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-5x5-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-6x5-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-6x5-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-6x6-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-6x6-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x5-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x5-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x6-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x6-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x8-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-8x8-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x5-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x5-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x6-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x6-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x8-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x8-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x10-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-10x10-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-12x10-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-12x10-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-12x12-unorm":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null},"astc-12x12-unorm-srgb":{channelType:n,vectorType:a,texelSize:16,sampleTypes:["float","unfilterable-float"],aspects:["color"],canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1,storageBindings:null}};function _e(e,t){let l=L[e];if(!l)throw new Error(`Unknown texture format: ${e}`);let s={...l};switch(e){case"r32float":case"rg32float":case"rgba32float":t.features.has("float32-filterable")||(s={...s,sampleTypes:l.sampleTypes.filter(S=>S!=="float")}),t.features.has("float32-blendable")||(s={...s,canBlend:!1});break;case"bgra8unorm":t.features.has("bgra8unorm-storage")||(s={...s,storageBindings:null});break;case"rg11b10ufloat":t.features.has("rg11b10ufloat-renderable")||(s={...s,canRenderAttachment:!1,canBlend:!1,canMultisample:!1,canResolve:!1});break}if(s.storageBindings){let S=t.features.has("texture-formats-tier1"),G=t.features.has("texture-formats-tier2"),g=[...s.storageBindings],P=["r8unorm","r8uint","r8sint","r16uint","r16sint","r16float","rgba8unorm","rgba8uint","rgba8sint","rgba16uint","rgba16sint","rgba16float","r32uint","r32sint","r32float","rgba32uint","rgba32sint","rgba32float"],C=["r8snorm","rg8unorm","rg8snorm","rg8uint","rg8sint","rgba8snorm","r16unorm","r16snorm","rg16unorm","rg16snorm","rg16uint","rg16sint","rg16float","rgba16unorm","rgba16snorm","rgb10a2uint","rgb10a2unorm","rg11b10ufloat"];P.includes(e)&&!G&&(g=g.filter(R=>R!=="read-write")),C.includes(e)&&!S&&(g=g.filter(R=>R!=="write-only"&&R!=="read-only")),s={...s,storageBindings:g.length>0?g:null}}return s}var Ge=["f16","clip_distances","dual_source_blending","subgroups","primitive_index"],Pe={f16:"shader-f16",clip_distances:"clip-distances",dual_source_blending:"dual-source-blending",subgroups:"subgroups",primitive_index:"primitive-index"};export{L as a,_e as b,ae as c,ne as d,ie as e,pe as f,fe as g,ue as h,Ge as i,Pe as j,Re as k,Ae as l,Se as m,Me as n,ze as o,we as p,Ie as q,$e as r,Ve as s,Fe as t,Ue as u,ke as v,Ne as w,De as x};
2
- //# sourceMappingURL=chunk-ZYSFFI3M.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/std/bitcast.ts","../src/std/packing.ts","../src/std/boolean.ts","../src/core/texture/textureFormats.ts","../src/wgslExtensions.ts"],"sourcesContent":["import { dualImpl } from '../core/function/dualImpl.ts';\nimport { stitch } from '../core/resolve/stitch.ts';\nimport { bitcastU32toF32Impl, bitcastU32toI32Impl } from '../data/numberOps.ts';\nimport { f32, i32, u32 } from '../data/numeric.ts';\nimport { isVec } from '../data/wgslTypes.ts';\nimport { vec2f, vec2i, vec3f, vec3i, vec4f, vec4i } from '../data/vector.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport type {\n v2f,\n v2i,\n v2u,\n v3f,\n v3i,\n v3u,\n v4f,\n v4i,\n v4u,\n} from '../data/wgslTypes.ts';\nimport { unify } from '../tgsl/conversion.ts';\n\nexport type BitcastU32toF32Overload =\n & ((value: number) => number)\n & ((value: v2u) => v2f)\n & ((value: v3u) => v3f)\n & ((value: v4u) => v4f);\n\nexport const bitcastU32toF32 = dualImpl({\n name: 'bitcastU32toF32',\n normalImpl: ((value) => {\n if (typeof value === 'number') {\n return bitcastU32toF32Impl(value);\n }\n return VectorOps.bitcastU32toF32[value.kind](value);\n }) as BitcastU32toF32Overload,\n codegenImpl: (n) => stitch`bitcast<f32>(${n})`,\n signature: (...arg) => {\n const uargs = unify(arg, [u32]) ?? arg;\n return {\n argTypes: uargs,\n returnType: isVec(uargs[0])\n ? uargs[0].type === 'vec2u'\n ? vec2f\n : uargs[0].type === 'vec3u'\n ? vec3f\n : vec4f\n : f32,\n };\n },\n});\n\nexport type BitcastU32toI32Overload =\n & ((value: number) => number)\n & ((value: v2u) => v2i)\n & ((value: v3u) => v3i)\n & ((value: v4u) => v4i);\n\nexport const bitcastU32toI32 = dualImpl({\n name: 'bitcastU32toI32',\n normalImpl: ((value) => {\n if (typeof value === 'number') {\n return bitcastU32toI32Impl(value);\n }\n return VectorOps.bitcastU32toI32[value.kind](value);\n }) as BitcastU32toI32Overload,\n codegenImpl: (n) => stitch`bitcast<i32>(${n})`,\n signature: (...arg) => {\n const uargs = unify(arg, [u32]) ?? arg;\n return {\n argTypes: uargs,\n returnType: isVec(uargs[0])\n ? uargs[0].type === 'vec2u'\n ? vec2i\n : uargs[0].type === 'vec3u'\n ? vec3i\n : vec4i\n : i32,\n };\n },\n});\n","import * as TB from 'typed-binary';\nimport { u32 } from '../data/numeric.ts';\nimport { vec2f, vec4f } from '../data/vector.ts';\nimport type { v2f, v4f } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../core/function/dualImpl.ts';\nimport { stitch } from '../core/resolve/stitch.ts';\nimport { snip } from '../data/snippet.ts';\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack2x16float-builtin\n */\nexport const unpack2x16float = createDualImpl(\n // CPU implementation\n (e: number): v2f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec2f(reader.readFloat16(), reader.readFloat16());\n },\n // GPU implementation\n (e) => snip(stitch`unpack2x16float(${e})`, vec2f),\n 'unpack2x16float',\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack2x16float-builtin\n */\nexport const pack2x16float = createDualImpl(\n // CPU implementation\n (e: v2f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeFloat16(e.x);\n writer.writeFloat16(e.y);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => snip(stitch`pack2x16float(${e})`, u32),\n 'pack2x16float',\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack4x8unorm-builtin\n */\nexport const unpack4x8unorm = createDualImpl(\n // CPU implementation\n (e: number): v4f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec4f(\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n );\n },\n // GPU implementation\n (e) => snip(stitch`unpack4x8unorm(${e})`, vec4f),\n 'unpack4x8unorm',\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack4x8unorm-builtin\n */\nexport const pack4x8unorm = createDualImpl(\n // CPU implementation\n (e: v4f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint8(e.x * 255);\n writer.writeUint8(e.y * 255);\n writer.writeUint8(e.z * 255);\n writer.writeUint8(e.w * 255);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => snip(stitch`pack4x8unorm(${e})`, u32),\n 'pack4x8unorm',\n);\n","import { dualImpl } from '../core/function/dualImpl.ts';\nimport { stitch } from '../core/resolve/stitch.ts';\nimport type { AnyData } from '../data/dataTypes.ts';\nimport { bool, f32 } from '../data/numeric.ts';\nimport { isSnippetNumeric, snip } from '../data/snippet.ts';\nimport { vec2b, vec3b, vec4b } from '../data/vector.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport {\n type AnyBooleanVecInstance,\n type AnyFloatVecInstance,\n type AnyNumericVecInstance,\n type AnyVec2Instance,\n type AnyVec3Instance,\n type AnyVecInstance,\n type AnyWgslData,\n isVecInstance,\n type v2b,\n type v3b,\n type v4b,\n} from '../data/wgslTypes.ts';\nimport { $internal } from '../shared/symbols.ts';\nimport { sub } from './operators.ts';\n\nfunction correspondingBooleanVectorSchema(dataType: AnyData) {\n if (dataType.type.includes('2')) {\n return vec2b;\n }\n if (dataType.type.includes('3')) {\n return vec3b;\n }\n return vec4b;\n}\n\n// comparison\n\n/**\n * Checks whether `lhs == rhs` on all components.\n * Equivalent to `all(eq(lhs, rhs))`.\n * @example\n * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false\n * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true\n */\nexport const allEq = dualImpl({\n name: 'allEq',\n signature: (...argTypes) => ({ argTypes, returnType: bool }),\n normalImpl: <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n cpuAll(cpuEq(lhs, rhs)),\n codegenImpl: (lhs, rhs) => stitch`all(${lhs} == ${rhs})`,\n});\n\nconst cpuEq = <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n VectorOps.eq[lhs.kind](lhs, rhs);\n\n/**\n * Checks **component-wise** whether `lhs == rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.\n * @example\n * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)\n * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)\n * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true\n * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true\n */\nexport const eq = dualImpl({\n name: 'eq',\n signature: (...argTypes) => ({\n argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: cpuEq,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} == ${rhs})`,\n});\n\n/**\n * Checks **component-wise** whether `lhs != rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `any`.\n * @example\n * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)\n * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)\n * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true\n */\nexport const ne = dualImpl({\n name: 'ne',\n signature: (...argTypes) => ({\n argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n cpuNot(cpuEq(lhs, rhs)),\n codegenImpl: (lhs, rhs) => stitch`(${lhs} != ${rhs})`,\n});\n\nconst cpuLt = <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n VectorOps.lt[lhs.kind](lhs, rhs);\n\n/**\n * Checks **component-wise** whether `lhs < rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)\n * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)\n * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true\n */\nexport const lt = dualImpl({\n name: 'lt',\n signature: (...argTypes) => ({\n argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: cpuLt,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} < ${rhs})`,\n});\n\n/**\n * Checks **component-wise** whether `lhs <= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)\n * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)\n * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true\n */\nexport const le = dualImpl({\n name: 'le',\n signature: (...argTypes) => ({\n argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n cpuOr(cpuLt(lhs, rhs), cpuEq(lhs, rhs)),\n codegenImpl: (lhs, rhs) => stitch`(${lhs} <= ${rhs})`,\n});\n\n/**\n * Checks **component-wise** whether `lhs > rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)\n * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)\n * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const gt = dualImpl({\n name: 'gt',\n signature: (...argTypes) => ({\n argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n cpuAnd(cpuNot(cpuLt(lhs, rhs)), cpuNot(cpuEq(lhs, rhs))),\n codegenImpl: (lhs, rhs) => stitch`(${lhs} > ${rhs})`,\n});\n\n/**\n * Checks **component-wise** whether `lhs >= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)\n * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)\n * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const ge = dualImpl({\n name: 'ge',\n signature: (...argTypes) => ({\n argTypes: argTypes,\n returnType: correspondingBooleanVectorSchema(argTypes[0]),\n }),\n normalImpl: <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n cpuNot(cpuLt(lhs, rhs)),\n codegenImpl: (lhs, rhs) => stitch`(${lhs} >= ${rhs})`,\n});\n\n// logical ops\n\nconst cpuNot = <T extends AnyBooleanVecInstance>(value: T): T =>\n VectorOps.neg[value.kind](value);\n\n/**\n * Returns **component-wise** `!value`.\n * @example\n * not(vec2b(false, true)) // returns vec2b(true, false)\n * not(vec3b(true, true, false)) // returns vec3b(false, false, true)\n */\nexport const not = dualImpl({\n name: 'not',\n signature: (...argTypes) => ({ argTypes, returnType: argTypes[0] }),\n normalImpl: cpuNot,\n codegenImpl: (arg) => stitch`!(${arg})`,\n});\n\nconst cpuOr = <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n VectorOps.or[lhs.kind](lhs, rhs);\n\n/**\n * Returns **component-wise** logical `or` result.\n * @example\n * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)\n * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)\n */\nexport const or = dualImpl({\n name: 'or',\n signature: (...argTypes) => ({ argTypes, returnType: argTypes[0] }),\n normalImpl: cpuOr,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} | ${rhs})`,\n});\n\nconst cpuAnd = <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n cpuNot(cpuOr(cpuNot(lhs), cpuNot(rhs)));\n\n/**\n * Returns **component-wise** logical `and` result.\n * @example\n * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)\n * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)\n */\nexport const and = dualImpl({\n name: 'and',\n signature: (...argTypes) => ({ argTypes, returnType: argTypes[0] }),\n normalImpl: cpuAnd,\n codegenImpl: (lhs, rhs) => stitch`(${lhs} & ${rhs})`,\n});\n\n// logical aggregation\n\nconst cpuAll = (value: AnyBooleanVecInstance) =>\n VectorOps.all[value.kind](value);\n\n/**\n * Returns `true` if each component of `value` is true.\n * @example\n * all(vec2b(false, true)) // returns false\n * all(vec3b(true, true, true)) // returns true\n */\nexport const all = dualImpl({\n name: 'all',\n signature: (...argTypes) => ({ argTypes, returnType: bool }),\n normalImpl: cpuAll,\n codegenImpl: (value) => stitch`all(${value})`,\n});\n\n/**\n * Returns `true` if any component of `value` is true.\n * @example\n * any(vec2b(false, true)) // returns true\n * any(vec3b(false, false, false)) // returns false\n */\nexport const any = dualImpl({\n name: 'any',\n signature: (...argTypes) => ({ argTypes, returnType: bool }),\n normalImpl: (value: AnyBooleanVecInstance) => !cpuAll(cpuNot(value)),\n codegenImpl: (arg) => stitch`any(${arg})`,\n});\n\n// other\n\n/**\n * Checks whether the given elements differ by at most the `precision` value.\n * Checks all elements of `lhs` and `rhs` if arguments are vectors.\n * @example\n * isCloseTo(0, 0.1) // returns false\n * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true\n *\n * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.\n */\nexport const isCloseTo = dualImpl({\n name: 'isCloseTo',\n signature: (...args) => ({\n argTypes: args as AnyWgslData[],\n returnType: bool,\n }),\n // CPU implementation\n normalImpl: <T extends AnyFloatVecInstance | number>(\n lhs: T,\n rhs: T,\n precision = 0.01,\n ): boolean => {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return Math.abs(lhs - rhs) < precision;\n }\n if (isVecInstance(lhs) && isVecInstance(rhs)) {\n return VectorOps.isCloseToZero[lhs.kind](\n sub[$internal].jsImpl(lhs, rhs),\n precision,\n );\n }\n return false;\n },\n // GPU implementation\n codegenImpl: (lhs, rhs, precision = snip(0.01, f32)) => {\n if (isSnippetNumeric(lhs) && isSnippetNumeric(rhs)) {\n return stitch`(abs(f32(${lhs}) - f32(${rhs})) <= ${precision})`;\n }\n if (!isSnippetNumeric(lhs) && !isSnippetNumeric(rhs)) {\n // https://www.w3.org/TR/WGSL/#vector-multi-component:~:text=Binary%20arithmetic%20expressions%20with%20mixed%20scalar%20and%20vector%20operands\n // (a-a)+prec creates a vector of a.length elements, all equal to prec\n return stitch`all(abs(${lhs} - ${rhs}) <= (${lhs} - ${lhs}) + ${precision})`;\n }\n return 'false';\n },\n});\n\nfunction cpuSelect(f: boolean, t: boolean, cond: boolean): boolean;\nfunction cpuSelect(f: number, t: number, cond: boolean): number;\nfunction cpuSelect<T extends AnyVecInstance>(\n f: T,\n t: T,\n cond:\n | boolean\n | (T extends AnyVec2Instance ? v2b\n : T extends AnyVec3Instance ? v3b\n : v4b),\n): T;\nfunction cpuSelect<T extends number | boolean | AnyVecInstance>(\n f: T,\n t: T,\n cond: AnyBooleanVecInstance | boolean,\n) {\n if (typeof cond === 'boolean') {\n return cond ? t : f;\n }\n return VectorOps.select[(f as AnyVecInstance).kind](\n f as AnyVecInstance,\n t as AnyVecInstance,\n cond,\n );\n}\n\n/**\n * Returns `t` if `cond` is `true`, and `f` otherwise.\n * Component-wise if `cond` is a vector.\n * @example\n * select(1, 2, false) // returns 1\n * select(1, 2, true) // returns 2\n * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)\n * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)\n */\nexport const select = dualImpl({\n name: 'select',\n signature: (...argTypes) => ({ argTypes, returnType: argTypes[0] }),\n normalImpl: cpuSelect,\n codegenImpl: (f, t, cond) => stitch`select(${f}, ${t}, ${cond})`,\n});\n","import { f32, i32, u32 } from '../../data/numeric.ts';\nimport { vec4f, vec4i, vec4u } from '../../data/vector.ts';\nimport type { F32, I32, U32 } from '../../data/wgslTypes.ts';\n\nexport type ViewDimensionToDimension = {\n '1d': '1d';\n '2d': '2d';\n '2d-array': '2d';\n '3d': '3d';\n cube: '2d';\n 'cube-array': '2d';\n};\n\n/**\n * https://www.w3.org/TR/WGSL/#storage-texel-formats\n */\nexport type StorageTextureFormats =\n | 'rgba8unorm'\n | 'rgba8snorm'\n | 'rgba8uint'\n | 'rgba8sint'\n | 'rgba16unorm'\n | 'rgba16snorm'\n | 'rgba16uint'\n | 'rgba16sint'\n | 'rgba16float'\n | 'rg8unorm'\n | 'rg8snorm'\n | 'rg8uint'\n | 'rg8sint'\n | 'rg16unorm'\n | 'rg16snorm'\n | 'rg16uint'\n | 'rg16sint'\n | 'rg16float'\n | 'r32uint'\n | 'r32sint'\n | 'r32float'\n | 'rg32uint'\n | 'rg32sint'\n | 'rg32float'\n | 'rgba32uint'\n | 'rgba32sint'\n | 'rgba32float'\n | 'bgra8unorm'\n | 'r8unorm'\n | 'r8snorm'\n | 'r8uint'\n | 'r8sint'\n | 'r16unorm'\n | 'r16snorm'\n | 'r16uint'\n | 'r16sint'\n | 'r16float'\n | 'rgb10a2unorm'\n | 'rgb10a2uint'\n | 'rg11b10ufloat';\n\n// TODO: use this for texture view validation\n// deno-fmt-ignore - this is not really meant to be read\nexport const textureFormats = {\n // 8-bit formats\n 'r8unorm': { channelType: f32, vectorType: vec4f, texelSize: 1, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r8snorm': { channelType: f32, vectorType: vec4f, texelSize: 1, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'r8uint': { channelType: u32, vectorType: vec4u, texelSize: 1, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r8sint': { channelType: i32, vectorType: vec4i, texelSize: 1, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n 'rg8unorm': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only'] },\n 'rg8snorm': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg8uint': { channelType: u32, vectorType: vec4u, texelSize: 2, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg8sint': { channelType: i32, vectorType: vec4i, texelSize: 2, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n\n 'rgba8unorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba8unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: null },\n 'rgba8snorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rgba8uint': { channelType: u32, vectorType: vec4u, texelSize: 4, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba8sint': { channelType: i32, vectorType: vec4i, texelSize: 4, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n 'bgra8unorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only'] },\n 'bgra8unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: null },\n\n // 16-bit formats\n 'r16unorm': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'r16snorm': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'r16uint': { channelType: u32, vectorType: vec4u, texelSize: 2, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r16sint': { channelType: i32, vectorType: vec4i, texelSize: 2, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r16float': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n 'rg16unorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg16snorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg16uint': { channelType: u32, vectorType: vec4u, texelSize: 4, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg16sint': { channelType: i32, vectorType: vec4i, texelSize: 4, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg16float': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only'] },\n\n 'rgba16unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rgba16snorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rgba16uint': { channelType: u32, vectorType: vec4u, texelSize: 8, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba16sint': { channelType: i32, vectorType: vec4i, texelSize: 8, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba16float': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n // 32-bit formats\n 'r32uint': { channelType: u32, vectorType: vec4u, texelSize: 4, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r32sint': { channelType: i32, vectorType: vec4i, texelSize: 4, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'r32float': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n 'rg32uint': { channelType: u32, vectorType: vec4u, texelSize: 8, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg32sint': { channelType: i32, vectorType: vec4i, texelSize: 8, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rg32float': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n 'rgba32uint': { channelType: u32, vectorType: vec4u, texelSize: 16, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba32sint': { channelType: i32, vectorType: vec4i, texelSize: 16, sampleTypes: ['sint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n 'rgba32float': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: false, canResolve: false, storageBindings: ['write-only', 'read-only', 'read-write'] },\n\n // Mixed component formats\n 'rgb10a2uint': { channelType: u32, vectorType: vec4u, texelSize: 4, sampleTypes: ['uint'], aspects: ['color'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: ['write-only', 'read-only'] },\n 'rgb10a2unorm': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only'] },\n 'rg11b10ufloat': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: true, canBlend: true, canMultisample: true, canResolve: true, storageBindings: ['write-only', 'read-only'] },\n\n // Special formats\n 'rgb9e5ufloat': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n\n // Depth/Stencil formats\n 'stencil8': { channelType: u32, vectorType: vec4u, texelSize: 1, sampleTypes: ['uint'], aspects: ['stencil'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n 'depth16unorm': { channelType: f32, vectorType: vec4f, texelSize: 2, sampleTypes: ['depth', 'unfilterable-float'], aspects: ['depth'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n 'depth24plus': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['depth', 'unfilterable-float'], aspects: ['depth'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n 'depth24plus-stencil8': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['depth', 'unfilterable-float'], aspects: ['depth', 'stencil'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n 'depth32float': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['depth', 'unfilterable-float'], aspects: ['depth'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n 'depth32float-stencil8': { channelType: f32, vectorType: vec4f, texelSize: 4, sampleTypes: ['depth', 'unfilterable-float'], aspects: ['depth', 'stencil'], canRenderAttachment: true, canBlend: false, canMultisample: true, canResolve: false, storageBindings: null },\n\n // BC compressed formats\n 'bc1-rgba-unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc1-rgba-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc2-rgba-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc2-rgba-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc3-rgba-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc3-rgba-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc4-r-unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc4-r-snorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc5-rg-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc5-rg-snorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc6h-rgb-ufloat': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc6h-rgb-float': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc7-rgba-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'bc7-rgba-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n\n // ETC2/EAC compressed formats\n 'etc2-rgb8unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'etc2-rgb8unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'etc2-rgb8a1unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'etc2-rgb8a1unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'etc2-rgba8unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'etc2-rgba8unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'eac-r11unorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'eac-r11snorm': { channelType: f32, vectorType: vec4f, texelSize: 8, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'eac-rg11unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'eac-rg11snorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n\n // ASTC compressed formats\n 'astc-4x4-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-4x4-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-5x4-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-5x4-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-5x5-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-5x5-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-6x5-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-6x5-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-6x6-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-6x6-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x5-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x5-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x6-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x6-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x8-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-8x8-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x5-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x5-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x6-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x6-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x8-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x8-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x10-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-10x10-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-12x10-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-12x10-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-12x12-unorm': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n 'astc-12x12-unorm-srgb': { channelType: f32, vectorType: vec4f, texelSize: 16, sampleTypes: ['float', 'unfilterable-float'], aspects: ['color'], canRenderAttachment: false, canBlend: false, canMultisample: false, canResolve: false, storageBindings: null },\n} as const satisfies Record<GPUTextureFormat, TextureFormatInfo>;\n\nexport type TextureFormatInfo = {\n readonly channelType: F32 | I32 | U32;\n readonly vectorType: typeof vec4f | typeof vec4i | typeof vec4u;\n readonly texelSize: number;\n readonly sampleTypes: readonly string[];\n readonly aspects: readonly string[];\n readonly canRenderAttachment: boolean;\n readonly canBlend: boolean;\n readonly canMultisample: boolean;\n readonly canResolve: boolean;\n readonly storageBindings: readonly string[] | null;\n};\n\nexport type TextureFormats = typeof textureFormats;\n\nexport function getDeviceTextureFormatInfo<T extends GPUTextureFormat>(\n format: T,\n device: GPUDevice,\n): typeof textureFormats[T] {\n const baseInfo = textureFormats[format];\n\n if (!baseInfo) {\n throw new Error(`Unknown texture format: ${format}`);\n }\n\n let filteredInfo = { ...baseInfo } as TextureFormatInfo;\n switch (format) {\n case 'r32float':\n case 'rg32float':\n case 'rgba32float':\n if (!device.features.has('float32-filterable')) {\n filteredInfo = {\n ...filteredInfo,\n sampleTypes: baseInfo.sampleTypes.filter((type) => type !== 'float'),\n } as TextureFormatInfo;\n }\n if (!device.features.has('float32-blendable')) {\n filteredInfo = {\n ...filteredInfo,\n canBlend: false,\n };\n }\n break;\n\n case 'bgra8unorm':\n if (!device.features.has('bgra8unorm-storage')) {\n filteredInfo = {\n ...filteredInfo,\n storageBindings: null,\n };\n }\n break;\n\n case 'rg11b10ufloat':\n if (!device.features.has('rg11b10ufloat-renderable')) {\n filteredInfo = {\n ...filteredInfo,\n canRenderAttachment: false,\n canBlend: false,\n canMultisample: false,\n canResolve: false,\n };\n }\n break;\n }\n\n if (filteredInfo.storageBindings) {\n const hasTexture1 = device.features.has('texture-formats-tier1');\n const hasTexture2 = device.features.has('texture-formats-tier2');\n\n let availableBindings = [...filteredInfo.storageBindings];\n\n // deno-fmt-ignore\n const tier2RequiredFormats = [\n 'r8unorm', 'r8uint', 'r8sint',\n 'r16uint', 'r16sint', 'r16float',\n 'rgba8unorm', 'rgba8uint', 'rgba8sint',\n 'rgba16uint', 'rgba16sint', 'rgba16float',\n 'r32uint', 'r32sint', 'r32float',\n 'rgba32uint', 'rgba32sint', 'rgba32float',\n ];\n\n // deno-fmt-ignore\n const tier1RequiredFormats = [\n 'r8snorm',\n 'rg8unorm', 'rg8snorm', 'rg8uint', 'rg8sint',\n 'rgba8snorm',\n 'r16unorm', 'r16snorm',\n 'rg16unorm', 'rg16snorm', 'rg16uint', 'rg16sint', 'rg16float',\n 'rgba16unorm', 'rgba16snorm',\n 'rgb10a2uint', 'rgb10a2unorm', 'rg11b10ufloat',\n ];\n\n if (tier2RequiredFormats.includes(format) && !hasTexture2) {\n availableBindings = availableBindings.filter((binding) =>\n binding !== 'read-write'\n );\n }\n\n if (tier1RequiredFormats.includes(format) && !hasTexture1) {\n availableBindings = availableBindings.filter(\n (binding) => binding !== 'write-only' && binding !== 'read-only',\n );\n }\n\n filteredInfo = {\n ...filteredInfo,\n storageBindings: availableBindings.length > 0 ? availableBindings : null,\n };\n }\n\n return filteredInfo as typeof textureFormats[T];\n}\n","export const wgslExtensions = [\n 'f16',\n 'clip_distances',\n 'dual_source_blending',\n 'subgroups',\n 'primitive_index',\n] as const;\nexport type WgslExtension = (typeof wgslExtensions)[number];\n\nexport const wgslExtensionToFeatureName: Record<WgslExtension, GPUFeatureName> =\n {\n f16: 'shader-f16',\n clip_distances: 'clip-distances',\n dual_source_blending: 'dual-source-blending',\n subgroups: 'subgroups',\n primitive_index: 'primitive-index' as GPUFeatureName,\n };\n"],"mappings":"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","names":["bitcastU32toF32","dualImpl","value","bitcastU32toF32Impl","VectorOps","n","stitch","arg","uargs","unify","u32","isVec","vec2f","vec3f","vec4f","f32","bitcastU32toI32","bitcastU32toI32Impl","vec2i","vec3i","vec4i","i32","TB","unpack2x16float","createDualImpl","buffer","reader","vec2f","snip","stitch","pack2x16float","writer","u32","unpack4x8unorm","vec4f","pack4x8unorm","correspondingBooleanVectorSchema","dataType","vec2b","vec3b","vec4b","allEq","dualImpl","argTypes","bool","lhs","rhs","cpuAll","cpuEq","stitch","VectorOps","eq","ne","cpuNot","cpuLt","lt","le","cpuOr","gt","cpuAnd","ge","value","not","arg","or","and","all","any","isCloseTo","args","precision","isVecInstance","sub","$internal","snip","f32","isSnippetNumeric","cpuSelect","f","cond","select","textureFormats","f32","vec4f","u32","vec4u","i32","vec4i","getDeviceTextureFormatInfo","format","device","baseInfo","filteredInfo","type","hasTexture1","hasTexture2","availableBindings","tier2RequiredFormats","tier1RequiredFormats","binding","wgslExtensions","wgslExtensionToFeatureName"]}