typegpu 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ var D=Object.defineProperty;var S=(e,a)=>(a=Symbol[e])?a:Symbol.for("Symbol."+e);var A=(e,a,r)=>a in e?D(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r;var l=(e,a,r)=>(A(e,typeof a!="symbol"?a+"":a,r),r);var I=function(e,a){this[0]=e,this[1]=a};var F=e=>{var a=e[S("asyncIterator")],r=!1,n,y={};return a==null?(a=e[S("iterator")](),n=t=>y[t]=z=>a[t](z)):(a=a.call(e),n=t=>y[t]=z=>{if(r){if(r=!1,t==="throw")throw z;return z}return r=!0,{done:!1,value:new I(new Promise(R=>{var P=a[t](z);if(!(P instanceof Object))throw TypeError("Object expected");R(P)}),1)}}),y[S("iterator")]=()=>y,n("next"),"throw"in a?n("throw"):y.throw=t=>{throw t},"return"in a&&n("return"),y};function U(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function M(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 O,f32 as h,i32 as _,u32 as V}from"typed-binary";function B(e,a){let r="size"in e?e.size:e.currentByteOffset,n=a-1,y=r&n;"skipBytes"in e?e.skipBytes(a-y&n):e.add(a-y&n)}var k=B;function u(e){let a={__unwrapped:void 0,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,expressionCode:e.label,resolveReferences(n){throw new g},write(n,y){k(n,this.byteAlignment);for(let t of y)e.unitType.write(n,t)},read(n){return k(n,this.byteAlignment),e.make(...Array.from({length:e.length}).map(y=>e.unitType.read(n)))},measure(n,y=new O){return k(y,this.byteAlignment),y.add(this.size)},seekProperty(n,y){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...n)=>{var t;let y=n;if(y.length<=1)return e.makeFromScalar((t=y[0])!=null?t:0);if(y.length===e.length)return e.make(...y);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},a)}var b=class{constructor(a,r){this.x=a;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},T=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2f")}make2(r,n){return new e(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,t){return new i(r,n,y,t)}},d=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2i")}make2(r,n){return new e(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,t){return new p(r,n,y,t)}},x=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2u")}make2(r,n){return new e(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,t){return new m(r,n,y,t)}},v=class{constructor(a,r,n){this.x=a;this.y=r;this.z=n}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},c=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new i(r,n,y,t)}},s=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new p(r,n,y,t)}},w=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new m(r,n,y,t)}},f=class{constructor(a,r,n,y){this.x=a;this.y=r;this.z=n;this.w=y}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},i=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},p=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},m=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},o={get:(e,a)=>{if(typeof a=="symbol")return Reflect.get(e,a);let r=e,n=new Array(a.length),y=0;for(let t of a){switch(t){case"x":n[y]=r.x;break;case"y":n[y]=r.y;break;case"z":n[y]=r.z;break;case"w":n[y]=r.w;break;default:return Reflect.get(r,a)}y++}return a.length===4?new Proxy(r.make4(n[0],n[1],n[2],n[3]),o):a.length===3?new Proxy(r.make3(n[0],n[1],n[2]),o):a.length===2?new Proxy(r.make2(n[0],n[1]),o):Reflect.get(e,a)}},H=u({unitType:h,byteAlignment:8,length:2,label:"vec2f",make:(e,a)=>new Proxy(new T(e,a),o),makeFromScalar:e=>new Proxy(new T(e,e),o)}),K=u({unitType:_,byteAlignment:8,length:2,label:"vec2i",make:(e,a)=>new Proxy(new d(e,a),o),makeFromScalar:e=>new Proxy(new d(e,e),o)}),q=u({unitType:V,byteAlignment:8,length:2,label:"vec2u",make:(e,a)=>new Proxy(new x(e,a),o),makeFromScalar:e=>new Proxy(new x(e,e),o)}),L=u({unitType:h,byteAlignment:16,length:3,label:"vec3f",make:(e,a,r)=>new Proxy(new c(e,a,r),o),makeFromScalar:e=>new Proxy(new c(e,e,e),o)}),J=u({unitType:_,byteAlignment:16,length:3,label:"vec3i",make:(e,a,r)=>new Proxy(new s(e,a,r),o),makeFromScalar:e=>new Proxy(new s(e,e,e),o)}),Q=u({unitType:V,byteAlignment:16,length:3,label:"vec3u",make:(e,a,r)=>new Proxy(new w(e,a,r),o),makeFromScalar:e=>new Proxy(new w(e,e,e),o)}),X=u({unitType:h,byteAlignment:16,length:4,label:"vec4f",make:(e,a,r,n)=>new Proxy(new i(e,a,r,n),o),makeFromScalar:e=>new Proxy(new i(e,e,e,e),o)}),Y=u({unitType:_,byteAlignment:16,length:4,label:"vec4i",make:(e,a,r,n)=>new Proxy(new p(e,a,r,n),o),makeFromScalar:e=>new Proxy(new p(e,e,e,e),o)}),Z=u({unitType:V,byteAlignment:16,length:4,label:"vec4u",make:(e,a,r,n)=>new Proxy(new m(e,a,r,n),o),makeFromScalar:e=>new Proxy(new m(e,e,e,e),o)});export{l as a,F as b,U as c,M as d,g as e,k as f,H as g,K as h,q as i,L as j,J as k,Q as l,X as m,Y as n,Z as o};
2
+ //# sourceMappingURL=chunk-3I5VAGHS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts","../src/data/alignIO.ts"],"sourcesContent":["import type { ISchema, Parsed, Unwrap } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport type { TgpuBufferUsage } from './tgpuBufferUsage';\nimport type { TgpuFn } from './tgpuFn';\nimport type { TgpuPlum } from './tgpuPlumTypes';\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: symbol): 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 transpileFn(\n // biome-ignore lint/suspicious/noExplicitAny: <no need for generic magic>\n fn: TgpuFn<any, any>,\n externalMap: Record<string, Wgsl>,\n ): {\n head: Wgsl;\n body: Wgsl;\n };\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport interface TgpuIdentifier extends TgpuNamable, TgpuResolvable {}\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\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 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\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';\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 type ValueOf<T> = T extends TgpuSlot<infer I>\n ? ValueOf<I>\n : T extends TgpuBufferUsage<infer D>\n ? ValueOf<D>\n : T extends TgpuData<unknown>\n ? Unwrap<T>\n : T;\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\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\n// -----------------\n// TypeGPU Resources\n// -----------------\n\n// Code\n\nexport interface BoundTgpuCode extends TgpuResolvable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport interface TgpuCode extends BoundTgpuCode, TgpuNamable {}\n\n// Slot\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 value: ValueOf<T>;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\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 { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<ValueType> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => ValueType;\n makeFromScalar: (value: number) => ValueType;\n}\n\ntype VecSchemaBase<ValueType> = TgpuData<ValueType> & {\n expressionCode: string;\n};\n\nfunction makeVecSchema<ValueType extends vecBase>(\n options: VecSchemaOptions<ValueType>,\n): VecSchemaBase<ValueType> & ((...args: number[]) => ValueType) {\n const VecSchema: VecSchemaBase<ValueType> = {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as ValueType,\n\n size: options.length * 4,\n label: options.label,\n byteAlignment: options.byteAlignment,\n expressionCode: options.label,\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n alignIO(output, this.byteAlignment);\n for (const element of value) {\n options.unitType.write(output, element);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n alignIO(input, this.byteAlignment);\n return options.make(\n ...Array.from({ length: options.length }).map((_) =>\n options.unitType.read(input),\n ),\n ) as Parsed<ValueType>;\n },\n\n measure(\n _value: Parsed<ValueType> | 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<ValueType> | 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 options.label;\n },\n };\n\n const construct = (...args: number[]): ValueType => {\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 options.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === options.length) {\n return options.make(...values);\n }\n\n throw new Error(\n `'${options.label}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements vec2 {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\n\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec3Impl implements vec3 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\n\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec4Impl implements vec4 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\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 {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\ninterface Swizzle2<T2, T3, T4> {\n readonly xx: T2;\n readonly xy: T2;\n readonly yx: T2;\n readonly yy: T2;\n\n readonly xxx: T3;\n readonly xxy: T3;\n readonly xyx: T3;\n readonly xyy: T3;\n readonly yxx: T3;\n readonly yxy: T3;\n readonly yyx: T3;\n readonly yyy: T3;\n\n readonly xxxx: T4;\n readonly xxxy: T4;\n readonly xxyx: T4;\n readonly xxyy: T4;\n readonly xyxx: T4;\n readonly xyxy: T4;\n readonly xyyx: T4;\n readonly xyyy: T4;\n readonly yxxx: T4;\n readonly yxxy: T4;\n readonly yxyx: T4;\n readonly yxyy: T4;\n readonly yyxx: T4;\n readonly yyxy: T4;\n readonly yyyx: T4;\n readonly yyyy: T4;\n}\n\ninterface Swizzle3<T2, T3, T4> extends Swizzle2<T2, T3, T4> {\n readonly xz: T2;\n readonly yz: T2;\n readonly zx: T2;\n readonly zy: T2;\n readonly zz: T2;\n\n readonly xxz: T3;\n readonly xyz: T3;\n readonly xzx: T3;\n readonly xzy: T3;\n readonly xzz: T3;\n readonly yxz: T3;\n readonly yyz: T3;\n readonly yzx: T3;\n readonly yzy: T3;\n readonly yzz: T3;\n readonly zxx: T3;\n readonly zxy: T3;\n readonly zxz: T3;\n readonly zyx: T3;\n readonly zyy: T3;\n readonly zyz: T3;\n readonly zzx: T3;\n readonly zzy: T3;\n readonly zzz: T3;\n\n readonly xxxz: T4;\n readonly xxyz: T4;\n readonly xxzx: T4;\n readonly xxzy: T4;\n readonly xxzz: T4;\n readonly xyxz: T4;\n readonly xyyz: T4;\n readonly xyzx: T4;\n readonly xyzy: T4;\n readonly xyzz: T4;\n readonly xzxx: T4;\n readonly xzxy: T4;\n readonly xzxz: T4;\n readonly xzyx: T4;\n readonly xzyy: T4;\n readonly xzyz: T4;\n readonly xzzx: T4;\n readonly xzzy: T4;\n readonly xzzz: T4;\n readonly yxxz: T4;\n readonly yxyz: T4;\n readonly yxzx: T4;\n readonly yxzy: T4;\n readonly yxzz: T4;\n readonly yyxz: T4;\n readonly yyyz: T4;\n readonly yyzx: T4;\n readonly yyzy: T4;\n readonly yyzz: T4;\n readonly yzxx: T4;\n readonly yzxy: T4;\n readonly yzxz: T4;\n readonly yzyx: T4;\n readonly yzyy: T4;\n readonly yzyz: T4;\n readonly yzzx: T4;\n readonly yzzy: T4;\n readonly yzzz: T4;\n readonly zxxx: T4;\n readonly zxxy: T4;\n readonly zxxz: T4;\n readonly zxyx: T4;\n readonly zxyy: T4;\n readonly zxyz: T4;\n readonly zxzx: T4;\n readonly zxzy: T4;\n readonly zxzz: T4;\n readonly zyxx: T4;\n readonly zyxy: T4;\n readonly zyxz: T4;\n readonly zyyx: T4;\n readonly zyyy: T4;\n readonly zyyz: T4;\n readonly zyzx: T4;\n readonly zyzy: T4;\n readonly zyzz: T4;\n readonly zzxx: T4;\n readonly zzxy: T4;\n readonly zzxz: T4;\n readonly zzyx: T4;\n readonly zzyy: T4;\n readonly zzyz: T4;\n readonly zzzx: T4;\n readonly zzzy: T4;\n readonly zzzz: T4;\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3, T4> {\n readonly yw: T2;\n readonly zw: T2;\n readonly wx: T2;\n readonly wy: T2;\n readonly wz: T2;\n readonly ww: T2;\n\n readonly xxw: T3;\n readonly xyw: T3;\n readonly xzw: T3;\n readonly xwx: T3;\n readonly xwy: T3;\n readonly xwz: T3;\n readonly xww: T3;\n readonly yxw: T3;\n readonly yyw: T3;\n readonly yzw: T3;\n readonly ywx: T3;\n readonly ywy: T3;\n readonly ywz: T3;\n readonly yww: T3;\n readonly zxw: T3;\n readonly zyw: T3;\n readonly zzw: T3;\n readonly zwx: T3;\n readonly zwy: T3;\n readonly zwz: T3;\n readonly zww: T3;\n readonly wxx: T3;\n readonly wxz: T3;\n readonly wxy: T3;\n readonly wyy: T3;\n readonly wyz: T3;\n readonly wzz: T3;\n readonly wwx: T3;\n readonly wwy: T3;\n readonly wwz: T3;\n readonly www: T3;\n\n readonly xxxw: T4;\n readonly xxyw: T4;\n readonly xxzw: T4;\n readonly xxwx: T4;\n readonly xxwy: T4;\n readonly xxwz: T4;\n readonly xxww: T4;\n readonly xyxw: T4;\n readonly xyyw: T4;\n readonly xyzw: T4;\n readonly xywx: T4;\n readonly xywy: T4;\n readonly xywz: T4;\n readonly xyww: T4;\n readonly xzxw: T4;\n readonly xzyw: T4;\n readonly xzzw: T4;\n readonly xzwx: T4;\n readonly xzwy: T4;\n readonly xzwz: T4;\n readonly xzww: T4;\n readonly xwxx: T4;\n readonly xwxy: T4;\n readonly xwxz: T4;\n readonly xwyy: T4;\n readonly xwyz: T4;\n readonly xwzz: T4;\n readonly xwwx: T4;\n readonly xwwy: T4;\n readonly xwwz: T4;\n readonly xwww: T4;\n readonly yxxw: T4;\n readonly yxyw: T4;\n readonly yxzw: T4;\n readonly yxwx: T4;\n readonly yxwy: T4;\n readonly yxwz: T4;\n readonly yxww: T4;\n readonly yyxw: T4;\n readonly yyyw: T4;\n readonly yyzw: T4;\n readonly yywx: T4;\n readonly yywy: T4;\n readonly yywz: T4;\n readonly yyww: T4;\n readonly yzxw: T4;\n readonly yzyw: T4;\n readonly yzzw: T4;\n readonly yzwx: T4;\n readonly yzwy: T4;\n readonly yzwz: T4;\n readonly yzww: T4;\n readonly ywxx: T4;\n readonly ywxy: T4;\n readonly ywxz: T4;\n readonly ywxw: T4;\n readonly ywyy: T4;\n readonly ywyz: T4;\n readonly ywzz: T4;\n readonly ywwx: T4;\n readonly ywwy: T4;\n readonly ywwz: T4;\n readonly ywww: T4;\n readonly zxxw: T4;\n readonly zxyw: T4;\n readonly zxzw: T4;\n readonly zxwx: T4;\n readonly zxwy: T4;\n readonly zxwz: T4;\n readonly zxww: T4;\n readonly zyxw: T4;\n readonly zyyw: T4;\n readonly zyzw: T4;\n readonly zywx: T4;\n readonly zywy: T4;\n readonly zywz: T4;\n readonly zyww: T4;\n readonly zzxw: T4;\n readonly zzyw: T4;\n readonly zzzw: T4;\n readonly zzwx: T4;\n readonly zzwy: T4;\n readonly zzwz: T4;\n readonly zzww: T4;\n readonly zwxx: T4;\n readonly zwxy: T4;\n readonly zwxz: T4;\n readonly zwxw: T4;\n readonly zwyy: T4;\n readonly zwyz: T4;\n readonly zwzz: T4;\n readonly zwwx: T4;\n readonly zwwy: T4;\n readonly zwwz: T4;\n readonly zwww: T4;\n readonly wxxx: T4;\n readonly wxxy: T4;\n readonly wxxz: T4;\n readonly wxxw: T4;\n readonly wxyx: T4;\n readonly wxyy: T4;\n readonly wxyz: T4;\n readonly wxyw: T4;\n readonly wxzx: T4;\n readonly wxzy: T4;\n readonly wxzz: T4;\n readonly wxzw: T4;\n readonly wxwx: T4;\n readonly wxwy: T4;\n readonly wxwz: T4;\n readonly wxww: T4;\n readonly wyxx: T4;\n readonly wyxy: T4;\n readonly wyxz: T4;\n readonly wyxw: T4;\n readonly wyyy: T4;\n readonly wyyz: T4;\n readonly wyzw: T4;\n readonly wywx: T4;\n readonly wywy: T4;\n readonly wywz: T4;\n readonly wyww: T4;\n readonly wzxx: T4;\n readonly wzxy: T4;\n readonly wzxz: T4;\n readonly wzxw: T4;\n readonly wzyy: T4;\n readonly wzyz: T4;\n readonly wzzy: T4;\n readonly wzzw: T4;\n readonly wzwx: T4;\n readonly wzwy: T4;\n readonly wzwz: T4;\n readonly wzww: T4;\n readonly wwxx: T4;\n readonly wwxy: T4;\n readonly wwxz: T4;\n readonly wwxw: T4;\n readonly wwyy: T4;\n readonly wwyz: T4;\n readonly wwzz: T4;\n readonly wwwx: T4;\n readonly wwwy: T4;\n readonly wwwz: T4;\n readonly wwww: T4;\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\nconst vecProxyHandler: ProxyHandler<vecBase> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop);\n }\n\n const targetAsVec4 = target as unknown as vec4uImpl;\n const values = new Array(prop.length) as number[];\n\n let idx = 0;\n for (const char of prop as string) {\n switch (char) {\n case 'x':\n values[idx] = targetAsVec4.x;\n break;\n case 'y':\n values[idx] = targetAsVec4.y;\n break;\n case 'z':\n values[idx] = targetAsVec4.z;\n break;\n case 'w':\n values[idx] = targetAsVec4.w;\n break;\n default:\n return Reflect.get(targetAsVec4, prop);\n }\n idx++;\n }\n\n if (prop.length === 4) {\n return new Proxy(\n targetAsVec4.make4(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n values[3] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 3) {\n return new Proxy(\n targetAsVec4.make3(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 2) {\n return new Proxy(\n targetAsVec4.make2(values[0] as number, values[1] as number),\n vecProxyHandler,\n );\n }\n\n return Reflect.get(target, prop);\n },\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, vec3f, vec4f> {\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, vec3i, vec4i> {\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, vec3u, vec4u> {\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, vec4f> {\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, vec4i> {\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, vec4u> {\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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as vec2f,\n makeFromScalar: (x) =>\n new Proxy(new vec2fImpl(x, x), vecProxyHandler) as vec2f,\n}) as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = makeVecSchema({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as vec2i,\n makeFromScalar: (x) =>\n new Proxy(new vec2iImpl(x, x), vecProxyHandler) as vec2i,\n}) as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = makeVecSchema({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as vec2u,\n makeFromScalar: (x) =>\n new Proxy(new vec2uImpl(x, x), vecProxyHandler) as vec2u,\n}) 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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) =>\n new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as vec3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as vec3f,\n}) 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 = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) =>\n new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as vec3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as vec3i,\n}) 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 = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) =>\n new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as vec3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as vec3u,\n}) 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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as vec4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as vec4f,\n}) 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 = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as vec4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as vec4i,\n}) 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 = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as vec4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as vec4u,\n}) as Vec4u;\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"],"mappings":"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","names":["isResolvable","value","isGPUBuffer","value","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","makeVecSchema","options","VecSchema","ctx","RecursiveDataTypeError","output","value","alignIO_default","element","input","_","_value","measurer","Measurer","reference","prop","args","_a","values","vec2Impl","x","y","vec2fImpl","_vec2fImpl","__publicField","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","targetAsVec4","idx","char","vec2f","f32","vec2i","i32","vec2u","u32","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var D=Object.defineProperty;var S=(e,a)=>(a=Symbol[e])?a:Symbol.for("Symbol."+e);var A=(e,a,r)=>a in e?D(e,a,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[a]=r;var l=(e,a,r)=>(A(e,typeof a!="symbol"?a+"":a,r),r);var I=function(e,a){this[0]=e,this[1]=a};var F=e=>{var a=e[S("asyncIterator")],r=!1,n,y={};return a==null?(a=e[S("iterator")](),n=t=>y[t]=z=>a[t](z)):(a=a.call(e),n=t=>y[t]=z=>{if(r){if(r=!1,t==="throw")throw z;return z}return r=!0,{done:!1,value:new I(new Promise(R=>{var P=a[t](z);if(!(P instanceof Object))throw TypeError("Object expected");R(P)}),1)}}),y[S("iterator")]=()=>y,n("next"),"throw"in a?n("throw"):y.throw=t=>{throw t},"return"in a&&n("return"),y};function U(e){return!!e&&(typeof e=="object"||typeof e=="function")&&"resolve"in e}function M(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');function B(e,a){let r="size"in e?e.size:e.currentByteOffset,n=a-1,y=r&n;"skipBytes"in e?e.skipBytes(a-y&n):e.add(a-y&n)}var k=B;function u(e){let a={__unwrapped:void 0,size:e.length*4,label:e.label,byteAlignment:e.byteAlignment,expressionCode:e.label,resolveReferences(n){throw new g},write(n,y){k(n,this.byteAlignment);for(let t of y)e.unitType.write(n,t)},read(n){return k(n,this.byteAlignment),e.make(...Array.from({length:e.length}).map(y=>e.unitType.read(n)))},measure(n,y=new _typedbinary.Measurer){return k(y,this.byteAlignment),y.add(this.size)},seekProperty(n,y){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...n)=>{var t;let y=n;if(y.length<=1)return e.makeFromScalar((t=y[0])!=null?t:0);if(y.length===e.length)return e.make(...y);throw new Error(`'${e.label}' constructor called with invalid number of arguments.`)},a)}var b=class{constructor(a,r){this.x=a;this.y=r}*[Symbol.iterator](){yield this.x,yield this.y}},T=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2f")}make2(r,n){return new e(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,t){return new i(r,n,y,t)}},d=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2i")}make2(r,n){return new e(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,t){return new p(r,n,y,t)}},x=class e extends b{constructor(){super(...arguments);l(this,"kind","vec2u")}make2(r,n){return new e(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,t){return new m(r,n,y,t)}},v=class{constructor(a,r,n){this.x=a;this.y=r;this.z=n}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},c=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new i(r,n,y,t)}},s=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new p(r,n,y,t)}},w=class e extends v{constructor(){super(...arguments);l(this,"kind","vec3u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new e(r,n,y)}make4(r,n,y,t){return new m(r,n,y,t)}},f=class{constructor(a,r,n,y){this.x=a;this.y=r;this.z=n;this.w=y}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},i=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4f")}make2(r,n){return new T(r,n)}make3(r,n,y){return new c(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},p=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4i")}make2(r,n){return new d(r,n)}make3(r,n,y){return new s(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},m=class e extends f{constructor(){super(...arguments);l(this,"kind","vec4u")}make2(r,n){return new x(r,n)}make3(r,n,y){return new w(r,n,y)}make4(r,n,y,t){return new e(r,n,y,t)}},o={get:(e,a)=>{if(typeof a=="symbol")return Reflect.get(e,a);let r=e,n=new Array(a.length),y=0;for(let t of a){switch(t){case"x":n[y]=r.x;break;case"y":n[y]=r.y;break;case"z":n[y]=r.z;break;case"w":n[y]=r.w;break;default:return Reflect.get(r,a)}y++}return a.length===4?new Proxy(r.make4(n[0],n[1],n[2],n[3]),o):a.length===3?new Proxy(r.make3(n[0],n[1],n[2]),o):a.length===2?new Proxy(r.make2(n[0],n[1]),o):Reflect.get(e,a)}},H= exports.g =u({unitType:_typedbinary.f32,byteAlignment:8,length:2,label:"vec2f",make:(e,a)=>new Proxy(new T(e,a),o),makeFromScalar:e=>new Proxy(new T(e,e),o)}),K= exports.h =u({unitType:_typedbinary.i32,byteAlignment:8,length:2,label:"vec2i",make:(e,a)=>new Proxy(new d(e,a),o),makeFromScalar:e=>new Proxy(new d(e,e),o)}),q= exports.i =u({unitType:_typedbinary.u32,byteAlignment:8,length:2,label:"vec2u",make:(e,a)=>new Proxy(new x(e,a),o),makeFromScalar:e=>new Proxy(new x(e,e),o)}),L= exports.j =u({unitType:_typedbinary.f32,byteAlignment:16,length:3,label:"vec3f",make:(e,a,r)=>new Proxy(new c(e,a,r),o),makeFromScalar:e=>new Proxy(new c(e,e,e),o)}),J= exports.k =u({unitType:_typedbinary.i32,byteAlignment:16,length:3,label:"vec3i",make:(e,a,r)=>new Proxy(new s(e,a,r),o),makeFromScalar:e=>new Proxy(new s(e,e,e),o)}),Q= exports.l =u({unitType:_typedbinary.u32,byteAlignment:16,length:3,label:"vec3u",make:(e,a,r)=>new Proxy(new w(e,a,r),o),makeFromScalar:e=>new Proxy(new w(e,e,e),o)}),X= exports.m =u({unitType:_typedbinary.f32,byteAlignment:16,length:4,label:"vec4f",make:(e,a,r,n)=>new Proxy(new i(e,a,r,n),o),makeFromScalar:e=>new Proxy(new i(e,e,e,e),o)}),Y= exports.n =u({unitType:_typedbinary.i32,byteAlignment:16,length:4,label:"vec4i",make:(e,a,r,n)=>new Proxy(new p(e,a,r,n),o),makeFromScalar:e=>new Proxy(new p(e,e,e,e),o)}),Z= exports.o =u({unitType:_typedbinary.u32,byteAlignment:16,length:4,label:"vec4u",make:(e,a,r,n)=>new Proxy(new m(e,a,r,n),o),makeFromScalar:e=>new Proxy(new m(e,e,e,e),o)});exports.a = l; exports.b = F; exports.c = U; exports.d = M; exports.e = g; exports.f = k; exports.g = H; exports.h = K; exports.i = q; exports.j = L; exports.k = J; exports.l = Q; exports.m = X; exports.n = Y; exports.o = Z;
2
+ //# sourceMappingURL=chunk-PMM3NYJ4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/data/vector.ts","../src/data/alignIO.ts"],"names":["isResolvable","value","isGPUBuffer","RecursiveDataTypeError","_RecursiveDataTypeError","Measurer","f32","i32","u32","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","makeVecSchema","options","VecSchema","ctx","output","element","input","_","_value","measurer","reference","prop","args","_a","values","vec2Impl","x","y","vec2fImpl","_vec2fImpl","__publicField","z","vec3fImpl","w","vec4fImpl","vec2iImpl","_vec2iImpl","vec3iImpl","vec4iImpl","vec2uImpl","_vec2uImpl","vec3uImpl","vec4uImpl","vec3Impl","_vec3fImpl","_vec3iImpl","_vec3uImpl","vec4Impl","_vec4fImpl","_vec4iImpl","_vec4uImpl","vecProxyHandler","target","targetAsVec4","idx","char","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u"],"mappings":"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","sourcesContent":["import type { ISchema, Parsed, Unwrap } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport type { TgpuBufferUsage } from './tgpuBufferUsage';\nimport type { TgpuFn } from './tgpuFn';\nimport type { TgpuPlum } from './tgpuPlumTypes';\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: symbol): 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 transpileFn(\n // biome-ignore lint/suspicious/noExplicitAny: <no need for generic magic>\n fn: TgpuFn<any, any>,\n externalMap: Record<string, Wgsl>,\n ): {\n head: Wgsl;\n body: Wgsl;\n };\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport interface TgpuIdentifier extends TgpuNamable, TgpuResolvable {}\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\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 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\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';\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 type ValueOf<T> = T extends TgpuSlot<infer I>\n ? ValueOf<I>\n : T extends TgpuBufferUsage<infer D>\n ? ValueOf<D>\n : T extends TgpuData<unknown>\n ? Unwrap<T>\n : T;\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\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\n// -----------------\n// TypeGPU Resources\n// -----------------\n\n// Code\n\nexport interface BoundTgpuCode extends TgpuResolvable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport interface TgpuCode extends BoundTgpuCode, TgpuNamable {}\n\n// Slot\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 value: ValueOf<T>;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\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 { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<ValueType> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => ValueType;\n makeFromScalar: (value: number) => ValueType;\n}\n\ntype VecSchemaBase<ValueType> = TgpuData<ValueType> & {\n expressionCode: string;\n};\n\nfunction makeVecSchema<ValueType extends vecBase>(\n options: VecSchemaOptions<ValueType>,\n): VecSchemaBase<ValueType> & ((...args: number[]) => ValueType) {\n const VecSchema: VecSchemaBase<ValueType> = {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as ValueType,\n\n size: options.length * 4,\n label: options.label,\n byteAlignment: options.byteAlignment,\n expressionCode: options.label,\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n alignIO(output, this.byteAlignment);\n for (const element of value) {\n options.unitType.write(output, element);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n alignIO(input, this.byteAlignment);\n return options.make(\n ...Array.from({ length: options.length }).map((_) =>\n options.unitType.read(input),\n ),\n ) as Parsed<ValueType>;\n },\n\n measure(\n _value: Parsed<ValueType> | 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<ValueType> | 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 options.label;\n },\n };\n\n const construct = (...args: number[]): ValueType => {\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 options.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === options.length) {\n return options.make(...values);\n }\n\n throw new Error(\n `'${options.label}' constructor called with invalid number of arguments.`,\n );\n };\n\n return Object.assign(construct, VecSchema);\n}\n\nabstract class vec2Impl implements vec2 {\n constructor(\n public x: number,\n public y: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n }\n}\n\nclass vec2fImpl extends vec2Impl {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec2iImpl extends vec2Impl {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec2uImpl extends vec2Impl {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec3Impl implements vec3 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {}\n\n *[Symbol.iterator]() {\n yield this.x;\n yield this.y;\n yield this.z;\n }\n}\n\nclass vec3fImpl extends vec3Impl {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec3iImpl extends vec3Impl {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec3uImpl extends vec3Impl {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\nabstract class vec4Impl implements vec4 {\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\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 {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y) as unknown as vec2f;\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z) as unknown as vec3f;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w) as unknown as vec4f;\n }\n}\n\nclass vec4iImpl extends vec4Impl {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y) as unknown as vec2i;\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z) as unknown as vec3i;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w) as unknown as vec4i;\n }\n}\n\nclass vec4uImpl extends vec4Impl {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y) as unknown as vec2u;\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z) as unknown as vec3u;\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w) as unknown as vec4u;\n }\n}\n\ninterface Swizzle2<T2, T3, T4> {\n readonly xx: T2;\n readonly xy: T2;\n readonly yx: T2;\n readonly yy: T2;\n\n readonly xxx: T3;\n readonly xxy: T3;\n readonly xyx: T3;\n readonly xyy: T3;\n readonly yxx: T3;\n readonly yxy: T3;\n readonly yyx: T3;\n readonly yyy: T3;\n\n readonly xxxx: T4;\n readonly xxxy: T4;\n readonly xxyx: T4;\n readonly xxyy: T4;\n readonly xyxx: T4;\n readonly xyxy: T4;\n readonly xyyx: T4;\n readonly xyyy: T4;\n readonly yxxx: T4;\n readonly yxxy: T4;\n readonly yxyx: T4;\n readonly yxyy: T4;\n readonly yyxx: T4;\n readonly yyxy: T4;\n readonly yyyx: T4;\n readonly yyyy: T4;\n}\n\ninterface Swizzle3<T2, T3, T4> extends Swizzle2<T2, T3, T4> {\n readonly xz: T2;\n readonly yz: T2;\n readonly zx: T2;\n readonly zy: T2;\n readonly zz: T2;\n\n readonly xxz: T3;\n readonly xyz: T3;\n readonly xzx: T3;\n readonly xzy: T3;\n readonly xzz: T3;\n readonly yxz: T3;\n readonly yyz: T3;\n readonly yzx: T3;\n readonly yzy: T3;\n readonly yzz: T3;\n readonly zxx: T3;\n readonly zxy: T3;\n readonly zxz: T3;\n readonly zyx: T3;\n readonly zyy: T3;\n readonly zyz: T3;\n readonly zzx: T3;\n readonly zzy: T3;\n readonly zzz: T3;\n\n readonly xxxz: T4;\n readonly xxyz: T4;\n readonly xxzx: T4;\n readonly xxzy: T4;\n readonly xxzz: T4;\n readonly xyxz: T4;\n readonly xyyz: T4;\n readonly xyzx: T4;\n readonly xyzy: T4;\n readonly xyzz: T4;\n readonly xzxx: T4;\n readonly xzxy: T4;\n readonly xzxz: T4;\n readonly xzyx: T4;\n readonly xzyy: T4;\n readonly xzyz: T4;\n readonly xzzx: T4;\n readonly xzzy: T4;\n readonly xzzz: T4;\n readonly yxxz: T4;\n readonly yxyz: T4;\n readonly yxzx: T4;\n readonly yxzy: T4;\n readonly yxzz: T4;\n readonly yyxz: T4;\n readonly yyyz: T4;\n readonly yyzx: T4;\n readonly yyzy: T4;\n readonly yyzz: T4;\n readonly yzxx: T4;\n readonly yzxy: T4;\n readonly yzxz: T4;\n readonly yzyx: T4;\n readonly yzyy: T4;\n readonly yzyz: T4;\n readonly yzzx: T4;\n readonly yzzy: T4;\n readonly yzzz: T4;\n readonly zxxx: T4;\n readonly zxxy: T4;\n readonly zxxz: T4;\n readonly zxyx: T4;\n readonly zxyy: T4;\n readonly zxyz: T4;\n readonly zxzx: T4;\n readonly zxzy: T4;\n readonly zxzz: T4;\n readonly zyxx: T4;\n readonly zyxy: T4;\n readonly zyxz: T4;\n readonly zyyx: T4;\n readonly zyyy: T4;\n readonly zyyz: T4;\n readonly zyzx: T4;\n readonly zyzy: T4;\n readonly zyzz: T4;\n readonly zzxx: T4;\n readonly zzxy: T4;\n readonly zzxz: T4;\n readonly zzyx: T4;\n readonly zzyy: T4;\n readonly zzyz: T4;\n readonly zzzx: T4;\n readonly zzzy: T4;\n readonly zzzz: T4;\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3, T4> {\n readonly yw: T2;\n readonly zw: T2;\n readonly wx: T2;\n readonly wy: T2;\n readonly wz: T2;\n readonly ww: T2;\n\n readonly xxw: T3;\n readonly xyw: T3;\n readonly xzw: T3;\n readonly xwx: T3;\n readonly xwy: T3;\n readonly xwz: T3;\n readonly xww: T3;\n readonly yxw: T3;\n readonly yyw: T3;\n readonly yzw: T3;\n readonly ywx: T3;\n readonly ywy: T3;\n readonly ywz: T3;\n readonly yww: T3;\n readonly zxw: T3;\n readonly zyw: T3;\n readonly zzw: T3;\n readonly zwx: T3;\n readonly zwy: T3;\n readonly zwz: T3;\n readonly zww: T3;\n readonly wxx: T3;\n readonly wxz: T3;\n readonly wxy: T3;\n readonly wyy: T3;\n readonly wyz: T3;\n readonly wzz: T3;\n readonly wwx: T3;\n readonly wwy: T3;\n readonly wwz: T3;\n readonly www: T3;\n\n readonly xxxw: T4;\n readonly xxyw: T4;\n readonly xxzw: T4;\n readonly xxwx: T4;\n readonly xxwy: T4;\n readonly xxwz: T4;\n readonly xxww: T4;\n readonly xyxw: T4;\n readonly xyyw: T4;\n readonly xyzw: T4;\n readonly xywx: T4;\n readonly xywy: T4;\n readonly xywz: T4;\n readonly xyww: T4;\n readonly xzxw: T4;\n readonly xzyw: T4;\n readonly xzzw: T4;\n readonly xzwx: T4;\n readonly xzwy: T4;\n readonly xzwz: T4;\n readonly xzww: T4;\n readonly xwxx: T4;\n readonly xwxy: T4;\n readonly xwxz: T4;\n readonly xwyy: T4;\n readonly xwyz: T4;\n readonly xwzz: T4;\n readonly xwwx: T4;\n readonly xwwy: T4;\n readonly xwwz: T4;\n readonly xwww: T4;\n readonly yxxw: T4;\n readonly yxyw: T4;\n readonly yxzw: T4;\n readonly yxwx: T4;\n readonly yxwy: T4;\n readonly yxwz: T4;\n readonly yxww: T4;\n readonly yyxw: T4;\n readonly yyyw: T4;\n readonly yyzw: T4;\n readonly yywx: T4;\n readonly yywy: T4;\n readonly yywz: T4;\n readonly yyww: T4;\n readonly yzxw: T4;\n readonly yzyw: T4;\n readonly yzzw: T4;\n readonly yzwx: T4;\n readonly yzwy: T4;\n readonly yzwz: T4;\n readonly yzww: T4;\n readonly ywxx: T4;\n readonly ywxy: T4;\n readonly ywxz: T4;\n readonly ywxw: T4;\n readonly ywyy: T4;\n readonly ywyz: T4;\n readonly ywzz: T4;\n readonly ywwx: T4;\n readonly ywwy: T4;\n readonly ywwz: T4;\n readonly ywww: T4;\n readonly zxxw: T4;\n readonly zxyw: T4;\n readonly zxzw: T4;\n readonly zxwx: T4;\n readonly zxwy: T4;\n readonly zxwz: T4;\n readonly zxww: T4;\n readonly zyxw: T4;\n readonly zyyw: T4;\n readonly zyzw: T4;\n readonly zywx: T4;\n readonly zywy: T4;\n readonly zywz: T4;\n readonly zyww: T4;\n readonly zzxw: T4;\n readonly zzyw: T4;\n readonly zzzw: T4;\n readonly zzwx: T4;\n readonly zzwy: T4;\n readonly zzwz: T4;\n readonly zzww: T4;\n readonly zwxx: T4;\n readonly zwxy: T4;\n readonly zwxz: T4;\n readonly zwxw: T4;\n readonly zwyy: T4;\n readonly zwyz: T4;\n readonly zwzz: T4;\n readonly zwwx: T4;\n readonly zwwy: T4;\n readonly zwwz: T4;\n readonly zwww: T4;\n readonly wxxx: T4;\n readonly wxxy: T4;\n readonly wxxz: T4;\n readonly wxxw: T4;\n readonly wxyx: T4;\n readonly wxyy: T4;\n readonly wxyz: T4;\n readonly wxyw: T4;\n readonly wxzx: T4;\n readonly wxzy: T4;\n readonly wxzz: T4;\n readonly wxzw: T4;\n readonly wxwx: T4;\n readonly wxwy: T4;\n readonly wxwz: T4;\n readonly wxww: T4;\n readonly wyxx: T4;\n readonly wyxy: T4;\n readonly wyxz: T4;\n readonly wyxw: T4;\n readonly wyyy: T4;\n readonly wyyz: T4;\n readonly wyzw: T4;\n readonly wywx: T4;\n readonly wywy: T4;\n readonly wywz: T4;\n readonly wyww: T4;\n readonly wzxx: T4;\n readonly wzxy: T4;\n readonly wzxz: T4;\n readonly wzxw: T4;\n readonly wzyy: T4;\n readonly wzyz: T4;\n readonly wzzy: T4;\n readonly wzzw: T4;\n readonly wzwx: T4;\n readonly wzwy: T4;\n readonly wzwz: T4;\n readonly wzww: T4;\n readonly wwxx: T4;\n readonly wwxy: T4;\n readonly wwxz: T4;\n readonly wwxw: T4;\n readonly wwyy: T4;\n readonly wwyz: T4;\n readonly wwzz: T4;\n readonly wwwx: T4;\n readonly wwwy: T4;\n readonly wwwz: T4;\n readonly wwww: T4;\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\nconst vecProxyHandler: ProxyHandler<vecBase> = {\n get: (target, prop) => {\n if (typeof prop === 'symbol') {\n return Reflect.get(target, prop);\n }\n\n const targetAsVec4 = target as unknown as vec4uImpl;\n const values = new Array(prop.length) as number[];\n\n let idx = 0;\n for (const char of prop as string) {\n switch (char) {\n case 'x':\n values[idx] = targetAsVec4.x;\n break;\n case 'y':\n values[idx] = targetAsVec4.y;\n break;\n case 'z':\n values[idx] = targetAsVec4.z;\n break;\n case 'w':\n values[idx] = targetAsVec4.w;\n break;\n default:\n return Reflect.get(targetAsVec4, prop);\n }\n idx++;\n }\n\n if (prop.length === 4) {\n return new Proxy(\n targetAsVec4.make4(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n values[3] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 3) {\n return new Proxy(\n targetAsVec4.make3(\n values[0] as number,\n values[1] as number,\n values[2] as number,\n ),\n vecProxyHandler,\n );\n }\n\n if (prop.length === 2) {\n return new Proxy(\n targetAsVec4.make2(values[0] as number, values[1] as number),\n vecProxyHandler,\n );\n }\n\n return Reflect.get(target, prop);\n },\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, vec3f, vec4f> {\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, vec3i, vec4i> {\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, vec3u, vec4u> {\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, vec4f> {\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, vec4i> {\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, vec4u> {\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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) =>\n new Proxy(new vec2fImpl(x, y), vecProxyHandler) as vec2f,\n makeFromScalar: (x) =>\n new Proxy(new vec2fImpl(x, x), vecProxyHandler) as vec2f,\n}) as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = makeVecSchema({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) =>\n new Proxy(new vec2iImpl(x, y), vecProxyHandler) as vec2i,\n makeFromScalar: (x) =>\n new Proxy(new vec2iImpl(x, x), vecProxyHandler) as vec2i,\n}) as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = makeVecSchema({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) =>\n new Proxy(new vec2uImpl(x, y), vecProxyHandler) as vec2u,\n makeFromScalar: (x) =>\n new Proxy(new vec2uImpl(x, x), vecProxyHandler) as vec2u,\n}) 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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) =>\n new Proxy(new vec3fImpl(x, y, z), vecProxyHandler) as vec3f,\n makeFromScalar: (x) =>\n new Proxy(new vec3fImpl(x, x, x), vecProxyHandler) as vec3f,\n}) 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 = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) =>\n new Proxy(new vec3iImpl(x, y, z), vecProxyHandler) as vec3i,\n makeFromScalar: (x) =>\n new Proxy(new vec3iImpl(x, x, x), vecProxyHandler) as vec3i,\n}) 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 = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) =>\n new Proxy(new vec3uImpl(x, y, z), vecProxyHandler) as vec3u,\n makeFromScalar: (x) =>\n new Proxy(new vec3uImpl(x, x, x), vecProxyHandler) as vec3u,\n}) 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 = makeVecSchema({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) =>\n new Proxy(new vec4fImpl(x, y, z, w), vecProxyHandler) as vec4f,\n makeFromScalar: (x) =>\n new Proxy(new vec4fImpl(x, x, x, x), vecProxyHandler) as vec4f,\n}) 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 = makeVecSchema({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) =>\n new Proxy(new vec4iImpl(x, y, z, w), vecProxyHandler) as vec4i,\n makeFromScalar: (x) =>\n new Proxy(new vec4iImpl(x, x, x, x), vecProxyHandler) as vec4i,\n}) 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 = makeVecSchema({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) =>\n new Proxy(new vec4uImpl(x, y, z, w), vecProxyHandler) as vec4u,\n makeFromScalar: (x) =>\n new Proxy(new vec4uImpl(x, x, x, x), vecProxyHandler) as vec4u,\n}) as Vec4u;\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"]}
package/data/index.cjs CHANGED
@@ -1,8 +1,8 @@
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`})}
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 _chunkPMM3NYJ4cjs = require('../chunk-PMM3NYJ4.cjs');var _typedbinary = require('typed-binary'); var p = _interopRequireWildcard(_typedbinary);var c=class extends _typedbinary.Schema{constructor({schema:e,byteAlignment:n,code:a}){super();_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"expressionCode");_chunkPMM3NYJ4cjs.a.call(void 0, this,"_innerSchema");this._innerSchema=e,this.byteAlignment=n,this.expressionCode=a,this.size=this.measure(_typedbinary.MaxValue).size}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this._innerSchema.measure(e,n),n}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 c({schema:p.bool,byteAlignment:4,code:"bool"}),fe= exports.u32 =new c({schema:p.u32,byteAlignment:4,code:"u32"}),xe= exports.i32 =new c({schema:p.i32,byteAlignment:4,code:"i32"}),we= exports.f32 =new c({schema:p.f32,byteAlignment:4,code:"f32"});var u={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")},ve=Object.values(u);function T(){return new v}var v=class{constructor(){_chunkPMM3NYJ4cjs.a.call(void 0, this,"label")}$name(t){return this.label=t,this}resolve(t){return t.nameFor(this)}toString(){var t;return`id:${(t=this.label)!=null?t:"<unnamed>"}`}};var W={[u.vertexIndex]:"vertex_index",[u.instanceIndex]:"instance_index",[u.position]:"position",[u.clipDistances]:"clip_distances",[u.frontFacing]:"front_facing",[u.fragDepth]:"frag_depth",[u.sampleIndex]:"sample_index",[u.sampleMask]:"sample_mask",[u.fragment]:"fragment",[u.localInvocationId]:"local_invocation_id",[u.localInvocationIndex]:"local_invocation_index",[u.globalInvocationId]:"global_invocation_id",[u.workgroupId]:"workgroup_id",[u.numWorkgroups]:"num_workgroups"},z=new Map;function B(r){let t=z.get(r);return t===void 0&&(t=T().$name(W[r]),z.set(r,t)),t}function _(r,...t){let e=r.flatMap((n,a)=>{let o=t[a];return o===void 0?[n]:Array.isArray(o)?[n,...o]:[n,o]});return new C(e)}var C=class{constructor(t){this.segments=t;_chunkPMM3NYJ4cjs.a.call(void 0, this,"_label")}get label(){return this._label}$name(t){return this._label=t,this}resolve(t){let e="";for(let n of this.segments)if(_chunkPMM3NYJ4cjs.c.call(void 0, n))e+=t.resolve(n);else if(typeof n=="function"){let a=n(o=>t.unwrap(o));e+=t.resolve(a)}else typeof n=="symbol"?(t.addBuiltin(n),e+=t.resolve(B(n))):e+=String(n);return e}with(t,e){return new I(this,[t,e])}toString(){var t;return`code:${(t=this._label)!=null?t:"<unnamed>"}`}},I=class r{constructor(t,e){this._innerFn=t;this._slotValuePair=e}get label(){return this._innerFn.label}with(t,e){return new r(this,[t,e])}resolve(t){return t.resolve(this._innerFn,[this._slotValuePair])}toString(){var n,a;let[t,e]=this._slotValuePair;return`code:${(n=this.label)!=null?n:"<unnamed>"}[${(a=t.label)!=null?a:"<unnamed>"}=${e}]`}};function G(r,t){return new d(t,r)}var d=class extends _typedbinary.Schema{constructor(e,n){super();this.data=e;this.byteAlignment=n;_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");if(this.size=this.data.size,n<=0)throw new Error(`Custom data alignment must be a positive number, got: ${n}.`);if(Math.log2(n)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${n}.`);if(n%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${n}, expected multiple of: ${this.data.byteAlignment}.`)}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this.data.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this.data.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this.data.measure(e,n)}resolve(e){return this.data.resolve(e)}};function J(r,t){return new y(t,r)}var y=class extends _typedbinary.Schema{constructor(e,n){super();this.data=e;this.size=n;_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");if(this.byteAlignment=this.data.byteAlignment,n<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${n}, expected at least: ${this.data.size}.`);if(n<=0)throw new Error(`Custom data size must be a positive number. Got: ${n}.`)}write(e,n){this.data.write(e,n)}read(e){return this.data.read(e)}measure(e,n=new _typedbinary.Measurer){return n.add(this.size)}resolve(e){return this.data.resolve(e)}};var Ke=r=>new D(r),D=class extends _typedbinary.Schema{constructor(e){super();this._properties=e;_chunkPMM3NYJ4cjs.a.call(void 0, this,"_label");_chunkPMM3NYJ4cjs.a.call(void 0, this,"_innerSchema");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");this._innerSchema=_typedbinary.object.call(void 0, e),this.byteAlignment=Object.values(e).map(n=>n.byteAlignment).reduce((n,a)=>n>a?n:a),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.write(e,n)}read(e){return _chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment),this._innerSchema.read(e)}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),this._innerSchema.measure(e,n),n}resolve(e){let n=T().$name(this._label);return e.addDeclaration(_`
2
+ struct ${n} {
3
+ ${Object.entries(this._properties).map(([a,o])=>{var k;return _`${(k=Y(o))!=null?k:""}${a}: ${o},\n`})}
4
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(`
5
+ `),e.resolve(n)}};function Y(r){if(r instanceof d)return`@align(${r.byteAlignment}) `;if(r instanceof y)return`@size(${r.size}) `}var b=(r,t)=>{let e=t-1,n=~e;return r&e?(r&n)+t:r};var A=class extends _typedbinary.Schema{constructor(e,n){super();_chunkPMM3NYJ4cjs.a.call(void 0, this,"elementType");_chunkPMM3NYJ4cjs.a.call(void 0, this,"elementCount");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"stride");this.elementType=e,this.elementCount=n,this.byteAlignment=e.byteAlignment,this.stride=b(this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(e,n){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment);let a=e.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,n.length);o++)this.elementType.write(e,n[o]);e.seekTo(a+this.stride*this.elementCount)}read(e){_chunkPMM3NYJ4cjs.f.call(void 0, e,this.byteAlignment);let n=[];for(let a=0;a<this.elementCount;a++)n.push(this.elementType.read(e));return n}measure(e,n=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, n,this.byteAlignment),n.add(this.stride*this.elementCount)}resolve(e){return e.resolve(`
6
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;
7
+ `)}},tt= exports.arrayOf =(r,t)=>new A(r,t);function R(r){let t={__unwrapped:void 0,label:r.label,byteAlignment:r.columnType.byteAlignment,size:b(r.columnType.size*r.columns,r.columnType.byteAlignment),resolveReferences(){throw new _chunkPMM3NYJ4cjs.e},write(n,a){for(let o of a.columns())r.columnType.write(n,o)},read(n){let a=new Array(r.columns);for(let o=0;o<r.columns;++o)a[o]=r.columnType.read(n);return r.makeFromColumnVectors(...a)},measure(n,a=new _typedbinary.Measurer){return _chunkPMM3NYJ4cjs.f.call(void 0, a,this.byteAlignment),a.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return r.label}};return Object.assign((...n)=>{let a=[];for(let o of n)typeof o=="number"?a.push(o):a.push(...o);for(let o=a.length;o<r.columns*r.rows;++o)a.push(0);return r.makeFromElements(...a)},t)}var U=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(2));this._columns[0]=this.makeColumn(t[0],t[1]),this._columns[1]=this.makeColumn(t[2],t[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},h=class extends U{makeColumn(t,e){return _chunkPMM3NYJ4cjs.g.call(void 0, t,e)}},M=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(3));this._columns[0]=this.makeColumn(t[0],t[1],t[2]),this._columns[1]=this.makeColumn(t[3],t[4],t[5]),this._columns[2]=this.makeColumn(t[6],t[7],t[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},g=class extends M{makeColumn(t,e,n){return _chunkPMM3NYJ4cjs.j.call(void 0, t,e,n)}},P=class{constructor(...t){_chunkPMM3NYJ4cjs.a.call(void 0, this,"_columns",new Array(4));this._columns[0]=this.makeColumn(t[0],t[1],t[2],t[3]),this._columns[1]=this.makeColumn(t[4],t[5],t[6],t[7]),this._columns[2]=this.makeColumn(t[8],t[9],t[10],t[11]),this._columns[3]=this.makeColumn(t[12],t[13],t[14],t[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[0]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[1]),yield*_chunkPMM3NYJ4cjs.b.call(void 0, this._columns[2]),yield*_chunkPMM3NYJ4cjs.b.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]}},f=class extends P{makeColumn(t,e,n,a){return _chunkPMM3NYJ4cjs.m.call(void 0, t,e,n,a)}},mt= exports.mat2x2f =R({label:"mat2x2f",columnType:_chunkPMM3NYJ4cjs.g,rows:2,columns:2,makeFromColumnVectors:(...r)=>new h(...r[0],...r[1]),makeFromElements:(...r)=>new h(...r)}),lt= exports.mat3x3f =R({label:"mat3x3f",columnType:_chunkPMM3NYJ4cjs.j,rows:3,columns:3,makeFromColumnVectors(...[r,t,e]){return new g(...r,...t,...e)},makeFromElements:(...r)=>new g(...r)}),pt= exports.mat4x4f =R({label:"mat4x4f",columnType:_chunkPMM3NYJ4cjs.m,rows:4,columns:4,makeFromColumnVectors(...[r,t,e,n]){return new f(...r,...t,...e,...n)},makeFromElements:(...r)=>new f(...r)});function ne(r){return{scope:"function",pointsTo:r}}function se(r){return new V(r)}var V=class extends _typedbinary.Schema{constructor(e){super();this.innerData=e;_chunkPMM3NYJ4cjs.a.call(void 0, this,"size");_chunkPMM3NYJ4cjs.a.call(void 0, this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new _chunkPMM3NYJ4cjs.e}write(e,n){this.innerData.write(e,n)}read(e){return this.innerData.read(e)}measure(e,n=new _typedbinary.Measurer){return this.innerData.measure(e,n)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};exports.SimpleTgpuData = c; exports.TgpuArrayImpl = A; exports.align = G; exports.arrayOf = tt; exports.atomic = se; exports.bool = ge; exports.f32 = we; exports.i32 = xe; exports.mat2x2f = mt; exports.mat3x3f = lt; exports.mat4x4f = pt; exports.ptr = ne; exports.size = J; exports.struct = Ke; exports.u32 = fe; exports.vec2f = _chunkPMM3NYJ4cjs.g; exports.vec2i = _chunkPMM3NYJ4cjs.h; exports.vec2u = _chunkPMM3NYJ4cjs.i; exports.vec3f = _chunkPMM3NYJ4cjs.j; exports.vec3i = _chunkPMM3NYJ4cjs.k; exports.vec3u = _chunkPMM3NYJ4cjs.l; exports.vec4f = _chunkPMM3NYJ4cjs.m; exports.vec4i = _chunkPMM3NYJ4cjs.n; exports.vec4u = _chunkPMM3NYJ4cjs.o;
8
8
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../../src/data/std140.ts","../../src/data/numeric.ts","../../src/data/struct.ts","../../src/builtin.ts","../../src/tgpuIdentifier.ts","../../src/builtinIdentifiers.ts","../../src/tgpuCode.ts","../../src/data/align.ts","../../src/data/size.ts","../../src/data/array.ts","../../src/mathUtils.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","builtin","builtins","identifier","TgpuIdentifierImpl","label","_a","builtinToName","identifierMap","idForBuiltin","key","id","strings","params","segments","string","idx","param","TgpuCodeImpl","s","isResolvable","result","eventual","slot","BoundTgpuCodeImpl","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b","align","data","TgpuAlignedImpl","size","TgpuSizedImpl","struct","properties","TgpuStructImpl","_properties","prop","a","b","ident","field","getAttribute","roundUp","modulo","bitMask","invBitMask","TgpuArrayImpl","elementType","count","beginning","i","elements","arrayOf","createMatSchema","options","MatSchema","col","columns","c","_value","args","arg","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 { TgpuNamable } from '../namable';\nimport { code } from '../tgpuCode';\nimport { identifier } from '../tgpuIdentifier';\nimport type { AnyTgpuData, ResolutionCtx, TgpuData } from '../types';\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 ident = identifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${ident} {\n ${Object.entries(this._properties).map(([key, field]) => code`${getAttribute(field) ?? ''}${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(ident);\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","export 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\nconst builtins = Object.values(builtin);\n\nexport function getUsedBuiltinsNamed(\n o: Record<symbol, string>,\n): { name: string; builtin: symbol }[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtins.includes(s)) {\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: s };\n });\n return res;\n}\n\nexport function getUsedBuiltins(o: Record<symbol, string>): symbol[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtins.includes(s)) {\n throw new Error('Symbol is not a member of `builtin`');\n }\n return s;\n });\n\n return res;\n}\n","import type { TgpuNamable } from './namable';\nimport type { ResolutionCtx, TgpuResolvable } from './types';\n\n// ----------\n// Public API\n// ----------\n\n/**\n * Helpful when creating new Resolvable types. For internal use.\n */\nexport function identifier() {\n return new TgpuIdentifierImpl();\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuIdentifierImpl 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 { builtin } from './builtin';\nimport { identifier } from './tgpuIdentifier';\nimport type { TgpuIdentifier } from './types';\n\nconst builtinToName = {\n [builtin.vertexIndex]: 'vertex_index',\n [builtin.instanceIndex]: 'instance_index',\n [builtin.position]: 'position',\n [builtin.clipDistances]: 'clip_distances',\n [builtin.frontFacing]: 'front_facing',\n [builtin.fragDepth]: 'frag_depth',\n [builtin.sampleIndex]: 'sample_index',\n [builtin.sampleMask]: 'sample_mask',\n [builtin.fragment]: 'fragment',\n [builtin.localInvocationId]: 'local_invocation_id',\n [builtin.localInvocationIndex]: 'local_invocation_index',\n [builtin.globalInvocationId]: 'global_invocation_id',\n [builtin.workgroupId]: 'workgroup_id',\n [builtin.numWorkgroups]: 'num_workgroups',\n};\n\nconst identifierMap = new Map<symbol, TgpuIdentifier>();\n\nexport function nameForBuiltin(key: symbol): string {\n const name = builtinToName[key];\n if (!name) {\n throw new Error(`The symbol ${String(key)} in not a valid 'builtin'`);\n }\n\n return name;\n}\n\nexport function idForBuiltin(key: symbol) {\n let id = identifierMap.get(key);\n\n if (id === undefined) {\n id = identifier().$name(builtinToName[key]);\n identifierMap.set(key, id);\n }\n\n return id;\n}\n","import { idForBuiltin } from './builtinIdentifiers';\nimport {\n type BoundTgpuCode,\n type Eventual,\n type InlineResolve,\n type ResolutionCtx,\n type SlotValuePair,\n type TgpuCode,\n type TgpuSlot,\n type Wgsl,\n isResolvable,\n} from './types';\n\n// ----------\n// Public API\n// ----------\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 ctx.addBuiltin(s);\n code += ctx.resolve(idForBuiltin(s));\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","/**\n * @param value\n * @param modulo has to be power of 2\n */\nexport const roundUp = (value: number, modulo: number) => {\n const bitMask = modulo - 1;\n const invBitMask = ~bitMask;\n return (value & bitMask) === 0 ? value : (value & invBitMask) + modulo;\n};\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n} from 'typed-binary';\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<ValueType, ColumnType extends vecBase> {\n label: string;\n columnType: TgpuData<ColumnType>;\n rows: number;\n columns: number;\n makeFromColumnVectors(...columns: ColumnType[]): ValueType;\n makeFromElements(...elements: number[]): ValueType;\n}\n\ntype MatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n> = TgpuData<ValueType> & ((...args: (number | ColumnType)[]) => ValueType);\n\nfunction createMatSchema<\n ValueType extends matBase<ColumnType>,\n ColumnType extends vecBase,\n>(\n options: MatSchemaOptions<ValueType, ColumnType>,\n): MatSchema<ValueType, ColumnType> {\n const MatSchema: TgpuData<ValueType> = {\n // Type-token, not available at runtime.\n __unwrapped: undefined as unknown as ValueType,\n\n label: options.label,\n byteAlignment: options.columnType.byteAlignment,\n size: roundUp(\n options.columnType.size * options.columns,\n options.columnType.byteAlignment,\n ),\n\n resolveReferences() {\n throw new RecursiveDataTypeError();\n },\n\n write(output: ISerialOutput, value: Parsed<ValueType>): void {\n for (const col of value.columns()) {\n options.columnType.write(output, col as Parsed<ColumnType>);\n }\n },\n\n read(input: ISerialInput): Parsed<ValueType> {\n const columns = new Array(options.columns) as ColumnType[];\n\n for (let c = 0; c < options.columns; ++c) {\n columns[c] = options.columnType.read(input) as ColumnType;\n }\n\n return options.makeFromColumnVectors(...columns) as Parsed<ValueType>;\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() {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return options.label;\n },\n };\n\n const construct = (...args: (number | ColumnType)[]): ValueType => {\n const elements: number[] = [];\n\n for (const arg of args) {\n if (typeof arg === 'number') {\n elements.push(arg);\n } else {\n elements.push(...arg);\n }\n }\n\n // Fill the rest with zeros\n for (let i = elements.length; i < options.columns * options.rows; ++i) {\n elements.push(0);\n }\n\n return options.makeFromElements(...elements);\n };\n\n return Object.assign(construct, MatSchema);\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 = createMatSchema({\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 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 = createMatSchema({\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 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 = createMatSchema({\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 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 { 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';
4
+ import { f as TgpuData, R as ResolutionCtx, A as AnyTgpuData, a as TgpuNamable, g as vec2f, c as vec3f, h as vec4f, i as TgpuPointer } from '../vector-D5Vx-xhb.cjs';
5
+ export { n as Vec2f, o as Vec2i, p as Vec2u, q as Vec3f, r as Vec3i, s as Vec3u, t as Vec4f, u as Vec4i, w as Vec4u, V as VecKind, j as vec2i, k as vec2u, d as vec3i, e as vec3u, l as vec4i, m as vec4u, v as vecBase } from '../vector-D5Vx-xhb.cjs';
6
6
 
7
7
  declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
8
8
  readonly size: number;