typegpu 0.0.0-alpha.5 → 0.0.0-alpha.7
Sign up to get free protection for your applications and to get access to all the features.
- package/chunk-34O2K2PT.js +2 -0
- package/chunk-34O2K2PT.js.map +1 -0
- package/chunk-T3YCU4G4.cjs +2 -0
- package/chunk-T3YCU4G4.cjs.map +1 -0
- package/data/index.cjs +7 -1
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +38 -8
- package/data/index.d.ts +38 -8
- package/data/index.js +7 -1
- package/data/index.js.map +1 -1
- package/index.cjs +1 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +28 -32
- package/index.d.ts +28 -32
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/{types-DU0c7BuW.d.cts → types-D2gslu2F.d.cts} +5 -10
- package/{types-DU0c7BuW.d.ts → types-D2gslu2F.d.ts} +5 -10
- package/chunk-337KOXP7.js +0 -2
- package/chunk-337KOXP7.js.map +0 -1
- package/chunk-6WFXH2OR.js +0 -8
- package/chunk-6WFXH2OR.js.map +0 -1
- package/chunk-G6QA55EY.cjs +0 -8
- package/chunk-G6QA55EY.cjs.map +0 -1
- package/chunk-S55XYV7U.cjs +0 -2
- package/chunk-S55XYV7U.cjs.map +0 -1
- package/macro/index.cjs +0 -8
- package/macro/index.cjs.map +0 -1
- package/macro/index.d.cts +0 -7
- package/macro/index.d.ts +0 -7
- package/macro/index.js +0 -8
- package/macro/index.js.map +0 -1
@@ -0,0 +1,2 @@
|
|
1
|
+
var F=Object.defineProperty;var z=(e,n)=>(n=Symbol[e])?n:Symbol.for("Symbol."+e);var B=(e,n,t)=>n in e?F(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var M=(e,n)=>{for(var t in n)F(e,t,{get:n[t],enumerable:!0})};var a=(e,n,t)=>(B(e,typeof n!="symbol"?n+"":n,t),t);var O=function(e,n){this[0]=e,this[1]=n};var j=e=>{var n=e[z("asyncIterator")],t=!1,r,u={};return n==null?(n=e[z("iterator")](),r=i=>u[i]=s=>n[i](s)):(n=n.call(e),r=i=>u[i]=s=>{if(t){if(t=!1,i==="throw")throw s;return s}return t=!0,{done:!1,value:new O(new Promise(R=>{var I=n[i](s);if(!(I instanceof Object))throw TypeError("Object expected");R(I)}),1)}}),u[z("iterator")]=()=>u,r("next"),"throw"in n?r("throw"):u.throw=i=>{throw i},"return"in n&&r("return"),u};function C(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function W(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}var g=class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}};import{Measurer as E,f32 as D,i32 as V,u32 as P}from"typed-binary";var v=class extends Function{constructor(){super("...args","return this._bound._call(...args)");a(this,"_bound");return this._bound=this.bind(this),this._bound}};function U(e,n){let t="size"in e?e.size:e.currentByteOffset,r=n-1,u=t&r;"skipBytes"in e?e.skipBytes(n-u&r):e.add(n-u&r)}var f=U;var o=class extends v{constructor({unitType:t,byteAlignment:r,length:u,label:i,make:s,makeFromScalar:R}){super();a(this,"__unwrapped");a(this,"unitType");a(this,"byteAlignment");a(this,"length");a(this,"size");a(this,"label");a(this,"make");a(this,"makeFromScalar");this.unitType=t,this.byteAlignment=r,this.length=u,this.size=u*4,this.label=i,this.make=s,this.makeFromScalar=R}get expressionCode(){return this.label}_call(...t){var u;let r=t;if(r.length<=1)return this.makeFromScalar((u=r[0])!=null?u:0);if(r.length===this.length)return this.make(...r);throw new Error(`'${this.label}' constructor called with invalid number of arguments.`)}resolveReferences(t){throw new g}write(t,r){f(t,this.byteAlignment);for(let u of r)this.unitType.write(t,u)}read(t){return f(t,this.byteAlignment),this.make(...Array.from({length:this.length}).map(r=>this.unitType.read(t)))}measure(t,r=new E){return f(r,this.byteAlignment),r.add(this.size)}seekProperty(t,r){throw new Error("Method not implemented.")}resolve(){return this.label}},w=class{get xx(){return this.make2(this.x,this.x)}get xy(){return this.make2(this.x,this.y)}get yx(){return this.make2(this.y,this.x)}get yy(){return this.make2(this.y,this.y)}},m=class extends w{constructor(t,r){super();this.x=t;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},c=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(t,r){return new e(t,r)}},p=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(t,r){return new e(t,r)}},l=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(t,r){return new e(t,r)}},k=class extends w{},T=class extends k{constructor(t,r,u){super();this.x=t;this.y=r;this.z=u}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},y=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(t,r){return new c(t,r)}make3(t,r,u){return new e(t,r,u)}},b=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(t,r){return new p(t,r)}make3(t,r,u){return new e(t,r,u)}},d=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(t,r){return new l(t,r)}make3(t,r,u){return new e(t,r,u)}},A=class extends k{},x=class extends A{constructor(t,r,u,i){super();this.x=t;this.y=r;this.z=u;this.w=i}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},h=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(t,r){return new c(t,r)}make3(t,r,u){return new y(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},S=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(t,r){return new p(t,r)}make3(t,r,u){return new b(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},_=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(t,r){return new l(t,r)}make3(t,r,u){return new d(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},Y=new o({unitType:D,byteAlignment:8,length:2,label:"vec2f",make:(e,n)=>new c(e,n),makeFromScalar:e=>new c(e,e)}),Z=new o({unitType:V,byteAlignment:8,length:2,label:"vec2i",make:(e,n)=>new p(e,n),makeFromScalar:e=>new p(e,e)}),ee=new o({unitType:P,byteAlignment:8,length:2,label:"vec2u",make:(e,n)=>new l(e,n),makeFromScalar:e=>new l(e,e)}),te=new o({unitType:D,byteAlignment:16,length:3,label:"vec3f",make:(e,n,t)=>new y(e,n,t),makeFromScalar:e=>new y(e,e,e)}),re=new o({unitType:V,byteAlignment:16,length:3,label:"vec3i",make:(e,n,t)=>new b(e,n,t),makeFromScalar:e=>new b(e,e,e)}),ne=new o({unitType:P,byteAlignment:16,length:3,label:"vec3u",make:(e,n,t)=>new d(e,n,t),makeFromScalar:e=>new d(e,e,e)}),ue=new o({unitType:D,byteAlignment:16,length:4,label:"vec4f",make:(e,n,t,r)=>new h(e,n,t,r),makeFromScalar:e=>new h(e,e,e,e)}),ae=new o({unitType:V,byteAlignment:16,length:4,label:"vec4i",make:(e,n,t,r)=>new S(e,n,t,r),makeFromScalar:e=>new S(e,e,e,e)}),ie=new o({unitType:P,byteAlignment:16,length:4,label:"vec4u",make:(e,n,t,r)=>new _(e,n,t,r),makeFromScalar:e=>new _(e,e,e,e)});var ce=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};export{M as a,a as b,j as c,C as d,W as e,ce as f,g,v as h,f as i,Y as j,Z as k,ee as l,te as m,re as n,ne as o,ue as p,ae as q,ie as r};
|
2
|
+
//# sourceMappingURL=chunk-34O2K2PT.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts","../src/callable.ts","../src/data/alignIO.ts","../src/mathUtils.ts"],"sourcesContent":["import type { ISchema, Parsed } from 'typed-binary';\nimport type { F32, I32, U32, Vec4f, Vec4i, Vec4u } from './data';\nimport type { Builtin } from './wgslBuiltin';\nimport type { TgpuIdentifier } from './wgslIdentifier';\nimport type { TgpuPlum } from './wgslPlum';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n /**\n * Slots that were used by items resolved by this context.\n */\n readonly usedSlots: Iterable<TgpuSlot<unknown>>;\n\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: Builtin): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\n/**\n * Can be assigned a name. Not to be confused with\n * being able to HAVE a name.\n */\nexport interface TgpuNamable {\n $name(label?: string | undefined): this;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isNamable(value: unknown): value is TgpuNamable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n '$name' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuAllocatable<TData extends AnyTgpuData = AnyTgpuData> {\n /**\n * The data type this allocatable was constructed with.\n * It informs the size and format of data in both JS and\n * binary.\n */\n readonly dataType: TData;\n readonly initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n readonly flags: GPUBufferUsageFlags;\n}\n\nexport function isAllocatable(value: unknown): value is TgpuAllocatable {\n return (\n !!value &&\n typeof value === 'object' &&\n 'dataType' in value &&\n 'flags' in value\n );\n}\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuAllocatable<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\nexport type StorageTextureAccess = 'read' | 'write' | 'read_write';\n\nexport type StorageTextureParams = {\n type: TgpuStorageTextureType;\n access: StorageTextureAccess;\n descriptor?: GPUTextureViewDescriptor;\n};\nexport type SampledTextureParams = {\n type: TgpuTypedTextureType;\n dataType: TextureScalarFormat;\n descriptor?: GPUTextureViewDescriptor;\n};\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type TextureScalarFormat = U32 | I32 | F32;\nexport type TexelFormat = Vec4u | Vec4i | Vec4f;\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n","import type { TgpuResolvable, TgpuSlot } from './types';\n\n/**\n * An error that happens during resolution of WGSL code.\n * Contains a trace of all ancestor resolvables in\n * which this error originated.\n *\n * @category Errors\n */\nexport class ResolutionError extends Error {\n constructor(\n public readonly cause: unknown,\n public readonly trace: TgpuResolvable[],\n ) {\n let entries = trace.map((ancestor) => `- ${ancestor}`);\n\n // Showing only the root and leaf nodes.\n if (entries.length > 20) {\n entries = [...entries.slice(0, 11), '...', ...entries.slice(-10)];\n }\n\n super(`Resolution of the following tree failed: \\n${entries.join('\\n')}`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ResolutionError.prototype);\n }\n\n appendToTrace(ancestor: TgpuResolvable): ResolutionError {\n const newTrace = [ancestor, ...this.trace];\n\n return new ResolutionError(this.cause, newTrace);\n }\n}\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: TgpuSlot<unknown>) {\n super(`Missing value for '${slot}'`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingSlotValueError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { CallableImpl } from '../callable';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<T> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => T;\n makeFromScalar: (value: number) => T;\n}\n\nclass VecSchemaImpl<T extends vecBase>\n extends CallableImpl<number[], T>\n implements TgpuData<T>\n{\n readonly __unwrapped!: T; // type-token, not available at runtime\n\n readonly unitType: ISchema<number>;\n readonly byteAlignment;\n readonly length;\n readonly size;\n readonly label;\n public get expressionCode() {\n return this.label;\n }\n readonly make: (...args: number[]) => T;\n readonly makeFromScalar: (value: number) => T;\n\n constructor({\n unitType,\n byteAlignment,\n length,\n label,\n make,\n makeFromScalar,\n }: VecSchemaOptions<T>) {\n super();\n this.unitType = unitType;\n this.byteAlignment = byteAlignment;\n this.length = length;\n this.size = length * 4;\n this.label = label;\n this.make = make;\n this.makeFromScalar = makeFromScalar;\n }\n\n _call(...args: number[]): T {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (values.length <= 1) {\n return this.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === this.length) {\n return this.make(...values);\n }\n\n throw new Error(\n `'${this.label}' constructor called with invalid number of arguments.`,\n );\n }\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<T>): void {\n alignIO(output, this.byteAlignment);\n for (const element of value) {\n this.unitType.write(output, element);\n }\n }\n\n read(input: ISerialInput): Parsed<T> {\n alignIO(input, this.byteAlignment);\n return this.make(\n ...Array.from({ length: this.length }).map((_) =>\n this.unitType.read(input),\n ),\n ) as Parsed<T>;\n }\n\n measure(\n _value: Parsed<T> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n }\n\n seekProperty(\n reference: Parsed<T> | MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n }\n\n resolve(): string {\n return this.label;\n }\n}\n\nabstract class Swizzle2Impl<T2> {\n abstract make2(x: number, y: number): T2;\n\n abstract readonly x: number;\n abstract readonly y: number;\n\n get xx(): T2 {\n return this.make2(this.x, this.x);\n }\n\n get xy(): T2 {\n return this.make2(this.x, this.y);\n }\n\n get yx(): T2 {\n return this.make2(this.y, this.x);\n }\n\n get yy(): T2 {\n return this.make2(this.y, this.y);\n }\n}\n\nabstract class vec2Impl<T2> extends Swizzle2Impl<T2> implements vec2 {\n constructor(\n public x: number,\n public y: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\n\nclass vec2fImpl extends vec2Impl<vec2f> implements vec2f {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n}\n\nclass vec2iImpl extends vec2Impl<vec2i> implements vec2i {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n}\n\nclass vec2uImpl extends vec2Impl<vec2u> implements vec2u {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n}\n\nabstract class Swizzle3Impl<T2, T3> extends Swizzle2Impl<T2> {\n abstract make3(x: number, y: number, z: number): T3;\n\n abstract readonly z: number;\n}\n\nabstract class vec3Impl<T2, T3> extends Swizzle3Impl<T2, T3> implements vec3 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\n\nclass vec3fImpl extends vec3Impl<vec2f, vec3f> implements vec3f {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n}\n\nclass vec3iImpl extends vec3Impl<vec2i, vec3i> implements vec3i {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n}\n\nclass vec3uImpl extends vec3Impl<vec2u, vec3u> implements vec3u {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n}\n\nabstract class Swizzle4Impl<T2, T3, T4> extends Swizzle3Impl<T2, T3> {\n abstract make4(x: number, y: number, z: number, w: number): T4;\n\n abstract readonly w: number;\n}\n\nabstract class vec4Impl<T2, T3, T4>\n extends Swizzle4Impl<T2, T3, T4>\n implements vec4\n{\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n}\n\nclass vec4fImpl extends vec4Impl<vec2f, vec3f, vec4f> implements vec4f {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w);\n }\n}\n\nclass vec4iImpl extends vec4Impl<vec2i, vec3i, vec4i> implements vec4i {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w);\n }\n}\n\nclass vec4uImpl extends vec4Impl<vec2u, vec3u, vec4u> implements vec4u {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w);\n }\n}\n\ninterface Swizzle2<T2> {\n readonly xx: T2; // TODO: Create setter\n readonly xy: T2; // TODO: Create setter\n readonly yx: T2; // TODO: Create setter\n readonly yy: T2; // TODO: Create setter\n}\n\ninterface Swizzle3<T2, T3> extends Swizzle2<T2> {\n // TODO: Implement\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3> {\n // TODO: Implement\n}\n\ninterface vec2 {\n x: number;\n y: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec3 {\n x: number;\n y: number;\n z: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\n// ----------\n// Public API\n// ----------\n\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\nexport interface vecBase {\n kind: VecKind;\n [Symbol.iterator](): Iterator<number>;\n}\n\nexport interface vec2f extends vec2, Swizzle2<vec2f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\nexport interface vec2i extends vec2, Swizzle2<vec2i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\nexport interface vec2u extends vec2, Swizzle2<vec2u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\nexport type Vec2f = TgpuData<vec2f> &\n ((x: number, y: number) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\n\nexport const vec2f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) => new vec2fImpl(x, y),\n makeFromScalar: (x) => new vec2fImpl(x, x),\n}) as unknown as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) => new vec2iImpl(x, y),\n makeFromScalar: (x) => new vec2iImpl(x, x),\n}) as unknown as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) => new vec2uImpl(x, y),\n makeFromScalar: (x) => new vec2uImpl(x, x),\n}) as unknown as Vec2u;\n\nexport type Vec3f = TgpuData<vec3f> &\n ((x: number, y: number, z: number) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\n\nexport const vec3f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) => new vec3fImpl(x, y, z),\n makeFromScalar: (x) => new vec3fImpl(x, x, x),\n}) as unknown as Vec3f;\n\nexport type Vec3i = TgpuData<vec3i> &\n ((x: number, y: number, z: number) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\n\nexport const vec3i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) => new vec3iImpl(x, y, z),\n makeFromScalar: (x) => new vec3iImpl(x, x, x),\n}) as unknown as Vec3i;\n\nexport type Vec3u = TgpuData<vec3u> &\n ((x: number, y: number, z: number) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\n\nexport const vec3u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) => new vec3uImpl(x, y, z),\n makeFromScalar: (x) => new vec3uImpl(x, x, x),\n}) as unknown as Vec3u;\n\nexport type Vec4f = TgpuData<vec4f> &\n ((x: number, y: number, z: number, w: number) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\n\nexport const vec4f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) => new vec4fImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4fImpl(x, x, x, x),\n}) as unknown as Vec4f;\n\nexport type Vec4i = TgpuData<vec4i> &\n ((x: number, y: number, z: number, w: number) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\n\nexport const vec4i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) => new vec4iImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4iImpl(x, x, x, x),\n}) as unknown as Vec4i;\n\nexport type Vec4u = TgpuData<vec4u> &\n ((x: number, y: number, z: number, w: number) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\n\nexport const vec4u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) => new vec4uImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4uImpl(x, x, x, x),\n}) as unknown as Vec4u;\n","export abstract class CallableImpl<\n TArgs extends [...unknown[]],\n TReturn,\n> extends Function {\n _bound: CallableImpl<TArgs, TReturn>;\n\n constructor() {\n // We create a new Function object using `super`, with a `this` reference\n // to itself (the Function object) provided by binding it to `this`,\n // then returning the bound Function object (which is a wrapper around the\n // the original `this`/Function object). We then also have to store\n // a reference to the bound Function object, as `_bound` on the unbound `this`,\n // so the bound function has access to the new bound object.\n // Pro: Works well, doesn't rely on deprecated features.\n // Con: A little convoluted, and requires wrapping `this` in a bound object.\n\n super('...args', 'return this._bound._call(...args)');\n // Or without the spread/rest operator:\n // super('return this._bound._call.apply(this._bound, arguments)')\n this._bound = this.bind(this);\n\n // biome-ignore lint/correctness/noConstructorReturn: <quirks of creating a custom callable>\n return this._bound;\n }\n\n abstract _call(...args: TArgs): TReturn;\n}\n\nexport type Callable<TArgs extends [...unknown[]], TReturn> = (\n ...args: TArgs\n) => TReturn;\n\nexport type AsCallable<T, TArgs extends [...unknown[]], TReturn> = T &\n Callable<TArgs, TReturn>;\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","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n"],"mappings":"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","names":["isResolvable","value","isGPUBuffer","value","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","CallableImpl","__publicField","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","VecSchemaImpl","CallableImpl","unitType","byteAlignment","length","label","make","makeFromScalar","__publicField","args","_a","values","ctx","RecursiveDataTypeError","output","value","alignIO_default","element","input","_","_value","measurer","Measurer","reference","prop","Swizzle2Impl","vec2Impl","x","y","vec2fImpl","_vec2fImpl","vec2iImpl","_vec2iImpl","vec2uImpl","_vec2uImpl","Swizzle3Impl","vec3Impl","z","vec3fImpl","_vec3fImpl","vec3iImpl","_vec3iImpl","vec3uImpl","_vec3uImpl","Swizzle4Impl","vec4Impl","w","vec4fImpl","_vec4fImpl","vec4iImpl","_vec4iImpl","vec4uImpl","_vec4uImpl","vec2f","f32","vec2i","i32","vec2u","u32","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","roundUp","value","modulo","bitMask","invBitMask"]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var F=Object.defineProperty;var z=(e,n)=>(n=Symbol[e])?n:Symbol.for("Symbol."+e);var B=(e,n,t)=>n in e?F(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var M=(e,n)=>{for(var t in n)F(e,t,{get:n[t],enumerable:!0})};var a=(e,n,t)=>(B(e,typeof n!="symbol"?n+"":n,t),t);var O=function(e,n){this[0]=e,this[1]=n};var j=e=>{var n=e[z("asyncIterator")],t=!1,r,u={};return n==null?(n=e[z("iterator")](),r=i=>u[i]=s=>n[i](s)):(n=n.call(e),r=i=>u[i]=s=>{if(t){if(t=!1,i==="throw")throw s;return s}return t=!0,{done:!1,value:new O(new Promise(R=>{var I=n[i](s);if(!(I instanceof Object))throw TypeError("Object expected");R(I)}),1)}}),u[z("iterator")]=()=>u,r("next"),"throw"in n?r("throw"):u.throw=i=>{throw i},"return"in n&&r("return"),u};function C(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function W(e){return!!e&&typeof e=="object"&&"getMappedRange"in e&&"mapAsync"in e}var g=class e extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,e.prototype)}};var _typedbinary = require('typed-binary');var v=class extends Function{constructor(){super("...args","return this._bound._call(...args)");a(this,"_bound");return this._bound=this.bind(this),this._bound}};function U(e,n){let t="size"in e?e.size:e.currentByteOffset,r=n-1,u=t&r;"skipBytes"in e?e.skipBytes(n-u&r):e.add(n-u&r)}var f=U;var o=class extends v{constructor({unitType:t,byteAlignment:r,length:u,label:i,make:s,makeFromScalar:R}){super();a(this,"__unwrapped");a(this,"unitType");a(this,"byteAlignment");a(this,"length");a(this,"size");a(this,"label");a(this,"make");a(this,"makeFromScalar");this.unitType=t,this.byteAlignment=r,this.length=u,this.size=u*4,this.label=i,this.make=s,this.makeFromScalar=R}get expressionCode(){return this.label}_call(...t){var u;let r=t;if(r.length<=1)return this.makeFromScalar((u=r[0])!=null?u:0);if(r.length===this.length)return this.make(...r);throw new Error(`'${this.label}' constructor called with invalid number of arguments.`)}resolveReferences(t){throw new g}write(t,r){f(t,this.byteAlignment);for(let u of r)this.unitType.write(t,u)}read(t){return f(t,this.byteAlignment),this.make(...Array.from({length:this.length}).map(r=>this.unitType.read(t)))}measure(t,r=new _typedbinary.Measurer){return f(r,this.byteAlignment),r.add(this.size)}seekProperty(t,r){throw new Error("Method not implemented.")}resolve(){return this.label}},w=class{get xx(){return this.make2(this.x,this.x)}get xy(){return this.make2(this.x,this.y)}get yx(){return this.make2(this.y,this.x)}get yy(){return this.make2(this.y,this.y)}},m=class extends w{constructor(t,r){super();this.x=t;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},c=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2f")}make2(t,r){return new e(t,r)}},p=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2i")}make2(t,r){return new e(t,r)}},l=class e extends m{constructor(){super(...arguments);a(this,"kind","vec2u")}make2(t,r){return new e(t,r)}},k=class extends w{},T=class extends k{constructor(t,r,u){super();this.x=t;this.y=r;this.z=u}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},y=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3f")}make2(t,r){return new c(t,r)}make3(t,r,u){return new e(t,r,u)}},b=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3i")}make2(t,r){return new p(t,r)}make3(t,r,u){return new e(t,r,u)}},d=class e extends T{constructor(){super(...arguments);a(this,"kind","vec3u")}make2(t,r){return new l(t,r)}make3(t,r,u){return new e(t,r,u)}},A=class extends k{},x=class extends A{constructor(t,r,u,i){super();this.x=t;this.y=r;this.z=u;this.w=i}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},h=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4f")}make2(t,r){return new c(t,r)}make3(t,r,u){return new y(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},S=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4i")}make2(t,r){return new p(t,r)}make3(t,r,u){return new b(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},_=class e extends x{constructor(){super(...arguments);a(this,"kind","vec4u")}make2(t,r){return new l(t,r)}make3(t,r,u){return new d(t,r,u)}make4(t,r,u,i){return new e(t,r,u,i)}},Y= exports.j =new o({unitType:_typedbinary.f32,byteAlignment:8,length:2,label:"vec2f",make:(e,n)=>new c(e,n),makeFromScalar:e=>new c(e,e)}),Z= exports.k =new o({unitType:_typedbinary.i32,byteAlignment:8,length:2,label:"vec2i",make:(e,n)=>new p(e,n),makeFromScalar:e=>new p(e,e)}),ee= exports.l =new o({unitType:_typedbinary.u32,byteAlignment:8,length:2,label:"vec2u",make:(e,n)=>new l(e,n),makeFromScalar:e=>new l(e,e)}),te= exports.m =new o({unitType:_typedbinary.f32,byteAlignment:16,length:3,label:"vec3f",make:(e,n,t)=>new y(e,n,t),makeFromScalar:e=>new y(e,e,e)}),re= exports.n =new o({unitType:_typedbinary.i32,byteAlignment:16,length:3,label:"vec3i",make:(e,n,t)=>new b(e,n,t),makeFromScalar:e=>new b(e,e,e)}),ne= exports.o =new o({unitType:_typedbinary.u32,byteAlignment:16,length:3,label:"vec3u",make:(e,n,t)=>new d(e,n,t),makeFromScalar:e=>new d(e,e,e)}),ue= exports.p =new o({unitType:_typedbinary.f32,byteAlignment:16,length:4,label:"vec4f",make:(e,n,t,r)=>new h(e,n,t,r),makeFromScalar:e=>new h(e,e,e,e)}),ae= exports.q =new o({unitType:_typedbinary.i32,byteAlignment:16,length:4,label:"vec4i",make:(e,n,t,r)=>new S(e,n,t,r),makeFromScalar:e=>new S(e,e,e,e)}),ie= exports.r =new o({unitType:_typedbinary.u32,byteAlignment:16,length:4,label:"vec4u",make:(e,n,t,r)=>new _(e,n,t,r),makeFromScalar:e=>new _(e,e,e,e)});var ce=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};exports.a = M; exports.b = a; exports.c = j; exports.d = C; exports.e = W; exports.f = ce; exports.g = g; exports.h = v; exports.i = f; exports.j = Y; exports.k = Z; exports.l = ee; exports.m = te; exports.n = re; exports.o = ne; exports.p = ue; exports.q = ae; exports.r = ie;
|
2
|
+
//# sourceMappingURL=chunk-T3YCU4G4.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts","../src/callable.ts","../src/data/alignIO.ts","../src/mathUtils.ts"],"names":["isResolvable","value","isGPUBuffer","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","CallableImpl","__publicField","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","VecSchemaImpl","unitType","byteAlignment","length","label","make","makeFromScalar","args","_a","values","ctx","output","element","input","_","_value","measurer","reference","prop","Swizzle2Impl","vec2Impl","x","y","vec2fImpl","_vec2fImpl","vec2iImpl","_vec2iImpl","vec2uImpl","_vec2uImpl","Swizzle3Impl","vec3Impl","z","vec3fImpl","_vec3fImpl","vec3iImpl","_vec3iImpl","vec3uImpl","_vec3uImpl","Swizzle4Impl","vec4Impl","w","vec4fImpl","_vec4fImpl","vec4iImpl","_vec4iImpl","vec4uImpl","_vec4uImpl","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","roundUp","modulo","invBitMask"],"mappings":"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","sourcesContent":["import type { ISchema, Parsed } from 'typed-binary';\nimport type { F32, I32, U32, Vec4f, Vec4i, Vec4u } from './data';\nimport type { Builtin } from './wgslBuiltin';\nimport type { TgpuIdentifier } from './wgslIdentifier';\nimport type { TgpuPlum } from './wgslPlum';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n /**\n * Slots that were used by items resolved by this context.\n */\n readonly usedSlots: Iterable<TgpuSlot<unknown>>;\n\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: Builtin): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\n/**\n * Can be assigned a name. Not to be confused with\n * being able to HAVE a name.\n */\nexport interface TgpuNamable {\n $name(label?: string | undefined): this;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isNamable(value: unknown): value is TgpuNamable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n '$name' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuAllocatable<TData extends AnyTgpuData = AnyTgpuData> {\n /**\n * The data type this allocatable was constructed with.\n * It informs the size and format of data in both JS and\n * binary.\n */\n readonly dataType: TData;\n readonly initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n readonly flags: GPUBufferUsageFlags;\n}\n\nexport function isAllocatable(value: unknown): value is TgpuAllocatable {\n return (\n !!value &&\n typeof value === 'object' &&\n 'dataType' in value &&\n 'flags' in value\n );\n}\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuAllocatable<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\nexport type StorageTextureAccess = 'read' | 'write' | 'read_write';\n\nexport type StorageTextureParams = {\n type: TgpuStorageTextureType;\n access: StorageTextureAccess;\n descriptor?: GPUTextureViewDescriptor;\n};\nexport type SampledTextureParams = {\n type: TgpuTypedTextureType;\n dataType: TextureScalarFormat;\n descriptor?: GPUTextureViewDescriptor;\n};\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type TextureScalarFormat = U32 | I32 | F32;\nexport type TexelFormat = Vec4u | Vec4i | Vec4f;\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n","import type { TgpuResolvable, TgpuSlot } from './types';\n\n/**\n * An error that happens during resolution of WGSL code.\n * Contains a trace of all ancestor resolvables in\n * which this error originated.\n *\n * @category Errors\n */\nexport class ResolutionError extends Error {\n constructor(\n public readonly cause: unknown,\n public readonly trace: TgpuResolvable[],\n ) {\n let entries = trace.map((ancestor) => `- ${ancestor}`);\n\n // Showing only the root and leaf nodes.\n if (entries.length > 20) {\n entries = [...entries.slice(0, 11), '...', ...entries.slice(-10)];\n }\n\n super(`Resolution of the following tree failed: \\n${entries.join('\\n')}`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ResolutionError.prototype);\n }\n\n appendToTrace(ancestor: TgpuResolvable): ResolutionError {\n const newTrace = [ancestor, ...this.trace];\n\n return new ResolutionError(this.cause, newTrace);\n }\n}\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: TgpuSlot<unknown>) {\n super(`Missing value for '${slot}'`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingSlotValueError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n","import {\n type IMeasurer,\n type IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { CallableImpl } from '../callable';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<T> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => T;\n makeFromScalar: (value: number) => T;\n}\n\nclass VecSchemaImpl<T extends vecBase>\n extends CallableImpl<number[], T>\n implements TgpuData<T>\n{\n readonly __unwrapped!: T; // type-token, not available at runtime\n\n readonly unitType: ISchema<number>;\n readonly byteAlignment;\n readonly length;\n readonly size;\n readonly label;\n public get expressionCode() {\n return this.label;\n }\n readonly make: (...args: number[]) => T;\n readonly makeFromScalar: (value: number) => T;\n\n constructor({\n unitType,\n byteAlignment,\n length,\n label,\n make,\n makeFromScalar,\n }: VecSchemaOptions<T>) {\n super();\n this.unitType = unitType;\n this.byteAlignment = byteAlignment;\n this.length = length;\n this.size = length * 4;\n this.label = label;\n this.make = make;\n this.makeFromScalar = makeFromScalar;\n }\n\n _call(...args: number[]): T {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (values.length <= 1) {\n return this.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === this.length) {\n return this.make(...values);\n }\n\n throw new Error(\n `'${this.label}' constructor called with invalid number of arguments.`,\n );\n }\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<T>): void {\n alignIO(output, this.byteAlignment);\n for (const element of value) {\n this.unitType.write(output, element);\n }\n }\n\n read(input: ISerialInput): Parsed<T> {\n alignIO(input, this.byteAlignment);\n return this.make(\n ...Array.from({ length: this.length }).map((_) =>\n this.unitType.read(input),\n ),\n ) as Parsed<T>;\n }\n\n measure(\n _value: Parsed<T> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n }\n\n seekProperty(\n reference: Parsed<T> | MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n }\n\n resolve(): string {\n return this.label;\n }\n}\n\nabstract class Swizzle2Impl<T2> {\n abstract make2(x: number, y: number): T2;\n\n abstract readonly x: number;\n abstract readonly y: number;\n\n get xx(): T2 {\n return this.make2(this.x, this.x);\n }\n\n get xy(): T2 {\n return this.make2(this.x, this.y);\n }\n\n get yx(): T2 {\n return this.make2(this.y, this.x);\n }\n\n get yy(): T2 {\n return this.make2(this.y, this.y);\n }\n}\n\nabstract class vec2Impl<T2> extends Swizzle2Impl<T2> implements vec2 {\n constructor(\n public x: number,\n public y: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\n\nclass vec2fImpl extends vec2Impl<vec2f> implements vec2f {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n}\n\nclass vec2iImpl extends vec2Impl<vec2i> implements vec2i {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n}\n\nclass vec2uImpl extends vec2Impl<vec2u> implements vec2u {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n}\n\nabstract class Swizzle3Impl<T2, T3> extends Swizzle2Impl<T2> {\n abstract make3(x: number, y: number, z: number): T3;\n\n abstract readonly z: number;\n}\n\nabstract class vec3Impl<T2, T3> extends Swizzle3Impl<T2, T3> implements vec3 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\n\nclass vec3fImpl extends vec3Impl<vec2f, vec3f> implements vec3f {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n}\n\nclass vec3iImpl extends vec3Impl<vec2i, vec3i> implements vec3i {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n}\n\nclass vec3uImpl extends vec3Impl<vec2u, vec3u> implements vec3u {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n}\n\nabstract class Swizzle4Impl<T2, T3, T4> extends Swizzle3Impl<T2, T3> {\n abstract make4(x: number, y: number, z: number, w: number): T4;\n\n abstract readonly w: number;\n}\n\nabstract class vec4Impl<T2, T3, T4>\n extends Swizzle4Impl<T2, T3, T4>\n implements vec4\n{\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\n ) {\n super();\n }\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n yield this.w;\n }\n}\n\nclass vec4fImpl extends vec4Impl<vec2f, vec3f, vec4f> implements vec4f {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w);\n }\n}\n\nclass vec4iImpl extends vec4Impl<vec2i, vec3i, vec4i> implements vec4i {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w);\n }\n}\n\nclass vec4uImpl extends vec4Impl<vec2u, vec3u, vec4u> implements vec4u {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w);\n }\n}\n\ninterface Swizzle2<T2> {\n readonly xx: T2; // TODO: Create setter\n readonly xy: T2; // TODO: Create setter\n readonly yx: T2; // TODO: Create setter\n readonly yy: T2; // TODO: Create setter\n}\n\ninterface Swizzle3<T2, T3> extends Swizzle2<T2> {\n // TODO: Implement\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3> {\n // TODO: Implement\n}\n\ninterface vec2 {\n x: number;\n y: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec3 {\n x: number;\n y: number;\n z: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\ninterface vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n [Symbol.iterator](): Iterator<number>;\n}\n\n// ----------\n// Public API\n// ----------\n\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\nexport interface vecBase {\n kind: VecKind;\n [Symbol.iterator](): Iterator<number>;\n}\n\nexport interface vec2f extends vec2, Swizzle2<vec2f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\nexport interface vec2i extends vec2, Swizzle2<vec2i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\nexport interface vec2u extends vec2, Swizzle2<vec2u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\nexport type Vec2f = TgpuData<vec2f> &\n ((x: number, y: number) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\n\nexport const vec2f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) => new vec2fImpl(x, y),\n makeFromScalar: (x) => new vec2fImpl(x, x),\n}) as unknown as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) => new vec2iImpl(x, y),\n makeFromScalar: (x) => new vec2iImpl(x, x),\n}) as unknown as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) => new vec2uImpl(x, y),\n makeFromScalar: (x) => new vec2uImpl(x, x),\n}) as unknown as Vec2u;\n\nexport type Vec3f = TgpuData<vec3f> &\n ((x: number, y: number, z: number) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\n\nexport const vec3f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) => new vec3fImpl(x, y, z),\n makeFromScalar: (x) => new vec3fImpl(x, x, x),\n}) as unknown as Vec3f;\n\nexport type Vec3i = TgpuData<vec3i> &\n ((x: number, y: number, z: number) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\n\nexport const vec3i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) => new vec3iImpl(x, y, z),\n makeFromScalar: (x) => new vec3iImpl(x, x, x),\n}) as unknown as Vec3i;\n\nexport type Vec3u = TgpuData<vec3u> &\n ((x: number, y: number, z: number) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\n\nexport const vec3u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) => new vec3uImpl(x, y, z),\n makeFromScalar: (x) => new vec3uImpl(x, x, x),\n}) as unknown as Vec3u;\n\nexport type Vec4f = TgpuData<vec4f> &\n ((x: number, y: number, z: number, w: number) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\n\nexport const vec4f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) => new vec4fImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4fImpl(x, x, x, x),\n}) as unknown as Vec4f;\n\nexport type Vec4i = TgpuData<vec4i> &\n ((x: number, y: number, z: number, w: number) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\n\nexport const vec4i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) => new vec4iImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4iImpl(x, x, x, x),\n}) as unknown as Vec4i;\n\nexport type Vec4u = TgpuData<vec4u> &\n ((x: number, y: number, z: number, w: number) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\n\nexport const vec4u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) => new vec4uImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4uImpl(x, x, x, x),\n}) as unknown as Vec4u;\n","export abstract class CallableImpl<\n TArgs extends [...unknown[]],\n TReturn,\n> extends Function {\n _bound: CallableImpl<TArgs, TReturn>;\n\n constructor() {\n // We create a new Function object using `super`, with a `this` reference\n // to itself (the Function object) provided by binding it to `this`,\n // then returning the bound Function object (which is a wrapper around the\n // the original `this`/Function object). We then also have to store\n // a reference to the bound Function object, as `_bound` on the unbound `this`,\n // so the bound function has access to the new bound object.\n // Pro: Works well, doesn't rely on deprecated features.\n // Con: A little convoluted, and requires wrapping `this` in a bound object.\n\n super('...args', 'return this._bound._call(...args)');\n // Or without the spread/rest operator:\n // super('return this._bound._call.apply(this._bound, arguments)')\n this._bound = this.bind(this);\n\n // biome-ignore lint/correctness/noConstructorReturn: <quirks of creating a custom callable>\n return this._bound;\n }\n\n abstract _call(...args: TArgs): TReturn;\n}\n\nexport type Callable<TArgs extends [...unknown[]], TReturn> = (\n ...args: TArgs\n) => TReturn;\n\nexport type AsCallable<T, TArgs extends [...unknown[]], TReturn> = T &\n Callable<TArgs, TReturn>;\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","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n"]}
|
package/data/index.cjs
CHANGED
@@ -1,2 +1,8 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkT3YCU4G4cjs = require('../chunk-T3YCU4G4.cjs');var _typedbinary = require('typed-binary'); var c = _interopRequireWildcard(_typedbinary);var d=class extends _typedbinary.Schema{constructor({schema:e,byteAlignment:t,code:i}){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"expressionCode");_chunkT3YCU4G4cjs.b.call(void 0, this,"_innerSchema");this._innerSchema=e,this.byteAlignment=t,this.expressionCode=i,this.size=this.measure(_typedbinary.MaxValue).size}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this._innerSchema.measure(e,t),t}getUnderlyingTypeString(){if(typeof this.expressionCode=="string")return this.expressionCode;if("elementSchema"in this._innerSchema)return this._innerSchema.elementSchema.getUnderlyingTypeString();throw new Error("Unexpected type used as vertex buffer element")}getUnderlyingType(){return"elementSchema"in this._innerSchema?this._innerSchema.elementSchema.getUnderlyingType():this}resolve(e){return this.expressionCode}};var ge=new d({schema:c.bool,byteAlignment:4,code:"bool"}),he= exports.u32 =new d({schema:c.u32,byteAlignment:4,code:"u32"}),fe= exports.i32 =new d({schema:c.i32,byteAlignment:4,code:"i32"}),xe= exports.f32 =new d({schema:c.f32,byteAlignment:4,code:"f32"});var s=class{constructor(){_chunkT3YCU4G4cjs.b.call(void 0, this,"label")}$name(n){return this.label=n,this}resolve(n){return n.nameFor(this)}toString(){var n;return`id:${(n=this.label)!=null?n:"<unnamed>"}`}};var o={vertexIndex:Symbol("builtin_vertexIndex"),instanceIndex:Symbol("builtin_instanceIndex"),position:Symbol("builtin_position"),clipDistances:Symbol("builtin_clipDistances"),frontFacing:Symbol("builtin_frontFacing"),fragDepth:Symbol("builtin_fragDepth"),sampleIndex:Symbol("builtin_sampleIndex"),sampleMask:Symbol("builtin_sampleMask"),fragment:Symbol("builtin_fragment"),localInvocationId:Symbol("builtin_localInvocationId"),localInvocationIndex:Symbol("builtin_localInvocationIndex"),globalInvocationId:Symbol("builtin_globalInvocationId"),workgroupId:Symbol("builtin_workgroupId"),numWorkgroups:Symbol("builtin_numWorkgroups")},F={[o.vertexIndex]:{symbol:o.vertexIndex,name:"vertex_index",stage:"vertex",direction:"input",identifier:new s().$name("vertex_index")},[o.instanceIndex]:{symbol:o.instanceIndex,name:"instance_index",stage:"vertex",direction:"input",identifier:new s().$name("instance_index")},[o.position]:{symbol:o.position,name:"position",stage:"vertex",direction:"output",identifier:new s().$name("position")},[o.clipDistances]:{symbol:o.clipDistances,name:"clip_distances",stage:"vertex",direction:"output",identifier:new s().$name("clip_distances")},[o.frontFacing]:{symbol:o.frontFacing,name:"front_facing",stage:"fragment",direction:"input",identifier:new s().$name("front_facing")},[o.fragDepth]:{symbol:o.fragDepth,name:"frag_depth",stage:"fragment",direction:"output",identifier:new s().$name("frag_depth")},[o.sampleIndex]:{symbol:o.sampleIndex,name:"sample_index",stage:"fragment",direction:"input",identifier:new s().$name("sample_index")},[o.sampleMask]:{symbol:o.sampleMask,name:"sample_mask",stage:"fragment",direction:"input",identifier:new s().$name("sample_mask")},[o.fragment]:{symbol:o.fragment,name:"fragment",stage:"fragment",direction:"input",identifier:new s().$name("fragment")},[o.localInvocationId]:{symbol:o.localInvocationId,name:"local_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_id")},[o.localInvocationIndex]:{symbol:o.localInvocationIndex,name:"local_invocation_index",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_index")},[o.globalInvocationId]:{symbol:o.globalInvocationId,name:"global_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("global_invocation_id")},[o.workgroupId]:{symbol:o.workgroupId,name:"workgroup_id",stage:"compute",direction:"input",identifier:new s().$name("workgroup_id")},[o.numWorkgroups]:{symbol:o.numWorkgroups,name:"num_workgroups",stage:"compute",direction:"input",identifier:new s().$name("num_workgroups")}};function z(r){let n=F[r];if(!n)throw new Error("Symbol is not a member of builtin");return n}function I(r,...n){let e=r.flatMap((t,i)=>{let u=n[i];return u===void 0?[t]:Array.isArray(u)?[t,...u]:[t,u]});return new S(e)}var S=class{constructor(n){this.segments=n;_chunkT3YCU4G4cjs.b.call(void 0, this,"_label")}get label(){return this._label}$name(n){return this._label=n,this}resolve(n){let e="";for(let t of this.segments)if(_chunkT3YCU4G4cjs.d.call(void 0, t))e+=n.resolve(t);else if(typeof t=="function"){let i=t(u=>n.unwrap(u));e+=n.resolve(i)}else if(typeof t=="symbol"){let i=z(t);n.addBuiltin(i),e+=n.resolve(i.identifier)}else e+=String(t);return e}with(n,e){return new C(this,[n,e])}toString(){var n;return`code:${(n=this._label)!=null?n:"<unnamed>"}`}},C=class r{constructor(n,e){this._innerFn=n;this._slotValuePair=e}get label(){return this._innerFn.label}with(n,e){return new r(this,[n,e])}resolve(n){return n.resolve(this._innerFn,[this._slotValuePair])}toString(){var t,i;let[n,e]=this._slotValuePair;return`code:${(t=this.label)!=null?t:"<unnamed>"}[${(i=n.label)!=null?i:"<unnamed>"}=${e}]`}};function j(r,n){return new y(n,r)}var y=class extends _typedbinary.Schema{constructor(e,t){super();this.data=e;this.byteAlignment=t;_chunkT3YCU4G4cjs.b.call(void 0, this,"size");if(this.size=this.data.size,t<=0)throw new Error(`Custom data alignment must be a positive number, got: ${t}.`);if(Math.log2(t)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${t}.`);if(t%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${t}, expected multiple of: ${this.data.byteAlignment}.`)}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this.data.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this.data.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this.data.measure(e,t)}resolve(e){return this.data.resolve(e)}};function H(r,n){return new T(n,r)}var T=class extends _typedbinary.Schema{constructor(e,t){super();this.data=e;this.size=t;_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");if(this.byteAlignment=this.data.byteAlignment,t<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${t}, expected at least: ${this.data.size}.`);if(t<=0)throw new Error(`Custom data size must be a positive number. Got: ${t}.`)}write(e,t){this.data.write(e,t)}read(e){return this.data.read(e)}measure(e,t=new _typedbinary.Measurer){return t.add(this.size)}resolve(e){return this.data.resolve(e)}};var Ge=r=>new D(r),D=class extends _typedbinary.Schema{constructor(e){super();this._properties=e;_chunkT3YCU4G4cjs.b.call(void 0, this,"_label");_chunkT3YCU4G4cjs.b.call(void 0, this,"_innerSchema");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");this._innerSchema=_typedbinary.object.call(void 0, e),this.byteAlignment=Object.values(e).map(t=>t.byteAlignment).reduce((t,i)=>t>i?t:i),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return _chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),this._innerSchema.measure(e,t),t}resolve(e){let t=new s().$name(this._label);return e.addDeclaration(I`
|
2
|
+
struct ${t} {
|
3
|
+
${Object.entries(this._properties).map(([i,u])=>{var R;return I`${(R=X(u))!=null?R:""}${i}: ${u},\n`})}
|
4
|
+
}
|
5
|
+
`),e.resolve(t)}};function X(r){if(r instanceof y)return`@align(${r.byteAlignment}) `;if(r instanceof T)return`@size(${r.size}) `}var A=class extends _typedbinary.Schema{constructor(e,t){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"elementType");_chunkT3YCU4G4cjs.b.call(void 0, this,"elementCount");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"stride");this.elementType=e,this.elementCount=t,this.byteAlignment=e.byteAlignment,this.stride=_chunkT3YCU4G4cjs.f.call(void 0, this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(e,t){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment);let i=e.currentByteOffset;for(let u=0;u<Math.min(this.elementCount,t.length);u++)this.elementType.write(e,t[u]);e.seekTo(i+this.stride*this.elementCount)}read(e){_chunkT3YCU4G4cjs.i.call(void 0, e,this.byteAlignment);let t=[];for(let i=0;i<this.elementCount;i++)t.push(this.elementType.read(e));return t}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),t.add(this.stride*this.elementCount)}resolve(e){return e.resolve(`
|
6
|
+
array<${e.resolve(this.elementType)}, ${this.elementCount}>
|
7
|
+
`)}},Qe= exports.arrayOf =(r,n)=>new A(r,n);var b=class extends _chunkT3YCU4G4cjs.h{constructor(e){super();_chunkT3YCU4G4cjs.b.call(void 0, this,"__unwrapped");_chunkT3YCU4G4cjs.b.call(void 0, this,"_columnType");_chunkT3YCU4G4cjs.b.call(void 0, this,"_rows");_chunkT3YCU4G4cjs.b.call(void 0, this,"_columns");_chunkT3YCU4G4cjs.b.call(void 0, this,"_makeFromColumnVectors");_chunkT3YCU4G4cjs.b.call(void 0, this,"_makeFromElements");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"label");this._columnType=e.columnType,this._rows=e.rows,this._columns=e.columns,this.label=e.label,this._makeFromColumnVectors=e.makeFromColumnVectors,this._makeFromElements=e.makeFromElements,this.byteAlignment=this._columnType.byteAlignment,this.size=_chunkT3YCU4G4cjs.f.call(void 0, this._columnType.size*this._columns,this.byteAlignment)}_call(...e){let t=[];for(let i of e)typeof i=="number"?t.push(i):t.push(...i);for(let i=t.length;i<this._columns*this._rows;++i)t.push(0);return this._makeFromElements(...t)}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){for(let i of t.columns())this._columnType.write(e,i)}read(e){let t=new Array(this._columns);for(let i=0;i<this._columns;++i)t[i]=this._columnType.read(e);return this._makeFromColumnVectors(...t)}measure(e,t=new _typedbinary.Measurer){return _chunkT3YCU4G4cjs.i.call(void 0, t,this.byteAlignment),t.add(this.size)}seekProperty(){throw new Error("Method not implemented.")}resolve(){return this.label}},U=class{constructor(...n){_chunkT3YCU4G4cjs.b.call(void 0, this,"_columns",new Array(2));this._columns[0]=this.makeColumn(n[0],n[1]),this._columns[1]=this.makeColumn(n[2],n[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},h=class extends U{makeColumn(n,e){return _chunkT3YCU4G4cjs.j.call(void 0, n,e)}},P=class{constructor(...n){_chunkT3YCU4G4cjs.b.call(void 0, this,"_columns",new Array(3));this._columns[0]=this.makeColumn(n[0],n[1],n[2]),this._columns[1]=this.makeColumn(n[3],n[4],n[5]),this._columns[2]=this.makeColumn(n[6],n[7],n[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},f=class extends P{makeColumn(n,e,t){return _chunkT3YCU4G4cjs.m.call(void 0, n,e,t)}},M=class{constructor(...n){_chunkT3YCU4G4cjs.b.call(void 0, this,"_columns",new Array(4));this._columns[0]=this.makeColumn(n[0],n[1],n[2],n[3]),this._columns[1]=this.makeColumn(n[4],n[5],n[6],n[7]),this._columns[2]=this.makeColumn(n[8],n[9],n[10],n[11]),this._columns[3]=this.makeColumn(n[12],n[13],n[14],n[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[0]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[1]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[2]),yield*_chunkT3YCU4G4cjs.c.call(void 0, this._columns[3])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}get 3(){return this._columns[3]}},x=class extends M{makeColumn(n,e,t,i){return _chunkT3YCU4G4cjs.p.call(void 0, n,e,t,i)}},it= exports.mat2x2f =new b({label:"mat2x2f",columnType:_chunkT3YCU4G4cjs.j,rows:2,columns:2,makeFromColumnVectors:(...r)=>new h(...r[0],...r[1]),makeFromElements:(...r)=>new h(...r)}),ot= exports.mat3x3f =new b({label:"mat3x3f",columnType:_chunkT3YCU4G4cjs.m,rows:3,columns:3,makeFromColumnVectors(...[r,n,e]){return new f(...r,...n,...e)},makeFromElements:(...r)=>new f(...r)}),st= exports.mat4x4f =new b({label:"mat4x4f",columnType:_chunkT3YCU4G4cjs.p,rows:4,columns:4,makeFromColumnVectors(...[r,n,e,t]){return new x(...r,...n,...e,...t)},makeFromElements:(...r)=>new x(...r)});function te(r){return{scope:"function",pointsTo:r}}function ae(r){return new k(r)}var k=class extends _typedbinary.Schema{constructor(e){super();this.innerData=e;_chunkT3YCU4G4cjs.b.call(void 0, this,"size");_chunkT3YCU4G4cjs.b.call(void 0, this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new _chunkT3YCU4G4cjs.g}write(e,t){this.innerData.write(e,t)}read(e){return this.innerData.read(e)}measure(e,t=new _typedbinary.Measurer){return this.innerData.measure(e,t)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};exports.SimpleTgpuData = d; exports.TgpuArrayImpl = A; exports.align = j; exports.arrayOf = Qe; exports.atomic = ae; exports.bool = ge; exports.f32 = xe; exports.i32 = fe; exports.mat2x2f = it; exports.mat3x3f = ot; exports.mat4x4f = st; exports.ptr = te; exports.size = H; exports.struct = Ge; exports.u32 = he; exports.vec2f = _chunkT3YCU4G4cjs.j; exports.vec2i = _chunkT3YCU4G4cjs.k; exports.vec2u = _chunkT3YCU4G4cjs.l; exports.vec3f = _chunkT3YCU4G4cjs.m; exports.vec3i = _chunkT3YCU4G4cjs.n; exports.vec3u = _chunkT3YCU4G4cjs.o; exports.vec4f = _chunkT3YCU4G4cjs.p; exports.vec4i = _chunkT3YCU4G4cjs.q; exports.vec4u = _chunkT3YCU4G4cjs.r;
|
2
8
|
//# sourceMappingURL=index.cjs.map
|
package/data/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
1
|
+
{"version":3,"sources":["../../src/data/std140.ts","../../src/data/numeric.ts","../../src/data/struct.ts","../../src/wgslIdentifier.ts","../../src/wgslBuiltin.ts","../../src/wgslCode.ts","../../src/data/align.ts","../../src/data/size.ts","../../src/data/array.ts","../../src/data/matrix.ts","../../src/data/pointer.ts","../../src/data/atomic.ts"],"names":["MaxValue","Measurer","Schema","SimpleTgpuData","schema","byteAlignment","code","__publicField","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","ctx","TB","bool","u32","i32","f32","object","TgpuIdentifier","label","_a","builtin","builtinSymbolToObj","getBuiltinInfo","s","strings","params","segments","string","idx","param","TgpuCodeImpl","isResolvable","result","eventual","slot","BoundTgpuCodeImpl","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b","align","data","TgpuAlignedImpl","size","TgpuSizedImpl","struct","properties","TgpuStructImpl","_properties","prop","a","b","identifier","key","field","getAttribute","TgpuArrayImpl","elementType","count","roundUp","beginning","i","elements","arrayOf","MatSchemaImpl","CallableImpl","options","args","arg","col","columns","c","_value","mat2x2Impl","__yieldStar","mat2x2fImpl","e0","e1","vec2f","mat3x3Impl","mat3x3fImpl","x","y","z","vec3f","mat4x4Impl","mat4x4fImpl","w","vec4f","mat2x2f","mat3x3f","v0","v1","v2","mat4x4f","v3","ptr","pointsTo","atomic","AtomicImpl","innerData"],"mappings":"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","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, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleTgpuData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements TgpuData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n public readonly expressionCode: string;\n\n private readonly _innerSchema: TSchema;\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: string;\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 getUnderlyingTypeString(): string {\n if (typeof this.expressionCode === 'string') {\n return this.expressionCode;\n }\n if ('elementSchema' in this._innerSchema) {\n const underlyingType = this._innerSchema\n .elementSchema as SimpleTgpuData<AnySchema>;\n return underlyingType.getUnderlyingTypeString();\n }\n throw new Error('Unexpected type used as vertex buffer element');\n }\n\n getUnderlyingType(): SimpleTgpuData<AnySchema> {\n if ('elementSchema' in this._innerSchema) {\n const underlyingType = this._innerSchema\n .elementSchema as SimpleTgpuData<AnySchema>;\n return underlyingType.getUnderlyingType();\n }\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.expressionCode;\n }\n}\n","import * as TB from 'typed-binary';\nimport type { TgpuData } from '../types';\nimport { SimpleTgpuData } from './std140';\n\nexport type Bool = TgpuData<boolean>;\nexport const bool: Bool = new SimpleTgpuData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = TgpuData<number>;\nexport const u32: U32 = new SimpleTgpuData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = TgpuData<number>;\nexport const i32: I32 = new SimpleTgpuData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = TgpuData<number>;\nexport const f32: F32 = new SimpleTgpuData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\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 {\n AnyTgpuData,\n ResolutionCtx,\n TgpuData,\n TgpuNamable,\n} from '../types';\nimport { code } from '../wgslCode';\nimport { TgpuIdentifier } from '../wgslIdentifier';\nimport { TgpuAlignedImpl } from './align';\nimport alignIO from './alignIO';\nimport { TgpuSizedImpl } from './size';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuStruct<TProps extends Record<string, AnyTgpuData>>\n extends ISchema<UnwrapRecord<TProps>>,\n TgpuData<UnwrapRecord<TProps>>,\n TgpuNamable {}\n\nexport const struct = <TProps extends Record<string, AnyTgpuData>>(\n properties: TProps,\n): TgpuStruct<TProps> => new TgpuStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuStructImpl<TProps extends Record<string, AnyTgpuData>>\n extends Schema<UnwrapRecord<TProps>>\n implements TgpuData<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 alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new TgpuIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${getAttribute(field) ?? ''}${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n\nfunction getAttribute(field: AnyTgpuData): string | undefined {\n if (field instanceof TgpuAlignedImpl) {\n return `@align(${field.byteAlignment}) `;\n }\n if (field instanceof TgpuSizedImpl) {\n return `@size(${field.size}) `;\n }\n}\n","import type { ResolutionCtx, TgpuNamable, TgpuResolvable } from './types';\n\n/**\n * Helpful when creating new Resolvable types. For internal use.\n */\nexport class TgpuIdentifier implements TgpuResolvable, TgpuNamable {\n label?: string | undefined;\n\n $name(label: string | undefined) {\n this.label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.nameFor(this);\n }\n\n toString(): string {\n return `id:${this.label ?? '<unnamed>'}`;\n }\n}\n","import { TgpuIdentifier } from './wgslIdentifier';\n\nexport const builtin = {\n vertexIndex: Symbol('builtin_vertexIndex'),\n instanceIndex: Symbol('builtin_instanceIndex'),\n position: Symbol('builtin_position'),\n clipDistances: Symbol('builtin_clipDistances'),\n frontFacing: Symbol('builtin_frontFacing'),\n fragDepth: Symbol('builtin_fragDepth'),\n sampleIndex: Symbol('builtin_sampleIndex'),\n sampleMask: Symbol('builtin_sampleMask'),\n fragment: Symbol('builtin_fragment'),\n localInvocationId: Symbol('builtin_localInvocationId'),\n localInvocationIndex: Symbol('builtin_localInvocationIndex'),\n globalInvocationId: Symbol('builtin_globalInvocationId'),\n workgroupId: Symbol('builtin_workgroupId'),\n numWorkgroups: Symbol('builtin_numWorkgroups'),\n} as const;\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\n}\n\nconst builtinSymbolToObj: Record<symbol, Builtin> = {\n [builtin.vertexIndex]: {\n symbol: builtin.vertexIndex,\n name: 'vertex_index',\n stage: 'vertex',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('vertex_index'),\n },\n [builtin.instanceIndex]: {\n symbol: builtin.instanceIndex,\n name: 'instance_index',\n stage: 'vertex',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('instance_index'),\n },\n [builtin.position]: {\n symbol: builtin.position,\n name: 'position',\n stage: 'vertex',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('position'),\n },\n [builtin.clipDistances]: {\n symbol: builtin.clipDistances,\n name: 'clip_distances',\n stage: 'vertex',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('clip_distances'),\n },\n [builtin.frontFacing]: {\n symbol: builtin.frontFacing,\n name: 'front_facing',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('front_facing'),\n },\n [builtin.fragDepth]: {\n symbol: builtin.fragDepth,\n name: 'frag_depth',\n stage: 'fragment',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('frag_depth'),\n },\n [builtin.sampleIndex]: {\n symbol: builtin.sampleIndex,\n name: 'sample_index',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('sample_index'),\n },\n [builtin.sampleMask]: {\n symbol: builtin.sampleMask,\n name: 'sample_mask',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('sample_mask'),\n },\n [builtin.fragment]: {\n symbol: builtin.fragment,\n name: 'fragment',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('fragment'),\n },\n [builtin.localInvocationId]: {\n symbol: builtin.localInvocationId,\n name: 'local_invocation_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('local_invocation_id'),\n },\n [builtin.localInvocationIndex]: {\n symbol: builtin.localInvocationIndex,\n name: 'local_invocation_index',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('local_invocation_index'),\n },\n [builtin.globalInvocationId]: {\n symbol: builtin.globalInvocationId,\n name: 'global_invocation_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('global_invocation_id'),\n },\n [builtin.workgroupId]: {\n symbol: builtin.workgroupId,\n name: 'workgroup_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('workgroup_id'),\n },\n [builtin.numWorkgroups]: {\n symbol: builtin.numWorkgroups,\n name: 'num_workgroups',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('num_workgroups'),\n },\n};\n\nexport function getBuiltinInfo(s: symbol): Builtin {\n const builtin = builtinSymbolToObj[s];\n if (!builtin) {\n throw new Error('Symbol is not a member of builtin');\n }\n return builtin;\n}\n\nexport function getUsedBuiltinsNamed(\n o: Record<symbol, string>,\n): { name: string; builtin: Builtin }[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n const builtin = builtinSymbolToObj[s];\n if (!builtin) {\n throw new Error('Symbol is not a member of builtin');\n }\n const name = o[s];\n if (!name) {\n throw new Error('Name is not provided');\n }\n return { name: name, builtin: builtin };\n });\n return res;\n}\n\nexport function getUsedBuiltins(o: Record<symbol, string>): symbol[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtinSymbolToObj[s]) {\n throw new Error('Symbol is not a member of builtin');\n }\n return s;\n });\n\n return res;\n}\n","import {\n type Eventual,\n type InlineResolve,\n type ResolutionCtx,\n type SlotValuePair,\n type TgpuNamable,\n type TgpuResolvable,\n type TgpuSlot,\n type Wgsl,\n isResolvable,\n} from './types';\nimport { getBuiltinInfo } from './wgslBuiltin';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuCode extends TgpuResolvable, TgpuNamable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport type BoundTgpuCode = Omit<TgpuCode, '$name'>;\n\nexport function code(\n strings: TemplateStringsArray,\n ...params: (Wgsl | Wgsl[] | InlineResolve)[]\n): TgpuCode {\n const segments: (Wgsl | InlineResolve)[] = strings.flatMap((string, idx) => {\n const param = params[idx];\n if (param === undefined) {\n return [string];\n }\n\n return Array.isArray(param) ? [string, ...param] : [string, param];\n });\n\n return new TgpuCodeImpl(segments);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuCodeImpl implements TgpuCode {\n private _label: string | undefined;\n\n constructor(public readonly segments: (Wgsl | InlineResolve)[]) {}\n\n get label() {\n return this._label;\n }\n\n $name(label?: string | undefined) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx) {\n let code = '';\n\n for (const s of this.segments) {\n if (isResolvable(s)) {\n code += ctx.resolve(s);\n } else if (typeof s === 'function') {\n const result = s((eventual) => ctx.unwrap(eventual));\n code += ctx.resolve(result);\n } else if (typeof s === 'symbol') {\n const builtin = getBuiltinInfo(s);\n ctx.addBuiltin(builtin);\n code += ctx.resolve(builtin.identifier);\n } else {\n code += String(s);\n }\n }\n\n return code;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n toString(): string {\n return `code:${this._label ?? '<unnamed>'}`;\n }\n}\n\nclass BoundTgpuCodeImpl<T> implements BoundTgpuCode {\n constructor(\n private readonly _innerFn: BoundTgpuCode,\n private readonly _slotValuePair: SlotValuePair<T>,\n ) {}\n\n get label() {\n return this._innerFn.label;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._innerFn, [this._slotValuePair]);\n }\n\n toString(): string {\n const [slot, value] = this._slotValuePair;\n return `code:${this.label ?? '<unnamed>'}[${slot.label ?? '<unnamed>'}=${value}]`;\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 type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport function align<TAlign extends number, TData extends AnyTgpuData>(\n byteAlignment: TAlign,\n data: TData,\n): TgpuAligned<TAlign, TData> {\n return new TgpuAlignedImpl(data, byteAlignment);\n}\n\nexport interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData>\n extends TgpuData<Unwrap<TData>> {}\n\nexport class TgpuAlignedImpl<TAlign extends number, TData extends AnyTgpuData>\n extends Schema<Unwrap<TData>>\n implements TgpuAligned<TAlign, TData>\n{\n public readonly size: number;\n\n constructor(\n private data: AnyTgpuData,\n public readonly byteAlignment: number,\n ) {\n super();\n\n this.size = this.data.size;\n\n if (byteAlignment <= 0) {\n throw new Error(\n `Custom data alignment must be a positive number, got: ${byteAlignment}.`,\n );\n }\n\n if (Math.log2(byteAlignment) % 1 !== 0) {\n throw new Error(\n `Alignment has to be a power of 2, got: ${byteAlignment}.`,\n );\n }\n\n if (byteAlignment % this.data.byteAlignment !== 0) {\n throw new Error(\n `Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${byteAlignment}, expected multiple of: ${this.data.byteAlignment}.`,\n );\n }\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TData>): void {\n alignIO(output, this.byteAlignment);\n this.data.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TData> {\n alignIO(input, this.byteAlignment);\n return this.data.read(input) as ParseUnwrapped<TData>;\n }\n\n measure(\n value: MaxValue | ParseUnwrapped<TData>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return this.data.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.data.resolve(ctx);\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 type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\n\nexport function size<TSize extends number, TData extends AnyTgpuData>(\n size: TSize,\n data: TData,\n): TgpuSized<TSize, TData> {\n return new TgpuSizedImpl(data, size);\n}\n\nexport interface TgpuSized<TSize extends number, TData extends AnyTgpuData>\n extends TgpuData<Unwrap<TData>> {}\n\nexport class TgpuSizedImpl<TSize extends number, TData extends AnyTgpuData>\n extends Schema<Unwrap<TData>>\n implements TgpuSized<TSize, TData>\n{\n public readonly byteAlignment: number;\n\n constructor(\n private data: AnyTgpuData,\n public readonly size: number,\n ) {\n super();\n\n this.byteAlignment = this.data.byteAlignment;\n\n if (size < this.data.size) {\n throw new Error(\n `Custom data size cannot be smaller then the standard data size. Got: ${size}, expected at least: ${this.data.size}.`,\n );\n }\n\n if (size <= 0) {\n throw new Error(\n `Custom data size must be a positive number. Got: ${size}.`,\n );\n }\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TData>): void {\n this.data.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TData> {\n return this.data.read(input) as ParseUnwrapped<TData>;\n }\n\n measure(\n value: MaxValue | ParseUnwrapped<TData>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return measurer.add(this.size);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return this.data.resolve(ctx);\n }\n}\n","import type * as TB from 'typed-binary';\nimport {\n type IMeasurer,\n type MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { roundUp } from '../mathUtils';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\nimport alignIO from './alignIO';\n\nexport interface TgpuArray<TElement extends AnyTgpuData>\n extends TgpuData<Unwrap<TElement>[]> {\n readonly elementType: TElement;\n readonly elementCount: number;\n}\n\nexport class TgpuArrayImpl<TElement extends AnyTgpuData>\n extends Schema<Unwrap<TElement>[]>\n implements TgpuArray<TElement>\n{\n readonly elementType: TElement;\n readonly elementCount: number;\n readonly byteAlignment: number;\n readonly size: number;\n readonly stride: number;\n constructor(elementType: TElement, count: number) {\n super();\n this.elementType = elementType;\n this.elementCount = count;\n this.byteAlignment = elementType.byteAlignment;\n this.stride = roundUp(\n this.elementType.size,\n this.elementType.byteAlignment,\n );\n this.size = this.stride * this.elementCount;\n }\n\n write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]) {\n alignIO(output, this.byteAlignment);\n const beginning = output.currentByteOffset;\n for (let i = 0; i < Math.min(this.elementCount, value.length); i++) {\n this.elementType.write(output, value[i]);\n }\n output.seekTo(beginning + this.stride * this.elementCount);\n }\n\n read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[] {\n alignIO(input, this.byteAlignment);\n const elements: Parsed<Unwrap<TElement>>[] = [];\n for (let i = 0; i < this.elementCount; i++) {\n elements.push(this.elementType.read(input) as Parsed<Unwrap<TElement>>);\n }\n return elements;\n }\n\n measure(\n value: MaxValue | Parsed<Unwrap<TElement>>[],\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.stride * this.elementCount);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(`\n array<${ctx.resolve(this.elementType)}, ${this.elementCount}>\n `);\n }\n}\n\nexport const arrayOf = <TElement extends AnyTgpuData>(\n elementType: TElement,\n count: number,\n): TgpuArray<TElement> => new TgpuArrayImpl(elementType, count);\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n} from 'typed-binary';\nimport { CallableImpl } from '../callable';\nimport { RecursiveDataTypeError } from '../errors';\nimport { roundUp } from '../mathUtils';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\nimport { vec2f, vec3f, vec4f, type vecBase } from './vector';\n\n// --------------\n// Implementation\n// --------------\n\ninterface MatSchemaOptions<T, TVec extends vecBase> {\n label: string;\n columnType: TgpuData<TVec>;\n rows: number;\n columns: number;\n makeFromColumnVectors(...columns: TVec[]): T;\n makeFromElements(...elements: number[]): T;\n}\n\nclass MatSchemaImpl<T extends matBase<TColumn>, TColumn extends vecBase>\n extends CallableImpl<(number | TColumn)[], T>\n implements TgpuData<T>\n{\n public readonly __unwrapped!: T;\n\n private readonly _columnType: TgpuData<TColumn>;\n private readonly _rows: number;\n private readonly _columns: number;\n private readonly _makeFromColumnVectors: (...columns: TColumn[]) => T;\n private readonly _makeFromElements: (...elements: number[]) => T;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n public readonly label: string;\n\n constructor(options: MatSchemaOptions<T, TColumn>) {\n super();\n this._columnType = options.columnType;\n this._rows = options.rows;\n this._columns = options.columns;\n this.label = options.label;\n this._makeFromColumnVectors = options.makeFromColumnVectors;\n this._makeFromElements = options.makeFromElements;\n\n this.byteAlignment = this._columnType.byteAlignment;\n this.size = roundUp(\n this._columnType.size * this._columns,\n this.byteAlignment,\n );\n }\n\n _call(...args: (number | TColumn)[]): T {\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n elements.push(...arg);\n }\n }\n\n // Fill the rest with zeros\n for (let i = elements.length; i < this._columns * this._rows; ++i) {\n elements.push(0);\n }\n\n return this._makeFromElements(...elements);\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<T>): void {\n for (const col of value.columns()) {\n this._columnType.write(output, col as Parsed<TColumn>);\n }\n }\n\n read(input: ISerialInput): Parsed<T> {\n const columns = new Array(this._columns) as TColumn[];\n\n for (let c = 0; c < this._columns; ++c) {\n columns[c] = this._columnType.read(input) as TColumn;\n }\n\n return this._makeFromColumnVectors(...columns) as Parsed<T>;\n }\n\n measure(_value: MaxValue, measurer: IMeasurer = new Measurer()): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n }\n\n seekProperty(): null {\n throw new Error('Method not implemented.');\n }\n\n resolve(): string {\n return this.label;\n }\n}\n\ninterface matBase<TColumn> {\n columns(): Iterable<TColumn>;\n elements(): Iterable<number>;\n}\n\nabstract class mat2x2Impl<TColumn extends vecBase> implements mat2x2<TColumn> {\n private _columns = new Array(2) as [TColumn, TColumn];\n\n constructor(...elements: number[]) {\n this._columns[0] = this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n );\n this._columns[1] = this.makeColumn(\n elements[2] as number,\n elements[3] as number,\n );\n }\n\n abstract makeColumn(e0: number, e1: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat2x2fImpl extends mat2x2Impl<vec2f> implements mat2x2f {\n makeColumn(e0: number, e1: number): vec2f {\n return vec2f(e0, e1);\n }\n}\n\nabstract class mat3x3Impl<TColumn extends vecBase> implements mat3x3<TColumn> {\n private _columns = new Array(3) as [TColumn, TColumn, TColumn];\n\n constructor(...elements: number[]) {\n this._columns[0] = this.makeColumn(\n elements[0] as number,\n elements[1] as number,\n elements[2] as number,\n );\n this._columns[1] = this.makeColumn(\n elements[3] as number,\n elements[4] as number,\n elements[5] as number,\n );\n this._columns[2] = this.makeColumn(\n elements[6] as number,\n elements[7] as number,\n elements[8] as number,\n );\n }\n\n abstract makeColumn(x: number, y: number, z: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n yield this._columns[2];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n yield* this._columns[2];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n get [2]() {\n return this._columns[2];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat3x3fImpl extends mat3x3Impl<vec3f> implements mat3x3f {\n makeColumn(x: number, y: number, z: number): vec3f {\n return vec3f(x, y, z);\n }\n}\n\nabstract class mat4x4Impl<TColumn extends vecBase> implements mat4x4<TColumn> {\n private readonly _columns = new Array(4) as [\n TColumn,\n TColumn,\n TColumn,\n TColumn,\n ];\n\n constructor(...elements: number[]) {\n this._columns[0] = 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._columns[1] = 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._columns[2] = 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._columns[3] = 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 abstract makeColumn(x: number, y: number, z: number, w: number): TColumn;\n\n *columns() {\n yield this._columns[0];\n yield this._columns[1];\n yield this._columns[2];\n yield this._columns[3];\n }\n\n *elements() {\n yield* this._columns[0];\n yield* this._columns[1];\n yield* this._columns[2];\n yield* this._columns[3];\n }\n\n get [0]() {\n return this._columns[0];\n }\n\n get [1]() {\n return this._columns[1];\n }\n\n get [2]() {\n return this._columns[2];\n }\n\n get [3]() {\n return this._columns[3];\n }\n\n [idx: number]: TColumn | undefined;\n}\n\nclass mat4x4fImpl extends mat4x4Impl<vec4f> implements mat4x4f {\n makeColumn(x: number, y: number, z: number, w: number): vec4f {\n return vec4f(x, y, z, w);\n }\n}\n\n// ----------\n// Public API\n// ----------\n\nexport interface mat2x2<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat2x2f extends mat2x2<vec2f> {}\n\nexport type Mat2x2f = TgpuData<mat2x2f> &\n ((...elements: number[]) => mat2x2f) &\n ((...columns: vec2f[]) => mat2x2f) &\n (() => mat2x2f);\n\nexport const mat2x2f = new MatSchemaImpl({\n label: 'mat2x2f',\n columnType: vec2f,\n rows: 2,\n columns: 2,\n makeFromColumnVectors: (...columns: [vec2f, vec2f]) =>\n new mat2x2fImpl(...columns[0], ...columns[1]),\n makeFromElements: (...elements: number[]) => new mat2x2fImpl(...elements),\n}) as unknown as Mat2x2f;\n\nexport interface mat3x3<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [2]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat3x3f extends mat3x3<vec3f> {}\n\nexport type Mat3x3f = TgpuData<mat3x3f> &\n ((...elements: number[]) => mat3x3f) &\n ((...columns: vec3f[]) => mat3x3f) &\n (() => mat3x3f);\n\nexport const mat3x3f = new MatSchemaImpl({\n label: 'mat3x3f',\n columnType: vec3f,\n rows: 3,\n columns: 3,\n makeFromColumnVectors(...[v0, v1, v2]: [vec3f, vec3f, vec3f]) {\n return new mat3x3fImpl(...v0, ...v1, ...v2);\n },\n makeFromElements: (...elements: number[]) => new mat3x3fImpl(...elements),\n}) as unknown as Mat3x3f;\n\nexport interface mat4x4<TColumn> extends matBase<TColumn> {\n [0]: TColumn;\n [1]: TColumn;\n [2]: TColumn;\n [3]: TColumn;\n [idx: number]: TColumn | undefined;\n}\n\nexport interface mat4x4f extends mat4x4<vec4f> {}\n\nexport type Mat4x4f = TgpuData<mat4x4f> &\n ((...elements: number[]) => mat4x4f) &\n ((...columns: vec4f[]) => mat4x4f) &\n (() => mat4x4f);\n\nexport const mat4x4f = new MatSchemaImpl({\n label: 'mat4x4f',\n columnType: vec4f,\n rows: 4,\n columns: 4,\n makeFromColumnVectors(...[v0, v1, v2, v3]: [vec4f, vec4f, vec4f, vec4f]) {\n return new mat4x4fImpl(...v0, ...v1, ...v2, ...v3);\n },\n makeFromElements: (...elements: number[]) => new mat4x4fImpl(...elements),\n}) as unknown as Mat4x4f;\n","import type { AnyTgpuData, TgpuPointer } from '../types';\n\nexport function ptr<TDataType extends AnyTgpuData>(\n pointsTo: TDataType,\n): TgpuPointer<'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, TgpuData } 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 TgpuData<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"]}
|
package/data/index.d.cts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import * as TB from 'typed-binary';
|
2
2
|
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
3
3
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
4
|
+
import { f as TgpuData, R as ResolutionCtx, A as AnyTgpuData, a as TgpuNamable, h as vec2f, c as vec3f, i as vec4f, j as TgpuPointer } from '../types-D2gslu2F.cjs';
|
5
|
+
export { o as Vec2f, p as Vec2i, q as Vec2u, r as Vec3f, s as Vec3i, t as Vec3u, u as Vec4f, w as Vec4i, x as Vec4u, V as VecKind, k as vec2i, l as vec2u, d as vec3i, e as vec3u, m as vec4i, n as vec4u, v as vecBase } from '../types-D2gslu2F.cjs';
|
6
6
|
|
7
7
|
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
8
|
readonly size: number;
|
@@ -34,11 +34,6 @@ type I32 = TgpuData<number>;
|
|
34
34
|
declare const i32: I32;
|
35
35
|
type F32 = TgpuData<number>;
|
36
36
|
declare const f32: F32;
|
37
|
-
/**
|
38
|
-
* Array of column vectors
|
39
|
-
*/
|
40
|
-
type Mat4f = TgpuData<number[]>;
|
41
|
-
declare const mat4f: Mat4f;
|
42
37
|
|
43
38
|
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
44
39
|
}
|
@@ -62,6 +57,41 @@ declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<
|
|
62
57
|
}
|
63
58
|
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
64
59
|
|
60
|
+
interface matBase<TColumn> {
|
61
|
+
columns(): Iterable<TColumn>;
|
62
|
+
elements(): Iterable<number>;
|
63
|
+
}
|
64
|
+
interface mat2x2<TColumn> extends matBase<TColumn> {
|
65
|
+
[0]: TColumn;
|
66
|
+
[1]: TColumn;
|
67
|
+
[idx: number]: TColumn | undefined;
|
68
|
+
}
|
69
|
+
type Mat2x2f = TgpuData<mat2x2f> & ((...elements: number[]) => mat2x2f) & ((...columns: vec2f[]) => mat2x2f) & (() => mat2x2f);
|
70
|
+
interface mat2x2f extends mat2x2<vec2f> {
|
71
|
+
}
|
72
|
+
declare const mat2x2f: Mat2x2f;
|
73
|
+
interface mat3x3<TColumn> extends matBase<TColumn> {
|
74
|
+
[0]: TColumn;
|
75
|
+
[1]: TColumn;
|
76
|
+
[2]: TColumn;
|
77
|
+
[idx: number]: TColumn | undefined;
|
78
|
+
}
|
79
|
+
type Mat3x3f = TgpuData<mat3x3f> & ((...elements: number[]) => mat3x3f) & ((...columns: vec3f[]) => mat3x3f) & (() => mat3x3f);
|
80
|
+
interface mat3x3f extends mat3x3<vec3f> {
|
81
|
+
}
|
82
|
+
declare const mat3x3f: Mat3x3f;
|
83
|
+
interface mat4x4<TColumn> extends matBase<TColumn> {
|
84
|
+
[0]: TColumn;
|
85
|
+
[1]: TColumn;
|
86
|
+
[2]: TColumn;
|
87
|
+
[3]: TColumn;
|
88
|
+
[idx: number]: TColumn | undefined;
|
89
|
+
}
|
90
|
+
type Mat4x4f = TgpuData<mat4x4f> & ((...elements: number[]) => mat4x4f) & ((...columns: vec4f[]) => mat4x4f) & (() => mat4x4f);
|
91
|
+
interface mat4x4f extends mat4x4<vec4f> {
|
92
|
+
}
|
93
|
+
declare const mat4x4f: Mat4x4f;
|
94
|
+
|
65
95
|
declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPointer<'function', TDataType>;
|
66
96
|
|
67
97
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
@@ -76,4 +106,4 @@ declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSi
|
|
76
106
|
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
77
107
|
}
|
78
108
|
|
79
|
-
export { type Bool, type F32, type I32, type
|
109
|
+
export { type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, TgpuArrayImpl, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, type mat2x2, mat2x2f, type mat3x3, mat3x3f, type mat4x4, mat4x4f, ptr, size, struct, u32, vec2f, vec3f, vec4f };
|
package/data/index.d.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import * as TB from 'typed-binary';
|
2
2
|
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
3
3
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
4
|
+
import { f as TgpuData, R as ResolutionCtx, A as AnyTgpuData, a as TgpuNamable, h as vec2f, c as vec3f, i as vec4f, j as TgpuPointer } from '../types-D2gslu2F.js';
|
5
|
+
export { o as Vec2f, p as Vec2i, q as Vec2u, r as Vec3f, s as Vec3i, t as Vec3u, u as Vec4f, w as Vec4i, x as Vec4u, V as VecKind, k as vec2i, l as vec2u, d as vec3i, e as vec3u, m as vec4i, n as vec4u, v as vecBase } from '../types-D2gslu2F.js';
|
6
6
|
|
7
7
|
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
8
|
readonly size: number;
|
@@ -34,11 +34,6 @@ type I32 = TgpuData<number>;
|
|
34
34
|
declare const i32: I32;
|
35
35
|
type F32 = TgpuData<number>;
|
36
36
|
declare const f32: F32;
|
37
|
-
/**
|
38
|
-
* Array of column vectors
|
39
|
-
*/
|
40
|
-
type Mat4f = TgpuData<number[]>;
|
41
|
-
declare const mat4f: Mat4f;
|
42
37
|
|
43
38
|
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
44
39
|
}
|
@@ -62,6 +57,41 @@ declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<
|
|
62
57
|
}
|
63
58
|
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
64
59
|
|
60
|
+
interface matBase<TColumn> {
|
61
|
+
columns(): Iterable<TColumn>;
|
62
|
+
elements(): Iterable<number>;
|
63
|
+
}
|
64
|
+
interface mat2x2<TColumn> extends matBase<TColumn> {
|
65
|
+
[0]: TColumn;
|
66
|
+
[1]: TColumn;
|
67
|
+
[idx: number]: TColumn | undefined;
|
68
|
+
}
|
69
|
+
type Mat2x2f = TgpuData<mat2x2f> & ((...elements: number[]) => mat2x2f) & ((...columns: vec2f[]) => mat2x2f) & (() => mat2x2f);
|
70
|
+
interface mat2x2f extends mat2x2<vec2f> {
|
71
|
+
}
|
72
|
+
declare const mat2x2f: Mat2x2f;
|
73
|
+
interface mat3x3<TColumn> extends matBase<TColumn> {
|
74
|
+
[0]: TColumn;
|
75
|
+
[1]: TColumn;
|
76
|
+
[2]: TColumn;
|
77
|
+
[idx: number]: TColumn | undefined;
|
78
|
+
}
|
79
|
+
type Mat3x3f = TgpuData<mat3x3f> & ((...elements: number[]) => mat3x3f) & ((...columns: vec3f[]) => mat3x3f) & (() => mat3x3f);
|
80
|
+
interface mat3x3f extends mat3x3<vec3f> {
|
81
|
+
}
|
82
|
+
declare const mat3x3f: Mat3x3f;
|
83
|
+
interface mat4x4<TColumn> extends matBase<TColumn> {
|
84
|
+
[0]: TColumn;
|
85
|
+
[1]: TColumn;
|
86
|
+
[2]: TColumn;
|
87
|
+
[3]: TColumn;
|
88
|
+
[idx: number]: TColumn | undefined;
|
89
|
+
}
|
90
|
+
type Mat4x4f = TgpuData<mat4x4f> & ((...elements: number[]) => mat4x4f) & ((...columns: vec4f[]) => mat4x4f) & (() => mat4x4f);
|
91
|
+
interface mat4x4f extends mat4x4<vec4f> {
|
92
|
+
}
|
93
|
+
declare const mat4x4f: Mat4x4f;
|
94
|
+
|
65
95
|
declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPointer<'function', TDataType>;
|
66
96
|
|
67
97
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
@@ -76,4 +106,4 @@ declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSi
|
|
76
106
|
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
77
107
|
}
|
78
108
|
|
79
|
-
export { type Bool, type F32, type I32, type
|
109
|
+
export { type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, TgpuArrayImpl, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, type mat2x2, mat2x2f, type mat3x3, mat3x3f, type mat4x4, mat4x4f, ptr, size, struct, u32, vec2f, vec3f, vec4f };
|
package/data/index.js
CHANGED
@@ -1,2 +1,8 @@
|
|
1
|
-
import{
|
1
|
+
import{b as a,c as l,d as E,f as g,g as p,h as $,i as m,j as w,k as ie,l as oe,m as v,n as se,o as me,p as _,q as ue,r as le}from"../chunk-34O2K2PT.js";import{MaxValue as B,Measurer as V,Schema as O}from"typed-binary";var d=class extends O{constructor({schema:e,byteAlignment:t,code:i}){super();a(this,"size");a(this,"byteAlignment");a(this,"expressionCode");a(this,"_innerSchema");this._innerSchema=e,this.byteAlignment=t,this.expressionCode=i,this.size=this.measure(B).size}resolveReferences(){throw new p}write(e,t){m(e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return m(e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new V){return m(t,this.byteAlignment),this._innerSchema.measure(e,t),t}getUnderlyingTypeString(){if(typeof this.expressionCode=="string")return this.expressionCode;if("elementSchema"in this._innerSchema)return this._innerSchema.elementSchema.getUnderlyingTypeString();throw new Error("Unexpected type used as vertex buffer element")}getUnderlyingType(){return"elementSchema"in this._innerSchema?this._innerSchema.elementSchema.getUnderlyingType():this}resolve(e){return this.expressionCode}};import*as c from"typed-binary";var ge=new d({schema:c.bool,byteAlignment:4,code:"bool"}),he=new d({schema:c.u32,byteAlignment:4,code:"u32"}),fe=new d({schema:c.i32,byteAlignment:4,code:"i32"}),xe=new d({schema:c.f32,byteAlignment:4,code:"f32"});import{MaxValue as J,Measurer as K,Schema as L,object as Q}from"typed-binary";var s=class{constructor(){a(this,"label")}$name(n){return this.label=n,this}resolve(n){return n.nameFor(this)}toString(){var n;return`id:${(n=this.label)!=null?n:"<unnamed>"}`}};var o={vertexIndex:Symbol("builtin_vertexIndex"),instanceIndex:Symbol("builtin_instanceIndex"),position:Symbol("builtin_position"),clipDistances:Symbol("builtin_clipDistances"),frontFacing:Symbol("builtin_frontFacing"),fragDepth:Symbol("builtin_fragDepth"),sampleIndex:Symbol("builtin_sampleIndex"),sampleMask:Symbol("builtin_sampleMask"),fragment:Symbol("builtin_fragment"),localInvocationId:Symbol("builtin_localInvocationId"),localInvocationIndex:Symbol("builtin_localInvocationIndex"),globalInvocationId:Symbol("builtin_globalInvocationId"),workgroupId:Symbol("builtin_workgroupId"),numWorkgroups:Symbol("builtin_numWorkgroups")},F={[o.vertexIndex]:{symbol:o.vertexIndex,name:"vertex_index",stage:"vertex",direction:"input",identifier:new s().$name("vertex_index")},[o.instanceIndex]:{symbol:o.instanceIndex,name:"instance_index",stage:"vertex",direction:"input",identifier:new s().$name("instance_index")},[o.position]:{symbol:o.position,name:"position",stage:"vertex",direction:"output",identifier:new s().$name("position")},[o.clipDistances]:{symbol:o.clipDistances,name:"clip_distances",stage:"vertex",direction:"output",identifier:new s().$name("clip_distances")},[o.frontFacing]:{symbol:o.frontFacing,name:"front_facing",stage:"fragment",direction:"input",identifier:new s().$name("front_facing")},[o.fragDepth]:{symbol:o.fragDepth,name:"frag_depth",stage:"fragment",direction:"output",identifier:new s().$name("frag_depth")},[o.sampleIndex]:{symbol:o.sampleIndex,name:"sample_index",stage:"fragment",direction:"input",identifier:new s().$name("sample_index")},[o.sampleMask]:{symbol:o.sampleMask,name:"sample_mask",stage:"fragment",direction:"input",identifier:new s().$name("sample_mask")},[o.fragment]:{symbol:o.fragment,name:"fragment",stage:"fragment",direction:"input",identifier:new s().$name("fragment")},[o.localInvocationId]:{symbol:o.localInvocationId,name:"local_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_id")},[o.localInvocationIndex]:{symbol:o.localInvocationIndex,name:"local_invocation_index",stage:"compute",direction:"input",identifier:new s().$name("local_invocation_index")},[o.globalInvocationId]:{symbol:o.globalInvocationId,name:"global_invocation_id",stage:"compute",direction:"input",identifier:new s().$name("global_invocation_id")},[o.workgroupId]:{symbol:o.workgroupId,name:"workgroup_id",stage:"compute",direction:"input",identifier:new s().$name("workgroup_id")},[o.numWorkgroups]:{symbol:o.numWorkgroups,name:"num_workgroups",stage:"compute",direction:"input",identifier:new s().$name("num_workgroups")}};function z(r){let n=F[r];if(!n)throw new Error("Symbol is not a member of builtin");return n}function I(r,...n){let e=r.flatMap((t,i)=>{let u=n[i];return u===void 0?[t]:Array.isArray(u)?[t,...u]:[t,u]});return new S(e)}var S=class{constructor(n){this.segments=n;a(this,"_label")}get label(){return this._label}$name(n){return this._label=n,this}resolve(n){let e="";for(let t of this.segments)if(E(t))e+=n.resolve(t);else if(typeof t=="function"){let i=t(u=>n.unwrap(u));e+=n.resolve(i)}else if(typeof t=="symbol"){let i=z(t);n.addBuiltin(i),e+=n.resolve(i.identifier)}else e+=String(t);return e}with(n,e){return new C(this,[n,e])}toString(){var n;return`code:${(n=this._label)!=null?n:"<unnamed>"}`}},C=class r{constructor(n,e){this._innerFn=n;this._slotValuePair=e}get label(){return this._innerFn.label}with(n,e){return new r(this,[n,e])}resolve(n){return n.resolve(this._innerFn,[this._slotValuePair])}toString(){var t,i;let[n,e]=this._slotValuePair;return`code:${(t=this.label)!=null?t:"<unnamed>"}[${(i=n.label)!=null?i:"<unnamed>"}=${e}]`}};import{Measurer as W,Schema as N}from"typed-binary";function j(r,n){return new y(n,r)}var y=class extends N{constructor(e,t){super();this.data=e;this.byteAlignment=t;a(this,"size");if(this.size=this.data.size,t<=0)throw new Error(`Custom data alignment must be a positive number, got: ${t}.`);if(Math.log2(t)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${t}.`);if(t%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${t}, expected multiple of: ${this.data.byteAlignment}.`)}write(e,t){m(e,this.byteAlignment),this.data.write(e,t)}read(e){return m(e,this.byteAlignment),this.data.read(e)}measure(e,t=new W){return m(t,this.byteAlignment),this.data.measure(e,t)}resolve(e){return this.data.resolve(e)}};import{Measurer as G,Schema as q}from"typed-binary";function H(r,n){return new T(n,r)}var T=class extends q{constructor(e,t){super();this.data=e;this.size=t;a(this,"byteAlignment");if(this.byteAlignment=this.data.byteAlignment,t<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${t}, expected at least: ${this.data.size}.`);if(t<=0)throw new Error(`Custom data size must be a positive number. Got: ${t}.`)}write(e,t){this.data.write(e,t)}read(e){return this.data.read(e)}measure(e,t=new G){return t.add(this.size)}resolve(e){return this.data.resolve(e)}};var Ge=r=>new D(r),D=class extends L{constructor(e){super();this._properties=e;a(this,"_label");a(this,"_innerSchema");a(this,"byteAlignment");a(this,"size");this._innerSchema=Q(e),this.byteAlignment=Object.values(e).map(t=>t.byteAlignment).reduce((t,i)=>t>i?t:i),this.size=this.measure(J).size}$name(e){return this._label=e,this}resolveReferences(){throw new p}write(e,t){m(e,this.byteAlignment),this._innerSchema.write(e,t)}read(e){return m(e,this.byteAlignment),this._innerSchema.read(e)}measure(e,t=new K){return m(t,this.byteAlignment),this._innerSchema.measure(e,t),t}resolve(e){let t=new s().$name(this._label);return e.addDeclaration(I`
|
2
|
+
struct ${t} {
|
3
|
+
${Object.entries(this._properties).map(([i,u])=>{var R;return I`${(R=X(u))!=null?R:""}${i}: ${u},\n`})}
|
4
|
+
}
|
5
|
+
`),e.resolve(t)}};function X(r){if(r instanceof y)return`@align(${r.byteAlignment}) `;if(r instanceof T)return`@size(${r.size}) `}import{Measurer as Y,Schema as Z}from"typed-binary";var A=class extends Z{constructor(e,t){super();a(this,"elementType");a(this,"elementCount");a(this,"byteAlignment");a(this,"size");a(this,"stride");this.elementType=e,this.elementCount=t,this.byteAlignment=e.byteAlignment,this.stride=g(this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(e,t){m(e,this.byteAlignment);let i=e.currentByteOffset;for(let u=0;u<Math.min(this.elementCount,t.length);u++)this.elementType.write(e,t[u]);e.seekTo(i+this.stride*this.elementCount)}read(e){m(e,this.byteAlignment);let t=[];for(let i=0;i<this.elementCount;i++)t.push(this.elementType.read(e));return t}measure(e,t=new Y){return m(t,this.byteAlignment),t.add(this.stride*this.elementCount)}resolve(e){return e.resolve(`
|
6
|
+
array<${e.resolve(this.elementType)}, ${this.elementCount}>
|
7
|
+
`)}},Qe=(r,n)=>new A(r,n);import{Measurer as ee}from"typed-binary";var b=class extends ${constructor(e){super();a(this,"__unwrapped");a(this,"_columnType");a(this,"_rows");a(this,"_columns");a(this,"_makeFromColumnVectors");a(this,"_makeFromElements");a(this,"byteAlignment");a(this,"size");a(this,"label");this._columnType=e.columnType,this._rows=e.rows,this._columns=e.columns,this.label=e.label,this._makeFromColumnVectors=e.makeFromColumnVectors,this._makeFromElements=e.makeFromElements,this.byteAlignment=this._columnType.byteAlignment,this.size=g(this._columnType.size*this._columns,this.byteAlignment)}_call(...e){let t=[];for(let i of e)typeof i=="number"?t.push(i):t.push(...i);for(let i=t.length;i<this._columns*this._rows;++i)t.push(0);return this._makeFromElements(...t)}resolveReferences(){throw new p}write(e,t){for(let i of t.columns())this._columnType.write(e,i)}read(e){let t=new Array(this._columns);for(let i=0;i<this._columns;++i)t[i]=this._columnType.read(e);return this._makeFromColumnVectors(...t)}measure(e,t=new ee){return m(t,this.byteAlignment),t.add(this.size)}seekProperty(){throw new Error("Method not implemented.")}resolve(){return this.label}},U=class{constructor(...n){a(this,"_columns",new Array(2));this._columns[0]=this.makeColumn(n[0],n[1]),this._columns[1]=this.makeColumn(n[2],n[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},h=class extends U{makeColumn(n,e){return w(n,e)}},P=class{constructor(...n){a(this,"_columns",new Array(3));this._columns[0]=this.makeColumn(n[0],n[1],n[2]),this._columns[1]=this.makeColumn(n[3],n[4],n[5]),this._columns[2]=this.makeColumn(n[6],n[7],n[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1]),yield*l(this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},f=class extends P{makeColumn(n,e,t){return v(n,e,t)}},M=class{constructor(...n){a(this,"_columns",new Array(4));this._columns[0]=this.makeColumn(n[0],n[1],n[2],n[3]),this._columns[1]=this.makeColumn(n[4],n[5],n[6],n[7]),this._columns[2]=this.makeColumn(n[8],n[9],n[10],n[11]),this._columns[3]=this.makeColumn(n[12],n[13],n[14],n[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1]),yield*l(this._columns[2]),yield*l(this._columns[3])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}get 3(){return this._columns[3]}},x=class extends M{makeColumn(n,e,t,i){return _(n,e,t,i)}},it=new b({label:"mat2x2f",columnType:w,rows:2,columns:2,makeFromColumnVectors:(...r)=>new h(...r[0],...r[1]),makeFromElements:(...r)=>new h(...r)}),ot=new b({label:"mat3x3f",columnType:v,rows:3,columns:3,makeFromColumnVectors(...[r,n,e]){return new f(...r,...n,...e)},makeFromElements:(...r)=>new f(...r)}),st=new b({label:"mat4x4f",columnType:_,rows:4,columns:4,makeFromColumnVectors(...[r,n,e,t]){return new x(...r,...n,...e,...t)},makeFromElements:(...r)=>new x(...r)});function te(r){return{scope:"function",pointsTo:r}}import{Measurer as ne,Schema as re}from"typed-binary";function ae(r){return new k(r)}var k=class extends re{constructor(e){super();this.innerData=e;a(this,"size");a(this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new p}write(e,t){this.innerData.write(e,t)}read(e){return this.innerData.read(e)}measure(e,t=new ne){return this.innerData.measure(e,t)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};export{d as SimpleTgpuData,A as TgpuArrayImpl,j as align,Qe as arrayOf,ae as atomic,ge as bool,xe as f32,fe as i32,it as mat2x2f,ot as mat3x3f,st as mat4x4f,te as ptr,H as size,Ge as struct,he as u32,w as vec2f,ie as vec2i,oe as vec2u,v as vec3f,se as vec3i,me as vec3u,_ as vec4f,ue as vec4i,le as vec4u};
|
2
8
|
//# sourceMappingURL=index.js.map
|