typegpu 0.0.0-alpha.3 → 0.0.0-alpha.4

Sign up to get free protection for your applications and to get access to all the features.
package/data/index.js CHANGED
@@ -1,10 +1,2 @@
1
- import{c as m}from"../chunk-K6N2A55L.js";import{d as s,i as l,j as u}from"../chunk-NTGWE7PR.js";import{MaxValue as w,Measurer as S,Schema as I}from"typed-binary";function x(n,o){let e="size"in n?n.size:n.currentByteOffset,r=o-1,i=e&r;"skipBytes"in n?n.skipBytes(o-i&r):n.add(o-i&r)}var p=x;var a=class extends I{constructor({schema:e,byteAlignment:r,code:i}){super();s(this,"size");s(this,"byteAlignment");s(this,"_innerSchema");s(this,"_expressionCode");this._innerSchema=e,this.byteAlignment=r,this._expressionCode=i,this.size=this.measure(w).size}resolveReferences(){throw new m}write(e,r){p(e,this.byteAlignment),this._innerSchema.write(e,r)}read(e){return p(e,this.byteAlignment),this._innerSchema.read(e)}measure(e,r=new S){return p(r,this.byteAlignment),this._innerSchema.measure(e,r),r}resolve(e){return e.resolve(this._expressionCode)}};import*as t from"typed-binary";var F=new a({schema:t.bool,byteAlignment:4,code:"bool"}),y=new a({schema:t.u32,byteAlignment:4,code:"u32"}),q=new a({schema:t.i32,byteAlignment:4,code:"i32"}),G=new a({schema:t.f32,byteAlignment:4,code:"f32"}),H=new a({schema:t.tupleOf([t.u32,t.u32]),byteAlignment:8,code:"vec2u"}),J=new a({schema:t.tupleOf([t.i32,t.i32]),byteAlignment:8,code:"vec2i"}),K=new a({schema:t.tupleOf([t.f32,t.f32]),byteAlignment:8,code:"vec2f"}),L=new a({schema:t.tupleOf([t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec3u"}),N=new a({schema:t.tupleOf([t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec3i"}),Q=new a({schema:t.tupleOf([t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec3f"}),X=new a({schema:t.tupleOf([t.u32,t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec4u"}),Y=new a({schema:t.tupleOf([t.i32,t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec4i"}),Z=new a({schema:t.tupleOf([t.f32,t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec4f"}),ee=new a({schema:t.arrayOf(t.f32,16),byteAlignment:16,code:"mat4x4f"});import{MaxValue as b,Measurer as B,Schema as D,ValidationError as v}from"typed-binary";var d=class extends D{constructor(e,r){super();this._elementType=e;this.capacity=r;s(this,"_label");s(this,"byteAlignment");s(this,"size");this.byteAlignment=Math.max(4,this._elementType.byteAlignment),this.size=this.measure(b).size}$name(e){return this._label=e,this}resolveReferences(){throw new m}write(e,r){if(r.length>this.capacity)throw new v(`Tried to write too many values, ${r.length} > ${this.capacity}`);p(e,this.byteAlignment),y.write(e,r.length),p(e,this._elementType.byteAlignment);let i=e.currentByteOffset;for(let c of r)this._elementType.write(e,c);e.seekTo(i+this.capacity*this._elementType.size)}read(e){let r=[];p(e,this.byteAlignment);let i=y.read(e);p(e,this._elementType.byteAlignment);let c=e.currentByteOffset;for(let f=0;f<i;++f)r.push(this._elementType.read(e));return e.seekTo(c+this.capacity*this._elementType.size),r}measure(e,r=new B){return p(r,this.byteAlignment),y.measure(b,r),p(r,this._elementType.byteAlignment),r.add(this._elementType.size*this.capacity),r}resolve(e){let r=new u().$name(this._label);return e.addDeclaration(l`
2
- struct ${r} {
3
- count: u32,
4
- values: array<${this._elementType}, ${this.capacity}>,
5
- }`),e.resolve(r)}},pe=(n,o)=>new d(n,o);import{MaxValue as A,Measurer as W,Schema as U,object as P}from"typed-binary";var he=n=>new h(n),h=class extends U{constructor(e){super();this._properties=e;s(this,"_label");s(this,"_innerSchema");s(this,"byteAlignment");s(this,"size");this._innerSchema=P(e),this.byteAlignment=Object.values(e).map(r=>r.byteAlignment).reduce((r,i)=>r>i?r:i),this.size=this.measure(A).size}$name(e){return this._label=e,this}resolveReferences(){throw new m}write(e,r){this._innerSchema.write(e,r)}read(e){return this._innerSchema.read(e)}measure(e,r=new W){return this._innerSchema.measure(e,r),r}resolve(e){let r=new u().$name(this._label);return e.addDeclaration(l`
6
- struct ${r} {
7
- ${Object.entries(this._properties).map(([i,c])=>l`${i}: ${c},\n`)}
8
- }
9
- `),e.resolve(r)}};import*as g from"typed-binary";var xe=(n,o)=>new a({schema:g.arrayOf(n,o),byteAlignment:n.byteAlignment,code:l`array<${n}, ${o}>`});function O(n){return{scope:"function",pointsTo:n}}import{Measurer as _,Schema as M}from"typed-binary";function R(n){return new T(n)}var T=class extends M{constructor(e){super();this.innerData=e;s(this,"size");s(this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new m}write(e,r){this.innerData.write(e,r)}read(e){return this.innerData.read(e)}measure(e,r=new _){return this.innerData.measure(e,r)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};export{a as SimpleWgslData,xe as arrayOf,R as atomic,F as bool,pe as dynamicArrayOf,G as f32,q as i32,ee as mat4f,O as ptr,he as struct,y as u32,K as vec2f,J as vec2i,H as vec2u,Q as vec3f,N as vec3i,L as vec3u,Z as vec4f,Y as vec4i,X as vec4u};
1
+ import{A as k,B as l,C as m,D as n,E as o,G as p,H as q,I as r,J as s,K as t,q as a,r as b,s as c,t as d,u as e,v as f,w as g,x as h,y as i,z as j}from"../chunk-K2GYQABQ.js";export{a as SimpleWgslData,r as arrayOf,t as atomic,b as bool,p as dynamicArrayOf,e as f32,d as i32,o as mat4f,s as ptr,q as struct,c as u32,h as vec2f,g as vec2i,f as vec2u,k as vec3f,j as vec3i,i as vec3u,n as vec4f,m as vec4i,l as vec4u};
10
2
  //# sourceMappingURL=index.js.map
package/data/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/data/std140.ts","../../src/data/alignIO.ts","../../src/data/numeric.ts","../../src/data/dynamicArray.ts","../../src/data/struct.ts","../../src/data/array.ts","../../src/data/pointer.ts","../../src/data/atomic.ts"],"sourcesContent":["/*\n * Typed-binary types that adhere to the `std140` layout rules.\n */\n\nimport {\n type AnySchema,\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, Wgsl, WgslData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleWgslData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements WgslData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n private readonly _innerSchema: TSchema;\n private readonly _expressionCode: Wgsl;\n\n /**\n * byteAlignment has to be a power of 2\n */\n constructor({\n schema,\n byteAlignment,\n code,\n }: {\n schema: TSchema;\n byteAlignment: number;\n code: Wgsl;\n }) {\n super();\n\n this._innerSchema = schema;\n this.byteAlignment = byteAlignment;\n this._expressionCode = code;\n this.size = this.measure(MaxValue).size;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n\n this._innerSchema.measure(value, measurer);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._expressionCode);\n }\n}\n","import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';\n\n/**\n * @param io the IO to align\n * @param baseAlignment must be power of 2\n */\nfunction alignIO(\n io: ISerialInput | ISerialOutput | IMeasurer,\n baseAlignment: number,\n) {\n const currentPos = 'size' in io ? io.size : io.currentByteOffset;\n\n const bitMask = baseAlignment - 1;\n const offset = currentPos & bitMask;\n\n if ('skipBytes' in io) {\n io.skipBytes((baseAlignment - offset) & bitMask);\n } else {\n io.add((baseAlignment - offset) & bitMask);\n }\n}\n\nexport default alignIO;\n","import * as TB from 'typed-binary';\nimport type { WgslData } from '../types';\nimport { SimpleWgslData } from './std140';\n\nexport type Bool = WgslData<boolean>;\nexport const bool: Bool = new SimpleWgslData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = WgslData<number>;\nexport const u32: U32 = new SimpleWgslData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = WgslData<number>;\nexport const i32: I32 = new SimpleWgslData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = WgslData<number>;\nexport const f32: F32 = new SimpleWgslData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\n\nexport type Vec2u = WgslData<[number, number]>;\nexport const vec2u: Vec2u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32]),\n byteAlignment: 8,\n code: 'vec2u',\n});\n\nexport type Vec2i = WgslData<[number, number]>;\nexport const vec2i: Vec2i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32]),\n byteAlignment: 8,\n code: 'vec2i',\n});\nexport type Vec2f = WgslData<[number, number]>;\nexport const vec2f: Vec2f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32]),\n byteAlignment: 8,\n code: 'vec2f',\n});\nexport type Vec3u = WgslData<[number, number, number]>;\nexport const vec3u: Vec3u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec3u',\n});\nexport type Vec3i = WgslData<[number, number, number]>;\nexport const vec3i: Vec3i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec3i',\n});\nexport type Vec3f = WgslData<[number, number, number]>;\nexport const vec3f: Vec3f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec3f',\n});\nexport type Vec4u = WgslData<[number, number, number, number]>;\nexport const vec4u: Vec4u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec4u',\n});\nexport type Vec4i = WgslData<[number, number, number, number]>;\nexport const vec4i: Vec4i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec4i',\n});\nexport type Vec4f = WgslData<[number, number, number, number]>;\nexport const vec4f: Vec4f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec4f',\n});\n\n/**\n * Array of column vectors\n */\nexport type Mat4f = WgslData<number[]>;\nexport const mat4f: Mat4f = new SimpleWgslData({\n schema: TB.arrayOf(TB.f32, 16),\n byteAlignment: 16,\n code: 'mat4x4f',\n});\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n ValidationError,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\nimport alignIO from './alignIO';\nimport { u32 } from './numeric';\n\nclass DynamicArrayDataType<TElement extends WgslData<unknown>>\n extends Schema<Unwrap<TElement>[]>\n implements WgslData<Unwrap<TElement>[]>\n{\n private _label: string | undefined;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(\n private readonly _elementType: TElement,\n public readonly capacity: number,\n ) {\n super();\n\n this.byteAlignment = Math.max(\n 4 /* u32 base alignment */,\n this._elementType.byteAlignment,\n );\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, values: ParseUnwrapped<TElement>[]): void {\n if (values.length > this.capacity) {\n throw new ValidationError(\n `Tried to write too many values, ${values.length} > ${this.capacity}`,\n );\n }\n\n alignIO(output, this.byteAlignment); // aligning to the start\n u32.write(output, values.length);\n alignIO(output, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = output.currentByteOffset;\n for (const value of values) {\n this._elementType.write(output, value);\n }\n output.seekTo(startOffset + this.capacity * this._elementType.size);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TElement>[] {\n const array: ParseUnwrapped<TElement>[] = [];\n\n alignIO(input, this.byteAlignment); // aligning to the start\n const len = u32.read(input);\n alignIO(input, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = input.currentByteOffset;\n for (let i = 0; i < len; ++i) {\n array.push(this._elementType.read(input) as ParseUnwrapped<TElement>);\n }\n input.seekTo(startOffset + this.capacity * this._elementType.size);\n\n return array;\n }\n\n measure(\n _values: ParseUnwrapped<TElement>[] | typeof MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment); // aligning to the start\n\n // Length encoding\n u32.measure(MaxValue, measurer);\n\n // Aligning to the start of the array\n alignIO(measurer, this._elementType.byteAlignment);\n\n // Values encoding\n measurer.add(this._elementType.size * this.capacity);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n count: u32,\n values: array<${this._elementType}, ${this.capacity}>,\n }`);\n\n return ctx.resolve(identifier);\n }\n}\n\nexport const dynamicArrayOf = <TSchema extends AnyWgslData>(\n elementType: TSchema,\n capacity: number,\n) => new DynamicArrayDataType(elementType, capacity);\n\nexport default DynamicArrayDataType;\n","import {\n type IMeasurer,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type UnwrapRecord,\n object,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslStruct<TProps extends Record<string, AnyWgslData>>\n extends ISchema<UnwrapRecord<TProps>>,\n WgslData<UnwrapRecord<TProps>> {\n $name(label: string): this;\n}\n\nexport const struct = <TProps extends Record<string, AnyWgslData>>(\n properties: TProps,\n): WgslStruct<TProps> => new WgslStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslStructImpl<TProps extends Record<string, AnyWgslData>>\n extends Schema<UnwrapRecord<TProps>>\n implements WgslData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n private _innerSchema: ISchema<UnwrapRecord<TProps>>;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(private readonly _properties: TProps) {\n super();\n\n this._innerSchema = object(_properties);\n\n this.byteAlignment = Object.values(_properties)\n .map((prop) => prop.byteAlignment)\n .reduce((a, b) => (a > b ? a : b));\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n","import * as TB from 'typed-binary';\nimport type { AnyWgslData, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { SimpleWgslData } from './std140';\n\nexport type WgslArray<TElement extends AnyWgslData> = WgslData<\n TB.Unwrap<TElement>[]\n>;\n\nexport const arrayOf = <TElement extends AnyWgslData>(\n elementType: TElement,\n size: number,\n): WgslArray<TElement> =>\n new SimpleWgslData({\n schema: TB.arrayOf(elementType, size),\n byteAlignment: elementType.byteAlignment,\n code: code`array<${elementType}, ${size}>`,\n });\n","import type { AnyWgslData, WgslPointer } from '../types';\n\nexport function ptr<TDataType extends AnyWgslData>(\n pointsTo: TDataType,\n): WgslPointer<'function', TDataType> {\n return {\n scope: 'function',\n pointsTo,\n };\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, WgslData } from '../types';\nimport type { I32, U32 } from './numeric';\n\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<TSchema> {\n return new AtomicImpl(data);\n}\n\nexport interface Atomic<TSchema extends U32 | I32>\n extends WgslData<Unwrap<TSchema>> {}\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"],"mappings":"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","names":["MaxValue","Measurer","Schema","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","SimpleWgslData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","TB","bool","SimpleWgslData","u32","i32","f32","vec2u","vec2i","vec2f","vec3u","vec3i","vec3f","vec4u","vec4i","vec4f","mat4f","MaxValue","Measurer","Schema","ValidationError","DynamicArrayDataType","Schema","_elementType","capacity","__publicField","MaxValue","label","RecursiveDataTypeError","output","values","ValidationError","alignIO_default","u32","startOffset","value","input","array","len","i","_values","measurer","Measurer","ctx","identifier","WgslIdentifier","code","dynamicArrayOf","elementType","MaxValue","Measurer","Schema","object","struct","properties","WgslStructImpl","Schema","_properties","__publicField","object","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx","identifier","WgslIdentifier","code","key","field","TB","arrayOf","elementType","size","SimpleWgslData","code","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/index.cjs CHANGED
@@ -1,29 +1,49 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkG3WAZR24cjs = require('./chunk-G3WAZR24.cjs');var _chunkJYXJ5NFXcjs = require('./chunk-JYXJ5NFX.cjs');var E=class extends Function{constructor(){super("...args","return this._bound._call(...args)");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_bound");return this._bound=this.bind(this),this._bound}},ge=E;var x=class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"lastUniqueId",0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"names",new WeakMap)}nameFor(e){let t=this.names.get(e);if(t===void 0){let r;e.label?(r=e.label.replaceAll(/\s/g,"_"),r=r.replaceAll(/[^\w\d]/g,"")):r="item",t=`${r}_${this.lastUniqueId++}`,this.names.set(e,t)}return t}},V= exports.StrictNameRegistry =class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_usedNames",new Set);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_assignedNames",new WeakMap)}nameFor(e){let t=this._assignedNames.get(e);if(t!==void 0)return t;if(e.label===void 0)throw new Error("Unnamed item found when using a strict NameRegistry");let r=0,s=e.label;for(;this._usedNames.has(s);)r++,s=`${e.label}_${r}`;return this._usedNames.add(s),this._assignedNames.set(e,s),s}};var Pe={uniform:"uniform",mutable_storage:"storage, read_write",readonly_storage:"storage, read"},C=class{constructor(e,t){this.names=e;this._bindingGroup=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_memoizedResolves",new WeakMap);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_nextFreeBindingIdx",0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_usedBindables",new Set);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_declarations",[])}get usedBindables(){return this._usedBindables}get declarations(){return this._declarations}getOrInstantiate(e,t){var i;let r=(i=this._memoizedResolves.get(e))!=null?i:[];for(let u of r)if([...u.slotToValueMap.entries()].every(([g,c])=>t.readSlot(g)===c))return u.result;let s;try{s=e.resolve(t)}catch(u){throw u instanceof _chunkG3WAZR24cjs.a?u.appendToTrace(e):new (0, _chunkG3WAZR24cjs.a)(u,[e])}let l=new Map;for(let u of t.usedSlots)l.set(u,t.readSlot(u));return r.push({slotToValueMap:l,result:s}),this._memoizedResolves.set(e,r),s}reserveBindingEntry(e){return this._usedBindables.add(e),{group:this._bindingGroup,idx:this._nextFreeBindingIdx++}}addDeclaration(e){this._declarations.push(e)}},P=class{constructor({names:e,bindingGroup:t}){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_shared");_chunkJYXJ5NFXcjs.d.call(void 0, this,"usedSlots",new Set);this._shared=new C(e,t!=null?t:0)}get usedBindables(){return this._shared.usedBindables}addDeclaration(e){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}addBinding(e,t){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){if(e.defaultValue===void 0)throw new (0, _chunkG3WAZR24cjs.b)(e);return e.defaultValue}unwrap(e){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}resolve(e,t=[]){if(!_chunkJYXJ5NFXcjs.e.call(void 0, e))return String(e);let r=new F(this,this._shared,t),s=this._shared.getOrInstantiate(e,r);return`${[...this._shared.declarations].join(`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk7HTWRNOHcjs = require('./chunk-7HTWRNOH.cjs');var Q=class extends Function{constructor(){super("...args","return this._bound._call(...args)");_chunk7HTWRNOHcjs.d.call(void 0, this,"_bound");return this._bound=this.bind(this),this._bound}},Ve=Q;var rt={f32:"float32",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",u32:"uint32",vec2u:"uint32x2",vec3u:"uint32x3",vec4u:"uint32x4",i32:"sint32",vec2i:"sint32x2",vec3i:"sint32x3",vec4i:"sint32x4"};function Ge(n){if(!("expressionCode"in n))throw new Error("Type schema must contain a 'code' field");let e=n.getUnderlyingTypeString(),t=rt[e];if(!t)throw new Error(`Unknown vertex format for type code: ${e}`);return t}var b=class{constructor(){_chunk7HTWRNOHcjs.d.call(void 0, this,"lastUniqueId",0);_chunk7HTWRNOHcjs.d.call(void 0, this,"names",new WeakMap)}nameFor(e){let t=this.names.get(e);if(t===void 0){let r;e.label?(r=e.label.replaceAll(/\s/g,"_"),r=r.replaceAll(/[^\w\d]/g,"")):r="item",t=`${r}_${this.lastUniqueId++}`,this.names.set(e,t)}return t}},X= exports.StrictNameRegistry =class{constructor(){_chunk7HTWRNOHcjs.d.call(void 0, this,"_usedNames",new Set);_chunk7HTWRNOHcjs.d.call(void 0, this,"_assignedNames",new WeakMap)}nameFor(e){let t=this._assignedNames.get(e);if(t!==void 0)return t;if(e.label===void 0)throw new Error("Unnamed item found when using a strict NameRegistry");let r=0,s=e.label;for(;this._usedNames.has(s);)r++,s=`${e.label}_${r}`;return this._usedNames.add(s),this._assignedNames.set(e,s),s}};function Ee(n){return new H(n)}var H=class{constructor(e){this.descriptor=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label");_chunk7HTWRNOHcjs.d.call(void 0, this,"_type");e.compare===void 0?this._type="sampler":this._type="sampler_comparison"}get label(){return this._label}get type(){return this._type}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label);return e.addRenderResource(this,t),e.resolve(t)}};function F(n){return n.type==="sampler"||n.type==="sampler_comparison"}function Oe(n){return new J(n)}function Me(n){return new Z(n)}var J=class{constructor(e){this.descriptor=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_flags",GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT);_chunk7HTWRNOHcjs.d.call(void 0, this,"_allowedUsages",{sampled:null,storage:null});_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}get flags(){return this._flags}$name(e){return this._label=e,this}$addFlags(e){return this._flags|=e,this}$allowSampled(){let e=this;return this._allowedUsages.sampled||(this._allowedUsages.sampled=new Map),this.$addFlags(GPUTextureUsage.TEXTURE_BINDING),e}$allowStorage(){let e=this;return this._allowedUsages.storage||(this._allowedUsages.storage=new Map),this.$addFlags(GPUTextureUsage.STORAGE_BINDING),e}getStorageIfAllowed(e){if(!this._allowedUsages.storage)return null;let t=Ce(e),r=this._allowedUsages.storage.get(t);if(r)return r;let s=Fe[this.descriptor.format];if(!s)throw new Error(`Unsupported texture format ${this.descriptor.format}`);let l=new C(e.type,this,s,e.descriptor,e.access);return this._allowedUsages.storage.set(t,l),l}getSampledIfAllowed(e){if(!this._allowedUsages.sampled)return null;let t=Ce(e),r=this._allowedUsages.sampled.get(t);if(r)return r;let s=new C(e.type,this,e.dataType,e.descriptor);return this._allowedUsages.sampled.set(t,s),s}asStorage(e){let t=this.getStorageIfAllowed(e);if(!Fe[this.descriptor.format])throw new Error(`Unsupported texture format ${this.descriptor.format}`);return t}asSampled(e){return this.getSampledIfAllowed(e)}},C=class{constructor(e,t,r,s={},l=void 0){this.type=e;this.texture=t;this.dataType=r;this.descriptor=s;this.access=l;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label);return e.addRenderResource(this,t),e.resolve(t)}},Z=class{constructor(e){this.descriptor=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label");_chunk7HTWRNOHcjs.d.call(void 0, this,"type","texture_external")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label);return e.addRenderResource(this,t),e.resolve(t)}};function ke(n){return!("texture"in n)&&!F(n)}function O(n){return"texture"in n}var Fe={rgba8unorm:_chunk7HTWRNOHcjs.D,rgba8snorm:_chunk7HTWRNOHcjs.D,rgba8uint:_chunk7HTWRNOHcjs.B,rgba8sint:_chunk7HTWRNOHcjs.C,rgba16uint:_chunk7HTWRNOHcjs.B,rgba16sint:_chunk7HTWRNOHcjs.C,rgba16float:_chunk7HTWRNOHcjs.D,r32uint:_chunk7HTWRNOHcjs.B,r32sint:_chunk7HTWRNOHcjs.C,r32float:_chunk7HTWRNOHcjs.D,rg32uint:_chunk7HTWRNOHcjs.B,rg32sint:_chunk7HTWRNOHcjs.C,rg32float:_chunk7HTWRNOHcjs.D,rgba32uint:_chunk7HTWRNOHcjs.B,rgba32sint:_chunk7HTWRNOHcjs.C,rgba32float:_chunk7HTWRNOHcjs.D,bgra8unorm:_chunk7HTWRNOHcjs.D};function Ce(n){let e=Object.fromEntries(Object.entries(n).sort(([t],[r])=>t.localeCompare(r)));return JSON.stringify(e)}var st={uniform:"uniform",mutable:"storage, read_write",readonly:"storage, read"},ee=class{constructor(e,t){this.names=e;this._bindingGroup=t;_chunk7HTWRNOHcjs.d.call(void 0, this,"_memoizedResolves",new WeakMap);_chunk7HTWRNOHcjs.d.call(void 0, this,"_nextFreeBindingIdx",0);_chunk7HTWRNOHcjs.d.call(void 0, this,"_usedBindables",new Set);_chunk7HTWRNOHcjs.d.call(void 0, this,"_usedRenderResources",new Set);_chunk7HTWRNOHcjs.d.call(void 0, this,"_resourceToIndexMap",new WeakMap);_chunk7HTWRNOHcjs.d.call(void 0, this,"_usedBuiltins",new Set);_chunk7HTWRNOHcjs.d.call(void 0, this,"_declarations",[])}get usedBindables(){return this._usedBindables}get usedRenderResources(){return this._usedRenderResources}get declarations(){return this._declarations}get usedBuiltins(){return this._usedBuiltins}getOrInstantiate(e,t){var g;let r=(g=this._memoizedResolves.get(e))!=null?g:[];for(let i of r)if([...i.slotToValueMap.entries()].every(([p,c])=>t.readSlot(p)===c))return i.result;let s;try{s=e.resolve(t)}catch(i){throw i instanceof _chunk7HTWRNOHcjs.e?i.appendToTrace(e):new (0, _chunk7HTWRNOHcjs.e)(i,[e])}let l=new Map;for(let i of t.usedSlots)l.set(i,t.readSlot(i));return r.push({slotToValueMap:l,result:s}),this._memoizedResolves.set(e,r),s}reserveBindingEntry(e){this._usedBindables.add(e);let t=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,t),{group:this._bindingGroup,idx:t}}registerBindingNoEntry(e){this._usedBindables.add(e)}reserveRenderResourceEntry(e){this._usedRenderResources.add(e);let t=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,t),{group:this._bindingGroup,idx:t}}getBindingIndex(e){return this._resourceToIndexMap.get(e)}addDeclaration(e){this._declarations.push(e)}addBuiltin(e){this._usedBuiltins.add(e)}},P=class{constructor({names:e,bindingGroup:t}){_chunk7HTWRNOHcjs.d.call(void 0, this,"_shared");_chunk7HTWRNOHcjs.d.call(void 0, this,"usedSlots",new Set);this._shared=new ee(e,t!=null?t:0)}get usedBindables(){return this._shared.usedBindables}get usedRenderResources(){return this._shared.usedRenderResources}get usedBuiltins(){return this._shared.usedBuiltins}addDeclaration(e){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}addBinding(e,t){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}addRenderResource(e,t){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}addBuiltin(e){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){if(e.defaultValue===void 0)throw new (0, _chunk7HTWRNOHcjs.f)(e);return e.defaultValue}unwrap(e){throw new Error("Call ctx.resolve(item) instead of item.resolve(ctx)")}resolve(e,t=[]){if(!_chunk7HTWRNOHcjs.h.call(void 0, e))return String(e);let r=new te(this,this._shared,t),s=this._shared.getOrInstantiate(e,r);return`${[...this._shared.declarations].join(`
2
2
 
3
- `)}${s}`}},F=class n{constructor(e,t,r){this._parent=e;this._shared=t;this._slotValuePairs=r;_chunkJYXJ5NFXcjs.d.call(void 0, this,"usedSlots",new Set)}addDeclaration(e){this._shared.addDeclaration(this.resolve(e))}addBinding(e,t){let{group:r,idx:s}=this._shared.reserveBindingEntry(e);this.addDeclaration(_chunkJYXJ5NFXcjs.i`@group(${r}) @binding(${s}) var<${Pe[e.usage]}> ${t}: ${e.allocatable.dataType};`)}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){let t=this._slotValuePairs.find(([r])=>r===e);return t?(this.usedSlots.add(e),t[1]):(this.usedSlots.add(e),this._parent.readSlot(e))}unwrap(e){let t=e;for(;_chunkJYXJ5NFXcjs.g.call(void 0, t);)t=this.readSlot(t);return t}resolve(e,t=[]){if(!_chunkJYXJ5NFXcjs.e.call(void 0, e))return String(e);let r=new n(this,this._shared,t);return this._shared.getOrInstantiate(e,r)}};var we={uniform:"uniform",mutable_storage:"storage",readonly_storage:"read-only-storage"},b= exports.ProgramBuilder =class{constructor(e,t){this.runtime=e;this.root=t}build(e){var u;let t=new P({names:(u=e.nameRegistry)!=null?u:new x,bindingGroup:e.bindingGroup}),r=t.resolve(this.root),s=Array.from(t.usedBindables),l=this.runtime.device.createBindGroupLayout({entries:s.map((d,g)=>({binding:g,visibility:e.shaderStage,buffer:{type:we[d.usage]}}))}),i=this.runtime.device.createBindGroup({layout:l,entries:s.map((d,g)=>({binding:g,resource:{buffer:this.runtime.bufferFor(d.allocatable)}}))});return{bindGroupLayout:l,bindGroup:i,code:r}}};function w(n,e){return new G(n,e)}var G=class{constructor(e,t){this.buffer=e;this.usage=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}get allocatable(){return this.buffer}$name(e){return this._label=e,this}resolve(e){let t=new _chunkJYXJ5NFXcjs.j;return e.addBinding(this,t),e.resolve(t)}toString(){var e;return`${this.usage}:${(e=this._label)!=null?e:"<unnamed>"}`}};function de(n,e){return new M(n,e)}var M=class{constructor(e,t){this.dataType=e;this.initial=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_allowedUsages",{uniform:null,mutableStorage:null,readonlyStorage:null});_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}$allowUniform(){let e=this;return this.$addFlags(GPUBufferUsage.UNIFORM),this._allowedUsages.uniform||(this._allowedUsages.uniform=w(e,"uniform")),e}$allowReadonlyStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.readonlyStorage||(this._allowedUsages.readonlyStorage=w(e,"readonly_storage")),e}$allowMutableStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.mutableStorage||(this._allowedUsages.mutableStorage=w(e,"mutable_storage")),e}$addFlags(e){return this.flags|=e,this}asUniform(){return this._allowedUsages.uniform}asMutableStorage(){return this._allowedUsages.mutableStorage}asReadonlyStorage(){return this._allowedUsages.readonlyStorage}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function pe(n){return new k(n)}var k=class{constructor(e){this.expr=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label);return e.addDeclaration(_chunkJYXJ5NFXcjs.i`const ${t} = ${this.expr};`),e.resolve(t)}};function fe(n,...e){return new L(_chunkJYXJ5NFXcjs.i.call(void 0, n,...e))}var L=class{constructor(e){this._declaration=e}resolve(e){return e.addDeclaration(_chunkJYXJ5NFXcjs.i`${this._declaration}`),""}};function me(n,...e){return new O(_chunkJYXJ5NFXcjs.i.call(void 0, n,...e))}var O=class{constructor(e){this.body=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label);return e.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${t}${this.body}`.$name(this._label)),e.resolve(t)}with(e,t){return new I(this,[e,t])}toString(){var e;return`fn:${(e=this.label)!=null?e:"<unnamed>"}`}},I=class n{constructor(e,t){this._innerFn=e;this._slotValuePair=t}get label(){return this._innerFn.label}with(e,t){return new n(this,[e,t])}resolve(e){return e.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,s;let[e,t]=this._slotValuePair;return`fn:${(r=this.label)!=null?r:"<unnamed>"}[${(s=e.label)!=null?s:"<unnamed>"}=${t}]`}};function ce(n,e){let t=n.map(s=>[new _chunkJYXJ5NFXcjs.j,s]),r=t.map(([s,l])=>s);return s=>{let l=s(...r);return new z(t,e,l)}}var N=class{constructor(e,t){this.usedFn=e;this.args=t}resolve(e){let t=this.args.map((r,s)=>{let l=s<this.args.length-1?", ":"";return _chunkJYXJ5NFXcjs.i`${r}${l}`});return e.resolve(_chunkJYXJ5NFXcjs.i`${this.usedFn}(${t})`.$name("internal"))}toString(){var e;return`fun:${(e=this.usedFn.label)!=null?e:"<unnamed>"}()`}},z=class extends ge{constructor(t,r,s){super();this.argPairs=t;this.returnType=r;this.body=s;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let r=new (0, _chunkJYXJ5NFXcjs.j)().$name(this._label),s=this.argPairs.map(([l,i],u)=>{let d=u<this.argPairs.length-1?", ":"";return _chunkJYXJ5NFXcjs.h.call(void 0, i)?_chunkJYXJ5NFXcjs.i`${l}: ptr<${i.scope}, ${i.pointsTo}>${d}`:_chunkJYXJ5NFXcjs.i`${l}: ${i}${d}`});return this.returnType!==void 0?t.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${r}(${s}) -> ${this.returnType} {
3
+ `)}${s}`}getIndexFor(e){let t=this._shared.getBindingIndex(e);if(t===void 0)throw new Error("No index found for item");return t}},te=class n{constructor(e,t,r){this._parent=e;this._shared=t;this._slotValuePairs=r;_chunk7HTWRNOHcjs.d.call(void 0, this,"usedSlots",new Set)}addDeclaration(e){this._shared.addDeclaration(this.resolve(e))}addBinding(e,t){if(e.usage==="vertex"){this._shared.registerBindingNoEntry(e);return}let{group:r,idx:s}=this._shared.reserveBindingEntry(e);this.addDeclaration(_chunk7HTWRNOHcjs.O`@group(${r}) @binding(${s}) var<${st[e.usage]}> ${t}: ${e.allocatable.dataType};`)}addRenderResource(e,t){let{group:r,idx:s}=this._shared.reserveRenderResourceEntry(e);if(_chunk7HTWRNOHcjs.k.call(void 0, e.type)||_chunk7HTWRNOHcjs.o.call(void 0, e.type)||_chunk7HTWRNOHcjs.m.call(void 0, e.type)){this.addDeclaration(_chunk7HTWRNOHcjs.O`@group(${r}) @binding(${s}) var ${t}: ${e.type};`);return}if(O(e)){if(e.access!==void 0){this.addDeclaration(_chunk7HTWRNOHcjs.O`@group(${r}) @binding(${s}) var ${t}: ${e.type}<${e.texture.descriptor.format}, ${e.access}>;`);return}this.addDeclaration(_chunk7HTWRNOHcjs.O`@group(${r}) @binding(${s}) var ${t}: ${e.type}<${e.dataType}>;`);return}throw new Error(`Unsupported resource type: ${e.type}`)}addBuiltin(e){this._shared.addBuiltin(e)}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){let t=this._slotValuePairs.find(([r])=>r===e);return t?(this.usedSlots.add(e),t[1]):(this.usedSlots.add(e),this._parent.readSlot(e))}unwrap(e){let t=e;for(;_chunk7HTWRNOHcjs.j.call(void 0, t);)t=this.readSlot(t);return t}resolve(e,t=[]){if(!_chunk7HTWRNOHcjs.h.call(void 0, e))return String(e);let r=new n(this,this._shared,t);return this._shared.getOrInstantiate(e,r)}};var nt={uniform:"uniform",mutable:"storage",readonly:"read-only-storage"},_= exports.ProgramBuilder =class{constructor(e,t){this.runtime=e;this.root=t}build(e){var x;let t=new P({names:(x=e.nameRegistry)!=null?x:new b,bindingGroup:e.bindingGroup}),r=t.resolve(this.root),s=Array.from(t.usedBindables),l=Array.from(t.usedRenderResources),g=l.filter(F),i=l.filter(O),m=l.filter(ke),p=[];for(let d of i)d.access===void 0?p.push({binding:t.getIndexFor(d),visibility:e.shaderStage,texture:{}}):p.push({binding:t.getIndexFor(d),visibility:e.shaderStage,storageTexture:{format:d.texture.descriptor.format}});for(let d of m)p.push({binding:t.getIndexFor(d),visibility:e.shaderStage,externalTexture:{}});for(let d of g)p.push({binding:t.getIndexFor(d),visibility:e.shaderStage,sampler:{}});for(let d of s)d.usage!=="vertex"&&p.push({binding:t.getIndexFor(d),visibility:e.shaderStage,buffer:{type:nt[d.usage]}});let c=[];for(let d of i)c.push({binding:t.getIndexFor(d),resource:this.runtime.viewFor(d)});for(let d of m)c.push({binding:t.getIndexFor(d),resource:this.runtime.externalTextureFor(d)});for(let d of g)c.push({binding:t.getIndexFor(d),resource:this.runtime.samplerFor(d)});for(let d of s)d.usage!=="vertex"&&c.push({binding:t.getIndexFor(d),resource:{buffer:this.runtime.bufferFor(d.allocatable)}});let f=this.runtime.device.createBindGroupLayout({entries:p}),y=this.runtime.device.createBindGroup({layout:f,entries:c});return{bindGroupLayout:f,bindGroup:y,code:r}}},M=class{constructor(e,t,r,s){this.runtime=e;this.vertexRoot=t;this.fragmentRoot=r;this.vertexOutputFormat=s}build(e){var xe,he,be,We;let t=Object.getOwnPropertySymbols(this.vertexOutputFormat).map(u=>{let h=this.vertexOutputFormat[u];if(typeof h!="string")throw new Error("Output names must be strings.");return{symbol:u,name:h}}),r=Object.fromEntries(t.map(({symbol:u,name:h})=>[u,h])),s=_chunk7HTWRNOHcjs.N.call(void 0, r),g=Object.keys(this.vertexOutputFormat).map((u,h)=>{let R=this.vertexOutputFormat[u];if(!R)throw new Error("Output names must be strings.");return{name:u,varInfo:R,index:h}}),i=[...s.map(u=>_chunk7HTWRNOHcjs.O`
4
+ @builtin(${u.builtin.name}) ${u.name}: ${u.builtin.type},
5
+ `),...g.map(({name:u,varInfo:h,index:R})=>_chunk7HTWRNOHcjs.O`
6
+ @location(${R}) ${u}: ${h},
7
+ `)],m=new P({names:(xe=e.nameRegistry)!=null?xe:new b,bindingGroup:e.bindingGroup});m.resolve(this.vertexRoot);let p=Array.from(m.usedBindables).filter(u=>u.usage==="vertex"),f=p.map(u=>({bindable:u,underlyingType:u.allocatable.dataType})).map((u,h)=>_chunk7HTWRNOHcjs.O`
8
+ @location(${h}) ${u.bindable} : ${u.underlyingType.getUnderlyingTypeString()},
9
+ `),d=[...Array.from(m.usedBuiltins).map(u=>_chunk7HTWRNOHcjs.O`
10
+ @builtin(${u.name}) ${u.identifier}: ${u.type},
11
+ `),...f],W=_chunk7HTWRNOHcjs.O`
12
+ struct VertexOutput {
13
+ ${i}
14
+ };
15
+
16
+ @vertex
17
+ fn main(${d}) -> VertexOutput {
18
+ ${this.vertexRoot}
19
+ var output: VertexOutput;
20
+ ${s.map(u=>_chunk7HTWRNOHcjs.O`
21
+ output.${u.name} = ${u.name};
22
+ `)}
23
+ ${g.map(({name:u})=>_chunk7HTWRNOHcjs.O`
24
+ output.${u} = ${u};
25
+ `)}
26
+ return output;
27
+ }
28
+ `,A=new P({names:(he=e.nameRegistry)!=null?he:new b,bindingGroup:e.bindingGroup});A.resolve(this.fragmentRoot);let D=Array.from(A.usedBuiltins).map(u=>_chunk7HTWRNOHcjs.O`
29
+ @builtin(${u.name}) ${u.identifier}: ${u.type},
30
+ `),V=g.map(({name:u,varInfo:h},R)=>_chunk7HTWRNOHcjs.O`
31
+ @location(${R}) ${u}: ${h},
32
+ `),v=[...D,...V],B=_chunk7HTWRNOHcjs.O`
33
+ @fragment
34
+ fn main(${v}) -> @location(0) vec4f {
35
+ ${this.fragmentRoot}
36
+ }
37
+ `,et=new _(this.runtime,W).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.VERTEX,nameRegistry:(be=e.nameRegistry)!=null?be:new b}),tt=new _(this.runtime,B).build({bindingGroup:e.bindingGroup+1,shaderStage:GPUShaderStage.FRAGMENT,nameRegistry:(We=e.nameRegistry)!=null?We:new b});return[et,tt,p]}},k=class{constructor(e,t,r){this.runtime=e;this.computeRoot=t;this.workgroupSize=r}build(e){var m,p,c,f;let t=new P({names:(m=e.nameRegistry)!=null?m:new b,bindingGroup:e.bindingGroup});t.resolve(this.computeRoot);let s=Array.from(t.usedBuiltins).map(y=>_chunk7HTWRNOHcjs.O`
38
+ @builtin(${y.name}) ${y.identifier}: ${y.type},
39
+ `),l=`@workgroup_size(${this.workgroupSize[0]}, ${(p=this.workgroupSize[1])!=null?p:1}, ${(c=this.workgroupSize[2])!=null?c:1})`,g=_chunk7HTWRNOHcjs.O`
40
+ @compute ${l}
41
+ fn main(${s}) {
42
+ ${this.computeRoot}
43
+ }
44
+ `;return new _(this.runtime,g).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.COMPUTE,nameRegistry:(f=e.nameRegistry)!=null?f:new b})}};function $(n,e){return new re(n,e)}var re=class{constructor(e,t){this.buffer=e;this.usage=t;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}get allocatable(){return this.buffer}$name(e){return this._label=e,this}resolve(e){let t=new _chunk7HTWRNOHcjs.F;return e.addBinding(this,t),e.resolve(t)}toString(){var e;return`${this.usage}:${(e=this._label)!=null?e:"<unnamed>"}`}};function Ie(n,e){return new se(n,e)}var se=class{constructor(e,t){this.dataType=e;this.initial=t;_chunk7HTWRNOHcjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunk7HTWRNOHcjs.d.call(void 0, this,"vertexLayout",null);_chunk7HTWRNOHcjs.d.call(void 0, this,"_allowedUsages",{uniform:null,mutable:null,readonly:null,vertex:null});_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}$allowUniform(){this.$addFlags(GPUBufferUsage.UNIFORM);let e=this;return this._allowedUsages.uniform||(this._allowedUsages.uniform=$(e,"uniform")),e}$allowReadonly(){this.$addFlags(GPUBufferUsage.STORAGE);let e=this;return this._allowedUsages.readonly||(this._allowedUsages.readonly=$(e,"readonly")),e}$allowMutable(){this.$addFlags(GPUBufferUsage.STORAGE);let e=this;return this._allowedUsages.mutable||(this._allowedUsages.mutable=$(e,"mutable")),e}$allowVertex(e="vertex"){this.$addFlags(GPUBufferUsage.VERTEX);let t=this;if(!this.vertexLayout){if(!(this.dataType instanceof _chunk7HTWRNOHcjs.q))throw new Error("Only simple data types can be used as vertex buffers");let r=this.dataType;r=r.getUnderlyingType(),this.vertexLayout={arrayStride:r.size,stepMode:e},this._allowedUsages.vertex=$(t,"vertex")}if(this.vertexLayout.stepMode!==e)throw new Error("Cannot change step mode of a vertex buffer");return t}$addFlags(e){return this.flags|=e,this}asUniform(){return this._allowedUsages.uniform}asMutable(){return this._allowedUsages.mutable}asReadonly(){return this._allowedUsages.readonly}asVertex(){return this._allowedUsages.vertex}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function Le(n){return new ne(n)}var ne=class{constructor(e){this.expr=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label);return e.addDeclaration(_chunk7HTWRNOHcjs.O`const ${t} = ${this.expr};`),e.resolve(t)}};function Ne(n,...e){return new ae(_chunk7HTWRNOHcjs.O.call(void 0, n,...e))}var ae=class{constructor(e){this._declaration=e}resolve(e){return e.addDeclaration(_chunk7HTWRNOHcjs.O`${this._declaration}`),""}};function ze(n,...e){return new le(_chunk7HTWRNOHcjs.O.call(void 0, n,...e))}var le=class{constructor(e){this.body=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label);return e.addDeclaration(_chunk7HTWRNOHcjs.O`fn ${t}${this.body}`.$name(this._label)),e.resolve(t)}with(e,t){return new ie(this,[e,t])}toString(){var e;return`fn:${(e=this.label)!=null?e:"<unnamed>"}`}},ie=class n{constructor(e,t){this._innerFn=e;this._slotValuePair=t}get label(){return this._innerFn.label}with(e,t){return new n(this,[e,t])}resolve(e){return e.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,s;let[e,t]=this._slotValuePair;return`fn:${(r=this.label)!=null?r:"<unnamed>"}[${(s=e.label)!=null?s:"<unnamed>"}=${t}]`}};function qe(n,e){let t=n.map(s=>[new _chunk7HTWRNOHcjs.F,s]),r=t.map(([s,l])=>s);return s=>{let l=s(...r);return new ue(t,e,l)}}var oe=class{constructor(e,t){this.usedFn=e;this.args=t}resolve(e){let t=this.args.map((r,s)=>{let l=s<this.args.length-1?", ":"";return _chunk7HTWRNOHcjs.O`${r}${l}`});return e.resolve(_chunk7HTWRNOHcjs.O`${this.usedFn}(${t})`.$name("internal"))}toString(){var e;return`fun:${(e=this.usedFn.label)!=null?e:"<unnamed>"}()`}},ue=class extends Ve{constructor(t,r,s){super();this.argPairs=t;this.returnType=r;this.body=s;_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let r=new (0, _chunk7HTWRNOHcjs.F)().$name(this._label),s=this.argPairs.map(([l,g],i)=>{let m=i<this.argPairs.length-1?", ":"";return _chunk7HTWRNOHcjs.p.call(void 0, g)?_chunk7HTWRNOHcjs.O`${l}: ptr<${g.scope}, ${g.pointsTo}>${m}`:_chunk7HTWRNOHcjs.O`${l}: ${g}${m}`});return this.returnType!==void 0?t.addDeclaration(_chunk7HTWRNOHcjs.O`fn ${r}(${s}) -> ${this.returnType} {
4
45
  ${this.body}
5
- }`):t.addDeclaration(_chunkJYXJ5NFXcjs.i`fn ${r}(${s}) {
46
+ }`):t.addDeclaration(_chunk7HTWRNOHcjs.O`fn ${r}(${s}) {
6
47
  ${this.body}
7
- }`),t.resolve(r)}_call(...t){return new N(this,t)}toString(){var t;return`fun:${(t=this._label)!=null?t:"<unnamed>"}`}};var Te=Symbol("This item can be set, owns its value (does not get value from an external source)");var he=Symbol("This plum's value is sourced from outside the runtime.");function S(n){return n[he]===!0}function ye(n){return typeof n=="function"?new j(n):new q(n)}function be(n,e){return new K(n,e)}function We(n){return n.__brand==="WgslPlum"}var Se,q=class{constructor(e){this._initial=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,Se,!0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}compute(e){return this._initial}$name(e){return this._label=e,this}get label(){return this._label}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};Se=Te;var j=class{constructor(e){this._compute=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label")}$name(e){return this._label=e,this}get label(){return this._label}compute(e){return this._compute(e)}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}},Re,K=class{constructor(e,t){this._subscribe=e;this._getLatest=t;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslPlum");_chunkJYXJ5NFXcjs.d.call(void 0, this,Re,!0);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_label");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_prev");_chunkJYXJ5NFXcjs.d.call(void 0, this,"_version",0);this._prev=t()}$name(e){return this._label=e,this}get label(){return this._label}get version(){return this._version}subscribe(e){return this._subscribe(e)}compute(){let e=this._getLatest();return Object.is(e,this._prev)||(this._version++,this._prev=e),this._prev}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};Re=he;function ve(n){return new Q(n)}var Q=class{constructor(e=void 0){this.defaultValue=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"__brand","WgslSlot");_chunkJYXJ5NFXcjs.d.call(void 0, this,"label")}$name(e){return this.label=e,this}areEqual(e,t){return Object.is(e,t)}resolve(e){var r;let t=e.unwrap(this);if(!_chunkJYXJ5NFXcjs.f.call(void 0, t))throw new Error(`Cannot inject value of type ${typeof t} of slot '${(r=this.label)!=null?r:"<unnamed>"}' in code.`);return e.resolve(t)}toString(){var e;return`slot:${(e=this.label)!=null?e:"<unnamed>"}`}};var _e=(n,e)=>new Y(n,e,"private"),Y=class{constructor(e,t,r){this._dataType=e;this._initialValue=t;this.scope=r;_chunkJYXJ5NFXcjs.d.call(void 0, this,"identifier",new _chunkJYXJ5NFXcjs.j)}$name(e){return this.identifier.$name(e),this}resolve(e){return this._initialValue?e.addDeclaration(_chunkJYXJ5NFXcjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType} = ${this._initialValue};`):e.addDeclaration(_chunkJYXJ5NFXcjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType};`),e.resolve(this.identifier)}};var Ae=Object.assign(_chunkJYXJ5NFXcjs.i,{code:_chunkJYXJ5NFXcjs.i,fn:me,fun:ce,buffer:de,plum:ye,plumFromEvent:be,slot:ve,constant:pe,declare:fe,var:_e});var _typedbinary = require('typed-binary');var X=(n,e)=>{let t=e-1,r=~t;return n&t?(n&r)+e:n};var R=class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_stateMap",new WeakMap)}inspect(e){return this._stateMap.get(e)}_getState(e){let t=this._stateMap.get(e);if(!t){let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);t={value:r,dependencies:s,version:0},this._stateMap.set(e,t)}return t}_notifyListeners(e){let t=this._getState(e);if(!t.active)return;let r=[...t.active.listeners];for(let s of r)s()}_computeAndGatherDependencies(e){let t=new Map,r=s=>{if(!t.has(s)){let l=this._getState(s);t.set(s,l.version)}return this.get(s)};return{value:e.compute(r),dependencies:t}}_recompute(e){let t=this._getState(e);if(t.active)for(let l of t.active.unsubs)l();let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);if(t.dependencies=s,t.active)for(let[l]of t.dependencies)t.active.unsubs.add(this.subscribe(l,()=>{this._recompute(e)}));return Object.is(t.value,r)||(t.value=r,t.version=S(e)?e.version:t.version+1,this._notifyListeners(e)),t.value}get(e){let t=this._getState(e);if(t.active)return t.value;let r=!1;return S(e)?(e.compute(null),r=t.version!==e.version):t.dependencies.size>0&&(r=[...t.dependencies.entries()].some(([s,l])=>(this.get(s),this._getState(s).version!==l))),r?this._recompute(e):t.value}set(e,t){let r=this._getState(e);Object.is(r.value,t)||(r.value=t,r.version++,this._notifyListeners(e))}subscribe(e,t){let r=this._getState(e),s;if(!r.active){let l=new Set;r.active={listeners:new Set,unsubs:l};for(let[i]of r.dependencies)l.add(this.subscribe(i,()=>{this._recompute(e)}));S(e)&&(s=e.subscribe(()=>{this._recompute(e)}))}return r.active.listeners.add(t),()=>{if(r.active&&(r.active.listeners.delete(t),r.active.listeners.size===0)){for(let l of r.active.unsubs)l();s==null||s(),r.active=void 0}}}};var A=class{constructor(){_chunkJYXJ5NFXcjs.d.call(void 0, this,"_queue",[]);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_pending",!1)}enqueue(e){return new Promise((t,r)=>{this._queue.push(async()=>{try{t(await e())}catch(s){r(s)}}),this._processQueue()})}async _processQueue(){if(!this._pending){for(this._pending=!0;this._queue.length>0;){let e=this._queue.shift();e&&await e()}this._pending=!1}}};var U=class{constructor(e){this.device=e;_chunkJYXJ5NFXcjs.d.call(void 0, this,"_entryToBufferMap",new Map);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_pipelineExecutors",[]);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_commandEncoder",null);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_readBuffer",null);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_taskQueue",new A);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_plumStore",new R);_chunkJYXJ5NFXcjs.d.call(void 0, this,"_allocSubscriptions",new Map)}get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}dispose(){var e;for(let t of this._allocSubscriptions.values())t();this._allocSubscriptions.clear();for(let t of this._entryToBufferMap.values())t.destroy();this._entryToBufferMap.clear(),(e=this._readBuffer)==null||e.destroy()}bufferFor(e){let t=this._entryToBufferMap.get(e);if(!t){if(t=this.device.createBuffer({usage:e.flags,size:X(e.dataType.size,e.dataType.byteAlignment),mappedAtCreation:e.initial!==void 0}),!t)throw new Error(`Failed to create buffer for ${e}`);if(e.initial!==void 0){let r=new (0, _typedbinary.BufferWriter)(t.getMappedRange());if(We(e.initial)){let s=e.initial;e.dataType.write(r,this._plumStore.get(s)),this._allocSubscriptions.set(e,this._plumStore.subscribe(s,()=>{this.writeBuffer(e,this._plumStore.get(s))}))}else e.dataType.write(r,e.initial);t.unmap()}this._entryToBufferMap.set(e,t)}return t}async readBuffer(e){return this._taskQueue.enqueue(async()=>{var l;this.flush(),(!this._readBuffer||this._readBuffer.size<e.dataType.size)&&((l=this._readBuffer)==null||l.destroy(),this._readBuffer=this.device.createBuffer({usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,size:e.dataType.size}));let t=this.bufferFor(e),r=this.device.createCommandEncoder();r.copyBufferToBuffer(t,0,this._readBuffer,0,e.dataType.size),this.device.queue.submit([r.finish()]),await this.device.queue.onSubmittedWorkDone(),await this._readBuffer.mapAsync(GPUMapMode.READ,0,e.dataType.size);let s=e.dataType.read(new (0, _typedbinary.BufferReader)(this._readBuffer.getMappedRange()));return this._readBuffer.unmap(),s})}writeBuffer(e,t){let r=this.bufferFor(e),s=X(e.dataType.size,e.dataType.byteAlignment),l=new ArrayBuffer(s);e.dataType.write(new (0, _typedbinary.BufferWriter)(l),t),this.device.queue.writeBuffer(r,0,l,0,s)}readPlum(e){return this._plumStore.get(e)}setPlum(e,t){this._plumStore.set(e,t)}onPlumChange(e,t){return this._plumStore.subscribe(e,t)}makeRenderPipeline(e){var g,c,T,h,y,p,f,_,v,Z,ee,te,re;let t=new b(this,_chunkJYXJ5NFXcjs.i`
8
- @vertex fn main_vertex(${e.vertex.args.flatMap(W=>[W,", "])}) -> ${e.vertex.output} {
9
- ${e.vertex.code}
10
- }
11
-
12
- ${(c=(g=e.externalDeclarations)==null?void 0:g.flatMap(W=>[W,`
13
- `]))!=null?c:""}
14
- `).build({bindingGroup:((T=e.externalLayouts)!=null?T:[]).length,shaderStage:GPUShaderStage.VERTEX}),r=new b(this,_chunkJYXJ5NFXcjs.i`
15
- @fragment fn main_frag(${e.fragment.args.flatMap(W=>[W,", "])}) -> ${e.fragment.output} {
16
- ${e.fragment.code}
17
- }
18
-
19
- ${(y=(h=e.externalDeclarations)==null?void 0:h.flatMap(W=>[W,`
20
- `]))!=null?y:""}
21
- `).build({bindingGroup:((p=e.externalLayouts)!=null?p:[]).length+1,shaderStage:GPUShaderStage.FRAGMENT}),s=this.device.createShaderModule({code:t.code}),l=this.device.createShaderModule({code:r.code}),i=this.device.createPipelineLayout({label:(f=e.label)!=null?f:"",bindGroupLayouts:[...(_=e.externalLayouts)!=null?_:[],t.bindGroupLayout,r.bindGroupLayout]}),u=this.device.createRenderPipeline({label:(v=e.label)!=null?v:"",layout:i,vertex:{module:s,buffers:(Z=e.vertex.buffersLayouts)!=null?Z:[]},fragment:{module:l,targets:(ee=e.fragment.target)!=null?ee:[]},primitive:e.primitive}),d=new H(this,u,[t,r],(re=(te=e.externalLayouts)==null?void 0:te.length)!=null?re:0);return this._pipelineExecutors.push(d),d}makeComputePipeline(e){var g,c,T,h,y,p,f,_;let{args:t=[],workgroupSize:r=[1,1]}=e,s=new b(this,_chunkJYXJ5NFXcjs.i`
22
- @compute @workgroup_size(${r.join(", ")}) fn main_compute(${t.flatMap(v=>[v,", "])}) {
23
- ${e.code}
24
- }
25
-
26
- ${(c=(g=e.externalDeclarations)==null?void 0:g.flatMap(v=>[v,`
27
- `]))!=null?c:""}
28
- `).build({bindingGroup:((T=e.externalLayouts)!=null?T:[]).length,shaderStage:GPUShaderStage.COMPUTE}),l=this.device.createShaderModule({code:s.code}),i=this.device.createPipelineLayout({label:(h=e.label)!=null?h:"",bindGroupLayouts:[...(y=e.externalLayouts)!=null?y:[],s.bindGroupLayout]}),u=this.device.createComputePipeline({label:(p=e.label)!=null?p:"",layout:i,compute:{module:l}}),d=new J(this,u,[s],(_=(f=e.externalLayouts)==null?void 0:f.length)!=null?_:0);return this._pipelineExecutors.push(d),d}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}},B=class{constructor(e,t,r,s,l){this._runtime=e;this.pipeline=t;this.programs=r;this.externalLayoutCount=s;this.label=l}},H=class extends B{execute(e){var T,h,y;let c=e,{vertexCount:t,instanceCount:r,firstVertex:s,firstInstance:l,externalBindGroups:i,externalVertexBuffers:u}=c,d=_chunkJYXJ5NFXcjs.c.call(void 0, c,["vertexCount","instanceCount","firstVertex","firstInstance","externalBindGroups","externalVertexBuffers"]);if(((T=i==null?void 0:i.length)!=null?T:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(h=i==null?void 0:i.length)!=null?h:0}`);let g=this._runtime.commandEncoder.beginRenderPass(_chunkJYXJ5NFXcjs.b.call(void 0, _chunkJYXJ5NFXcjs.a.call(void 0, {},d),{label:(y=this.label)!=null?y:""}));g.setPipeline(this.pipeline),(i!=null?i:[]).forEach((p,f)=>g.setBindGroup(f,p)),(u!=null?u:[]).forEach((p,f)=>g.setVertexBuffer(f,p)),this.programs.forEach((p,f)=>{g.setBindGroup((i!=null?i:[]).length+f,p.bindGroup)}),g.draw(t,r,s,l),g.end()}},J=class extends B{execute(e){var l,i,u;let{workgroups:t=[1,1],externalBindGroups:r}=e!=null?e:{};if(((l=r==null?void 0:r.length)!=null?l:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(i=r==null?void 0:r.length)!=null?i:0}`);let s=this._runtime.commandEncoder.beginComputePass({label:(u=this.label)!=null?u:""});s.setPipeline(this.pipeline),(r!=null?r:[]).forEach((d,g)=>s.setBindGroup(g,d)),this.programs.forEach((d,g)=>s.setBindGroup((r!=null?r:[]).length+g,d.bindGroup)),s.dispatchWorkgroups(...t),s.end()}};async function Be(n){if(n instanceof GPUDevice)return new U(n);if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let e=await navigator.gpu.requestAdapter(n==null?void 0:n.adapter);if(!e)throw new Error("Could not find a compatible GPU");return new U(await e.requestDevice(n==null?void 0:n.device))}exports.MissingSlotValueError = _chunkG3WAZR24cjs.b; exports.ProgramBuilder = b; exports.RandomNameRegistry = x; exports.RecursiveDataTypeError = _chunkG3WAZR24cjs.c; exports.ResolutionError = _chunkG3WAZR24cjs.a; exports.StrictNameRegistry = V; exports.createRuntime = Be; exports.isPointer = _chunkJYXJ5NFXcjs.h; exports.isResolvable = _chunkJYXJ5NFXcjs.e; exports.isSlot = _chunkJYXJ5NFXcjs.g; exports.isWgsl = _chunkJYXJ5NFXcjs.f; exports.wgsl = Ae;
48
+ }`),t.resolve(r)}_call(...t){return new oe(this,t)}toString(){var t;return`fun:${(t=this._label)!=null?t:"<unnamed>"}`}};var je=Symbol("This item can be set, owns its value (does not get value from an external source)");var Ke=Symbol("This plum's value is sourced from outside the runtime.");function I(n){return n[Ke]===!0}function Ye(n){return typeof n=="function"?new ge(n):new de(n)}function Qe(n,e){return new pe(n,e)}function Xe(n){return n.__brand==="WgslPlum"}var at,de=class{constructor(e){this._initial=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"__brand","WgslPlum");_chunk7HTWRNOHcjs.d.call(void 0, this,at,!0);_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}compute(e){return this._initial}$name(e){return this._label=e,this}get label(){return this._label}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};at=je;var ge=class{constructor(e){this._compute=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"__brand","WgslPlum");_chunk7HTWRNOHcjs.d.call(void 0, this,"_label")}$name(e){return this._label=e,this}get label(){return this._label}compute(e){return this._compute(e)}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}},lt,pe=class{constructor(e,t){this._subscribe=e;this._getLatest=t;_chunk7HTWRNOHcjs.d.call(void 0, this,"__brand","WgslPlum");_chunk7HTWRNOHcjs.d.call(void 0, this,lt,!0);_chunk7HTWRNOHcjs.d.call(void 0, this,"_label");_chunk7HTWRNOHcjs.d.call(void 0, this,"_prev");_chunk7HTWRNOHcjs.d.call(void 0, this,"_version",0);this._prev=t()}$name(e){return this._label=e,this}get label(){return this._label}get version(){return this._version}subscribe(e){return this._subscribe(e)}compute(){let e=this._getLatest();return Object.is(e,this._prev)||(this._version++,this._prev=e),this._prev}toString(){var e;return`plum:${(e=this._label)!=null?e:"<unnamed>"}`}};lt=Ke;function He(n){return new me(n)}var me=class{constructor(e=void 0){this.defaultValue=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"__brand","WgslSlot");_chunk7HTWRNOHcjs.d.call(void 0, this,"label")}$name(e){return this.label=e,this}areEqual(e,t){return Object.is(e,t)}resolve(e){var r;let t=e.unwrap(this);if(!_chunk7HTWRNOHcjs.i.call(void 0, t))throw new Error(`Cannot inject value of type ${typeof t} of slot '${(r=this.label)!=null?r:"<unnamed>"}' in code.`);return e.resolve(t)}toString(){var e;return`slot:${(e=this.label)!=null?e:"<unnamed>"}`}};var Je=(n,e,t="private")=>new ce(n,e,t),ce=class{constructor(e,t,r){this._dataType=e;this._initialValue=t;this.scope=r;_chunk7HTWRNOHcjs.d.call(void 0, this,"identifier",new _chunk7HTWRNOHcjs.F)}$name(e){return this.identifier.$name(e),this}resolve(e){return this._initialValue?e.addDeclaration(_chunk7HTWRNOHcjs.O`var<${this.scope}> ${this.identifier}: ${this._dataType} = ${this._initialValue};`):e.addDeclaration(_chunk7HTWRNOHcjs.O`var<${this.scope}> ${this.identifier}: ${this._dataType};`),e.resolve(this.identifier)}};var it=Object.assign(_chunk7HTWRNOHcjs.O,{code:_chunk7HTWRNOHcjs.O,fn:ze,fun:qe,buffer:Ie,plum:Ye,plumFromEvent:Qe,slot:He,constant:Le,declare:Ne,var:Je,sampler:Ee,texture:Oe,textureExternal:Me,builtin:_chunk7HTWRNOHcjs.L});var _typedbinary = require('typed-binary');var fe=(n,e)=>{let t=e-1,r=~t;return n&t?(n&r)+e:n};var L=class{constructor(){_chunk7HTWRNOHcjs.d.call(void 0, this,"_stateMap",new WeakMap)}inspect(e){return this._stateMap.get(e)}_getState(e){let t=this._stateMap.get(e);if(!t){let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);t={value:r,dependencies:s,version:0},this._stateMap.set(e,t)}return t}_notifyListeners(e){let t=this._getState(e);if(!t.active)return;let r=[...t.active.listeners];for(let s of r)s(t.value)}_computeAndGatherDependencies(e){let t=new Map,r=s=>{if(!t.has(s)){let l=this._getState(s);t.set(s,l.version)}return this.get(s)};return{value:e.compute(r),dependencies:t}}_recompute(e){let t=this._getState(e);if(t.active)for(let l of t.active.unsubs)l();let{value:r,dependencies:s}=this._computeAndGatherDependencies(e);if(t.dependencies=s,t.active)for(let[l]of t.dependencies)t.active.unsubs.add(this.subscribe(l,()=>{this._recompute(e)}));return Object.is(t.value,r)||(t.value=r,t.version=I(e)?e.version:t.version+1,this._notifyListeners(e)),t.value}get(e){let t=this._getState(e);if(t.active)return t.value;let r=!1;return I(e)?(e.compute(null),r=t.version!==e.version):t.dependencies.size>0&&(r=[...t.dependencies.entries()].some(([s,l])=>(this.get(s),this._getState(s).version!==l))),r?this._recompute(e):t.value}set(e,t){let r=this._getState(e);Object.is(r.value,t)||(r.value=t,r.version++,this._notifyListeners(e))}subscribe(e,t){let r=this._getState(e),s;if(!r.active){let l=new Set;r.active={listeners:new Set,unsubs:l};for(let[g]of r.dependencies)l.add(this.subscribe(g,()=>{this._recompute(e)}));I(e)&&(s=e.subscribe(()=>{this._recompute(e)}))}return r.active.listeners.add(t),()=>{if(r.active&&(r.active.listeners.delete(t),r.active.listeners.size===0)){for(let l of r.active.unsubs)l();s==null||s(),r.active=void 0}}}};var N=class{constructor(){_chunk7HTWRNOHcjs.d.call(void 0, this,"_queue",[]);_chunk7HTWRNOHcjs.d.call(void 0, this,"_pending",!1)}enqueue(e){return new Promise((t,r)=>{this._queue.push(async()=>{try{t(await e())}catch(s){r(s)}}),this._processQueue()})}async _processQueue(){if(!this._pending){for(this._pending=!0;this._queue.length>0;){let e=this._queue.shift();e&&await e()}this._pending=!1}}};var z=class{constructor(e){this.device=e;_chunk7HTWRNOHcjs.d.call(void 0, this,"_entryToBufferMap",new Map);_chunk7HTWRNOHcjs.d.call(void 0, this,"_samplers",new WeakMap);_chunk7HTWRNOHcjs.d.call(void 0, this,"_textures",new WeakMap);_chunk7HTWRNOHcjs.d.call(void 0, this,"_textureViews",new WeakMap);_chunk7HTWRNOHcjs.d.call(void 0, this,"_pipelineExecutors",[]);_chunk7HTWRNOHcjs.d.call(void 0, this,"_commandEncoder",null);_chunk7HTWRNOHcjs.d.call(void 0, this,"_readBuffer",null);_chunk7HTWRNOHcjs.d.call(void 0, this,"_taskQueue",new N);_chunk7HTWRNOHcjs.d.call(void 0, this,"_plumStore",new L);_chunk7HTWRNOHcjs.d.call(void 0, this,"_allocSubscriptions",new Map)}get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}dispose(){var e;for(let t of this._allocSubscriptions.values())t();this._allocSubscriptions.clear();for(let t of this._entryToBufferMap.values())t.destroy();this._entryToBufferMap.clear(),(e=this._readBuffer)==null||e.destroy()}bufferFor(e){let t=this._entryToBufferMap.get(e);if(!t){if(t=this.device.createBuffer({usage:e.flags,size:fe(e.dataType.size,e.dataType.byteAlignment),mappedAtCreation:e.initial!==void 0}),!t)throw new Error(`Failed to create buffer for ${e}`);if(e.initial!==void 0){let r=new (0, _typedbinary.BufferWriter)(t.getMappedRange());if(Xe(e.initial)){let s=e.initial;e.dataType.write(r,this._plumStore.get(s)),this._allocSubscriptions.set(e,this._plumStore.subscribe(s,()=>{this.writeBuffer(e,this._plumStore.get(s))}))}else e.dataType.write(r,e.initial);t.unmap()}this._entryToBufferMap.set(e,t)}return t}textureFor(e){let t;"texture"in e?t=e.texture:t=e;let r=this._textures.get(t);if(!r){let s=_chunk7HTWRNOHcjs.b.call(void 0, _chunk7HTWRNOHcjs.a.call(void 0, {},t.descriptor),{usage:t.flags});if(r=this.device.createTexture(s),!r)throw new Error(`Failed to create texture for ${e}`);this._textures.set(t,r)}return r}viewFor(e){let t=this._textureViews.get(e);return t||(t=this.textureFor(e.texture).createView(e.descriptor),this._textureViews.set(e,t)),t}externalTextureFor(e){return this.device.importExternalTexture(e.descriptor)}samplerFor(e){let t=this._samplers.get(e);if(!t){if(t=this.device.createSampler(e.descriptor),!t)throw new Error(`Failed to create sampler for ${e}`);this._samplers.set(e,t)}return t}async readBuffer(e){return this._taskQueue.enqueue(async()=>{var l;this.flush(),(!this._readBuffer||this._readBuffer.size<e.dataType.size)&&((l=this._readBuffer)==null||l.destroy(),this._readBuffer=this.device.createBuffer({usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ,size:e.dataType.size}));let t=this.bufferFor(e),r=this.device.createCommandEncoder();r.copyBufferToBuffer(t,0,this._readBuffer,0,e.dataType.size),this.device.queue.submit([r.finish()]),await this.device.queue.onSubmittedWorkDone(),await this._readBuffer.mapAsync(GPUMapMode.READ,0,e.dataType.size);let s=e.dataType.read(new (0, _typedbinary.BufferReader)(this._readBuffer.getMappedRange()));return this._readBuffer.unmap(),s})}writeBuffer(e,t){let r=this.bufferFor(e),s=fe(e.dataType.size,e.dataType.byteAlignment),l=new ArrayBuffer(s);e.dataType.write(new (0, _typedbinary.BufferWriter)(l),t),this.device.queue.writeBuffer(r,0,l,0,s)}readPlum(e){return this._plumStore.get(e)}setPlum(e,t){if(typeof t=="function"){let r=t;this._plumStore.set(e,r(this._plumStore.get(e)))}else this._plumStore.set(e,t)}onPlumChange(e,t){return this._plumStore.subscribe(e,t)}makeRenderPipeline(e){var y,x,d,W,A,j,D,V;let[t,r,s]=new M(this,e.vertex.code,e.fragment.code,e.vertex.output).build({bindingGroup:((y=e.externalLayouts)!=null?y:[]).length}),l=s.map((v,B)=>{if(!v.allocatable.vertexLayout)throw new Error(`Buffer ${v.allocatable} does not have a vertex layout`);return _chunk7HTWRNOHcjs.b.call(void 0, _chunk7HTWRNOHcjs.a.call(void 0, {},v.allocatable.vertexLayout),{attributes:[{shaderLocation:B,offset:0,format:Ge(v.allocatable.dataType)}]})}),g=this.device.createShaderModule({code:t.code}),i=this.device.createShaderModule({code:r.code}),m=this.device.createPipelineLayout({label:(x=e.label)!=null?x:"",bindGroupLayouts:[...(d=e.externalLayouts)!=null?d:[],t.bindGroupLayout,r.bindGroupLayout]}),p=this.device.createRenderPipeline({label:(W=e.label)!=null?W:"",layout:m,vertex:{module:g,buffers:l},fragment:{module:i,targets:(j=(A=e.fragment)==null?void 0:A.target)!=null?j:[]},primitive:e.primitive}),c=s.map((v,B)=>[this.bufferFor(v.allocatable),B]),f=new Te(this,p,t,r,(V=(D=e.externalLayouts)==null?void 0:D.length)!=null?V:0,c);return this._pipelineExecutors.push(f),f}makeComputePipeline(e){var i,m,p,c,f,y,x;let t=new k(this,e.code,(i=e.workgroupSize)!=null?i:[1]).build({bindingGroup:((m=e.externalLayouts)!=null?m:[]).length}),r=this.device.createShaderModule({code:t.code}),s=this.device.createPipelineLayout({label:(p=e.label)!=null?p:"",bindGroupLayouts:[...(c=e.externalLayouts)!=null?c:[],t.bindGroupLayout]}),l=this.device.createComputePipeline({label:(f=e.label)!=null?f:"",layout:s,compute:{module:r}}),g=new ye(this,l,[t],(x=(y=e.externalLayouts)==null?void 0:y.length)!=null?x:0);return this._pipelineExecutors.push(g),g}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}},q=class{constructor(e,t,r,s,l){this._runtime=e;this.pipeline=t;this.programs=r;this.externalLayoutCount=s;this.label=l}},Te=class extends q{constructor(t,r,s,l,g,i){super(t,r,[s,l],g);_chunk7HTWRNOHcjs.d.call(void 0, this,"_vertexProgram");_chunk7HTWRNOHcjs.d.call(void 0, this,"_fragmentProgram");_chunk7HTWRNOHcjs.d.call(void 0, this,"_usedVertexBuffers");this._vertexProgram=s,this._fragmentProgram=l,this._usedVertexBuffers=new Set(i)}execute(t){var f,y,x;let c=t,{vertexCount:r,instanceCount:s,firstVertex:l,firstInstance:g,externalBindGroups:i}=c,m=_chunk7HTWRNOHcjs.c.call(void 0, c,["vertexCount","instanceCount","firstVertex","firstInstance","externalBindGroups"]);if(((f=i==null?void 0:i.length)!=null?f:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(y=i==null?void 0:i.length)!=null?y:0}`);let p=this._runtime.commandEncoder.beginRenderPass(_chunk7HTWRNOHcjs.b.call(void 0, _chunk7HTWRNOHcjs.a.call(void 0, {},m),{label:(x=this.label)!=null?x:""}));p.setPipeline(this.pipeline),(i!=null?i:[]).forEach((d,W)=>p.setBindGroup(W,d)),p.setBindGroup((i!=null?i:[]).length,this._vertexProgram.bindGroup),p.setBindGroup((i!=null?i:[]).length+1,this._fragmentProgram.bindGroup);for(let[d,W]of this._usedVertexBuffers)p.setVertexBuffer(W,d);p.draw(r,s,l,g),p.end()}},ye=class extends q{execute(e){var l,g,i;let{workgroups:t=[1,1],externalBindGroups:r}=e!=null?e:{};if(((l=r==null?void 0:r.length)!=null?l:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(g=r==null?void 0:r.length)!=null?g:0}`);let s=this._runtime.commandEncoder.beginComputePass({label:(i=this.label)!=null?i:""});s.setPipeline(this.pipeline),(r!=null?r:[]).forEach((m,p)=>s.setBindGroup(p,m)),this.programs.forEach((m,p)=>s.setBindGroup((r!=null?r:[]).length+p,m.bindGroup)),s.dispatchWorkgroups(...t),s.end()}};async function ut(n){if(n instanceof GPUDevice)return new z(n);if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let e=await navigator.gpu.requestAdapter(n==null?void 0:n.adapter);if(!e)throw new Error("Could not find a compatible GPU");return new z(await e.requestDevice(n==null?void 0:n.device))}exports.MissingSlotValueError = _chunk7HTWRNOHcjs.f; exports.ProgramBuilder = _; exports.RandomNameRegistry = b; exports.RecursiveDataTypeError = _chunk7HTWRNOHcjs.g; exports.ResolutionError = _chunk7HTWRNOHcjs.e; exports.StrictNameRegistry = X; exports.builtin = _chunk7HTWRNOHcjs.L; exports.createRuntime = ut; exports.deriveVertexFormat = Ge; exports.getBuiltinInfo = _chunk7HTWRNOHcjs.M; exports.getUsedBuiltinsNamed = _chunk7HTWRNOHcjs.N; exports.isDepthTextureType = _chunk7HTWRNOHcjs.m; exports.isExternalTextureType = _chunk7HTWRNOHcjs.o; exports.isPointer = _chunk7HTWRNOHcjs.p; exports.isResolvable = _chunk7HTWRNOHcjs.h; exports.isSamplerType = _chunk7HTWRNOHcjs.k; exports.isSlot = _chunk7HTWRNOHcjs.j; exports.isStorageTextureType = _chunk7HTWRNOHcjs.n; exports.isTypedTextureType = _chunk7HTWRNOHcjs.l; exports.isWgsl = _chunk7HTWRNOHcjs.i; exports.wgsl = it;
29
49
  //# sourceMappingURL=index.cjs.map