typegpu 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE.md +21 -0
- package/chunk-2FWG5LPQ.js +2 -0
- package/chunk-2FWG5LPQ.js.map +1 -0
- package/chunk-7EYKOUWH.cjs +2 -0
- package/chunk-7EYKOUWH.cjs.map +1 -0
- package/data/index.cjs +6 -6
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +21 -20
- package/data/index.d.ts +21 -20
- package/data/index.js +6 -6
- package/data/index.js.map +1 -1
- package/index.cjs +1 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +21 -41
- package/index.d.ts +21 -41
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +7 -1
- package/{vector-D5Vx-xhb.d.cts → tgpuBuffer-BVk2wCHR.d.cts} +43 -18
- package/{vector-D5Vx-xhb.d.ts → tgpuBuffer-BVk2wCHR.d.ts} +43 -18
- package/chunk-3I5VAGHS.js +0 -2
- package/chunk-3I5VAGHS.js.map +0 -1
- package/chunk-PMM3NYJ4.cjs +0 -2
- package/chunk-PMM3NYJ4.cjs.map +0 -1
package/data/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
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"]}
|
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/alignIO.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","input","measurer","ctx","TB","primitiveNumeric","reference","prop","bool","u32Cast","v","u32","i32Cast","i32","f32Cast","f32","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","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","align","data","isDataLoose","TgpuLooseAlignedImpl","isDataNotLoose","TgpuAlignedImpl","isAlignedSchema","AbstractTgpuAlignedImpl","size","TgpuSizedImpl","isSizedSchema","struct","properties","TgpuStructImpl","isStructSchema","_properties","a","b","property","exactEntries","ident","field","getAttribute","record","roundUp","modulo","invBitMask","arrayOf","elementType","count","TgpuArrayImpl","isArraySchema","beginning","i","elements","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","isAtomicSchema","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';\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 public readonly isCustomAligned = false;\n\n private readonly _innerSchema: TSchema;\n public readonly isLoose = false as const;\n public readonly label?: string | undefined;\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 this.label = code;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\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 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 { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport { SimpleTgpuData } from './std140';\n\nconst primitiveNumeric = (\n schema: TB.Uint32Schema | TB.Float32Schema | TB.Int32Schema,\n code: string,\n) => {\n return {\n // Type-token, not available at runtime\n __unwrapped: undefined as unknown as number,\n isLoose: false as const,\n isCustomAligned: false,\n\n size: 4,\n byteAlignment: 4,\n expressionCode: code,\n\n write(output: TB.ISerialOutput, value: number): void {\n schema.write(output, value);\n },\n\n read(input: TB.ISerialInput): number {\n return schema.read(input);\n },\n\n measure(\n value: number | TB.MaxValue,\n measurer: TB.IMeasurer = new TB.Measurer(),\n ): TB.IMeasurer {\n schema.measure(value, measurer);\n return measurer;\n },\n\n resolveReferences(ctx: TB.IRefResolver): void {\n throw new RecursiveDataTypeError();\n },\n\n seekProperty(\n reference: number | TB.MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: TB.ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n },\n\n resolve(): string {\n return code;\n },\n\n toString(): string {\n return code;\n },\n } as TgpuData<number>;\n};\n\nexport type Bool = TgpuData<boolean>;\nexport const bool: Bool = new SimpleTgpuData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\n\nexport type U32 = TgpuData<number> & ((v: number | boolean) => number);\nconst u32Cast = (v: number | boolean) => {\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n if (Number.isInteger(v)) {\n if (v < 0 || v > 0xffffffff) {\n console.warn(`u32 value ${v} overflowed`);\n }\n const value = v & 0xffffffff;\n return value >>> 0;\n }\n return Math.max(0, Math.min(0xffffffff, Math.floor(v)));\n};\nexport const u32: U32 = Object.assign(u32Cast, primitiveNumeric(TB.u32, 'u32'));\n\nexport type I32 = TgpuData<number> & ((v: number | boolean) => number);\nconst i32Cast = (v: number | boolean) => {\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n if (Number.isInteger(v)) {\n if (v < -0x80000000 || v > 0x7fffffff) {\n console.warn(`i32 value ${v} overflowed`);\n }\n const value = v | 0;\n return value & 0xffffffff;\n }\n // round towards zero\n const value = v < 0 ? Math.ceil(v) : Math.floor(v);\n return Math.max(-0x80000000, Math.min(0x7fffffff, value));\n};\nexport const i32: I32 = Object.assign(i32Cast, primitiveNumeric(TB.i32, 'i32'));\n\nexport type F32 = TgpuData<number> & ((v: number | boolean) => number);\nconst f32Cast = (v: number | boolean) => {\n if (typeof v === 'boolean') {\n return v ? 1 : 0;\n }\n return v;\n};\nexport const f32: F32 = Object.assign(f32Cast, primitiveNumeric(TB.f32, 'f32'));\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} 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 { isAlignedSchema } from './align';\nimport alignIO from './alignIO';\nimport { isSizedSchema } 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\nexport function isStructSchema<\n T extends TgpuStruct<Record<string, AnyTgpuData>>,\n>(schema: T | unknown): schema is T {\n return schema instanceof TgpuStructImpl;\n}\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\n public readonly byteAlignment: number;\n public readonly size: number;\n public readonly isLoose = false as const;\n public readonly isCustomAligned = false;\n\n constructor(private readonly _properties: TProps) {\n super();\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 type Property = keyof Parsed<UnwrapRecord<TProps>>;\n\n for (const [key, property] of exactEntries(this._properties)) {\n alignIO(output, property.byteAlignment);\n property.write(output, value[key as Property]);\n }\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n alignIO(input, this.byteAlignment);\n type Property = keyof Parsed<UnwrapRecord<TProps>>;\n const result = {} as Parsed<UnwrapRecord<TProps>>;\n\n for (const [key, property] of exactEntries(this._properties)) {\n alignIO(input, property.byteAlignment);\n result[key as Property] = property.read(input) as Parsed<\n UnwrapRecord<TProps>\n >[Property];\n }\n return result;\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n type Property = keyof Parsed<UnwrapRecord<TProps>>;\n\n for (const [key, property] of exactEntries(this._properties)) {\n alignIO(measurer, property.byteAlignment);\n property.measure(\n value === MaxValue ? MaxValue : value[key as Property],\n measurer,\n );\n }\n\n alignIO(measurer, this.byteAlignment);\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<T extends AnyTgpuData>(field: T): string | undefined {\n if (isAlignedSchema(field as unknown)) {\n return `@align(${field.byteAlignment}) `;\n }\n\n if (isSizedSchema(field as unknown)) {\n return `@size(${field.size}) `;\n }\n\n return undefined;\n}\n\nexport function exactEntries<T extends Record<keyof T, T[keyof T]>>(\n record: T,\n): [keyof T, T[keyof T]][] {\n return Object.entries(record) as [keyof T, T[keyof T]][];\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 {\n type AnyTgpuData,\n type AnyTgpuLooseData,\n type ResolutionCtx,\n type TgpuData,\n type TgpuLooseData,\n isDataLoose,\n isDataNotLoose,\n} from '../types';\nimport alignIO from './alignIO';\n\n// ----------\n// Public API\n// ----------\n\nexport function align<TAlign extends number, TData extends AnyTgpuData>(\n byteAlignment: TAlign,\n data: TData,\n): TgpuAligned<TAlign, TData>;\n\nexport function align<TAlign extends number, TData extends AnyTgpuLooseData>(\n byteAlignment: TAlign,\n data: TData,\n): TgpuLooseAligned<TAlign, TData>;\n\nexport function align<\n TAlign extends number,\n TData extends AnyTgpuData | AnyTgpuLooseData,\n>(\n byteAlignment: TAlign,\n data: TData,\n):\n | TgpuAligned<TAlign, Extract<TData, AnyTgpuData>>\n | TgpuLooseAligned<TAlign, Extract<TData, AnyTgpuLooseData>> {\n if (isDataLoose(data)) {\n return new TgpuLooseAlignedImpl<TAlign, Extract<TData, AnyTgpuLooseData>>(\n data,\n byteAlignment,\n );\n }\n\n if (isDataNotLoose(data)) {\n return new TgpuAlignedImpl<TAlign, Extract<TData, AnyTgpuData>>(\n data,\n byteAlignment,\n );\n }\n\n throw new Error(`Could not align data: ${data}`);\n}\n\nexport interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData>\n extends TgpuData<Unwrap<TData>> {\n readonly byteAlignment: TAlign;\n}\n\nexport interface TgpuLooseAligned<\n TAlign extends number,\n TData extends AnyTgpuLooseData,\n> extends TgpuLooseData<Unwrap<TData>> {\n readonly byteAlignment: TAlign;\n}\n\nexport function isLooseAlignedSchema<\n T extends TgpuLooseAligned<number, AnyTgpuLooseData>,\n>(value: T | unknown): value is T {\n return value instanceof TgpuLooseAlignedImpl;\n}\n\nexport function isAlignedSchema<T extends TgpuAligned<number, AnyTgpuData>>(\n value: T | unknown,\n): value is T {\n return value instanceof TgpuAlignedImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass AbstractTgpuAlignedImpl<\n TAlign extends number,\n TData extends AnyTgpuData | AnyTgpuLooseData,\n> extends Schema<Unwrap<TData>> {\n public readonly size: number;\n public readonly isCustomAligned = true;\n\n constructor(\n private data: AnyTgpuData | AnyTgpuLooseData,\n public readonly byteAlignment: TAlign,\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 (isDataNotLoose(this.data)) {\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\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\nclass TgpuAlignedImpl<TAlign extends number, TData extends AnyTgpuData>\n extends AbstractTgpuAlignedImpl<TAlign, TData>\n implements TgpuAligned<TAlign, TData>\n{\n public readonly isLoose = false as const;\n}\n\nclass TgpuLooseAlignedImpl<\n TAlign extends number,\n TData extends AnyTgpuLooseData,\n >\n extends AbstractTgpuAlignedImpl<TAlign, TData>\n implements TgpuLooseAligned<TAlign, TData>\n{\n public readonly isLoose = true as const;\n}\n","import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';\n\n/**\n * @param io the IO to align\n * @param baseAlignment must be power of 2\n */\nfunction alignIO(\n io: ISerialInput | ISerialOutput | IMeasurer,\n baseAlignment: number,\n) {\n const currentPos = 'size' in io ? io.size : io.currentByteOffset;\n\n const bitMask = baseAlignment - 1;\n const offset = currentPos & bitMask;\n\n if ('skipBytes' in io) {\n io.skipBytes((baseAlignment - offset) & bitMask);\n } else {\n io.add((baseAlignment - offset) & bitMask);\n }\n}\n\nexport default alignIO;\n","import {\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\n// ----------\n// Public API\n// ----------\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 readonly size: TSize;\n}\n\nexport function isSizedSchema<T extends TgpuSized<number, TgpuData<unknown>>>(\n value: T | unknown,\n): value is T {\n return value instanceof TgpuSizedImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuSizedImpl<TSize extends number, TData extends AnyTgpuData>\n extends Schema<Unwrap<TData>>\n implements TgpuSized<TSize, TData>\n{\n public readonly byteAlignment: number;\n public readonly isLoose = false as const;\n public readonly isCustomAligned: boolean;\n\n constructor(\n private data: AnyTgpuData,\n public readonly size: TSize,\n ) {\n super();\n\n this.byteAlignment = this.data.byteAlignment;\n this.isCustomAligned = this.data.isCustomAligned;\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 {\n AnyTgpuData,\n ResolutionCtx,\n TgpuData,\n TgpuLooseData,\n} from '../types';\nimport alignIO from './alignIO';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuArray<TElement extends AnyTgpuData>\n extends TgpuData<Unwrap<TElement>[]> {\n readonly elementType: TElement;\n readonly elementCount: number;\n}\n\nexport const arrayOf = <TElement extends AnyTgpuData>(\n elementType: TElement,\n count: number,\n): TgpuArray<TElement> => new TgpuArrayImpl(elementType, count);\n\nexport interface TgpuLooseArray<TElement extends AnyTgpuData>\n extends TgpuLooseData<Unwrap<TElement>[]> {\n readonly elementType: TElement;\n readonly elementCount: number;\n}\n\nexport const looseArrayOf = <TElement extends AnyTgpuData>(\n elementType: TElement,\n count: number,\n): TgpuLooseArray<TElement> => new TgpuLooseArrayImpl(elementType, count);\n\nexport function isArraySchema<T extends TgpuArray<AnyTgpuData>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof TgpuArrayImpl;\n}\n\nexport function isLooseArraySchema<T extends TgpuLooseArray<AnyTgpuData>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof TgpuLooseArrayImpl;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass 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 readonly isLoose = false;\n readonly isCustomAligned = false;\n\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 alignIO(output, this.byteAlignment);\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 alignIO(input, this.byteAlignment);\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\nclass TgpuLooseArrayImpl<TElement extends AnyTgpuData>\n extends Schema<Unwrap<TElement>[]>\n implements TgpuLooseArray<TElement>\n{\n readonly elementType: TElement;\n readonly elementCount: number;\n readonly size: number;\n readonly stride: number;\n readonly isLoose = true;\n\n constructor(elementType: TElement, count: number) {\n super();\n this.elementType = elementType;\n this.elementCount = count;\n\n this.stride = this.elementType.isCustomAligned\n ? roundUp(this.elementType.size, this.elementType.byteAlignment)\n : this.elementType.size;\n\n this.size = this.stride * this.elementCount;\n }\n\n write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]) {\n const beginning = output.currentByteOffset;\n for (let i = 0; i < Math.min(this.elementCount, value.length); i++) {\n if (this.elementType.isCustomAligned) {\n alignIO(output, this.elementType.byteAlignment);\n }\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 const elements: Parsed<Unwrap<TElement>>[] = [];\n for (let i = 0; i < this.elementCount; i++) {\n if (this.elementType.isCustomAligned) {\n alignIO(input, this.elementType.byteAlignment);\n }\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 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","/**\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 { 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 isLoose: false as const,\n isCustomAligned: false,\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 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\n// ----------\n// Public API\n// ----------\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\nexport function isAtomicSchema<T extends Atomic<U32 | I32>>(\n schema: T | unknown,\n): schema is T {\n return schema instanceof AtomicImpl;\n}\n\n// --------------\n// Implementation\n// --------------\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 public readonly isLoose = false as const;\n public readonly isCustomAligned: boolean;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n this.isCustomAligned = this.innerData.isCustomAligned;\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,14 +1,16 @@
|
|
1
|
-
import
|
2
|
-
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
1
|
+
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord } from 'typed-binary';
|
3
2
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
3
|
+
import { e as TgpuData, R as ResolutionCtx, A as AnyTgpuData, h as TgpuNamable, j as vec2f, b as vec3f, k as vec4f, l as TgpuPointer, m as AnyTgpuLooseData, n as TgpuLooseData } from '../tgpuBuffer-BVk2wCHR.cjs';
|
4
|
+
export { t as Vec2f, u as Vec2i, w as Vec2u, x as Vec3f, y as Vec3i, z as Vec3u, B as Vec4f, C as Vec4i, D as Vec4u, o as VecKind, p as vec2i, q as vec2u, c as vec3i, d as vec3u, r as vec4i, s as vec4u, v as vecBase } from '../tgpuBuffer-BVk2wCHR.cjs';
|
6
5
|
|
7
6
|
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
7
|
readonly size: number;
|
9
8
|
readonly byteAlignment: number;
|
10
9
|
readonly expressionCode: string;
|
10
|
+
readonly isCustomAligned = false;
|
11
11
|
private readonly _innerSchema;
|
12
|
+
readonly isLoose: false;
|
13
|
+
readonly label?: string | undefined;
|
12
14
|
/**
|
13
15
|
* byteAlignment has to be a power of 2
|
14
16
|
*/
|
@@ -28,34 +30,24 @@ declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TS
|
|
28
30
|
|
29
31
|
type Bool = TgpuData<boolean>;
|
30
32
|
declare const bool: Bool;
|
31
|
-
type U32 = TgpuData<number
|
33
|
+
type U32 = TgpuData<number> & ((v: number | boolean) => number);
|
32
34
|
declare const u32: U32;
|
33
|
-
type I32 = TgpuData<number
|
35
|
+
type I32 = TgpuData<number> & ((v: number | boolean) => number);
|
34
36
|
declare const i32: I32;
|
35
|
-
type F32 = TgpuData<number
|
37
|
+
type F32 = TgpuData<number> & ((v: number | boolean) => number);
|
36
38
|
declare const f32: F32;
|
37
39
|
|
38
40
|
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
39
41
|
}
|
40
42
|
declare const struct: <TProps extends Record<string, AnyTgpuData>>(properties: TProps) => TgpuStruct<TProps>;
|
43
|
+
declare function isStructSchema<T extends TgpuStruct<Record<string, AnyTgpuData>>>(schema: T | unknown): schema is T;
|
41
44
|
|
42
45
|
interface TgpuArray<TElement extends AnyTgpuData> extends TgpuData<Unwrap<TElement>[]> {
|
43
46
|
readonly elementType: TElement;
|
44
47
|
readonly elementCount: number;
|
45
48
|
}
|
46
|
-
declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<TElement>[]> implements TgpuArray<TElement> {
|
47
|
-
readonly elementType: TElement;
|
48
|
-
readonly elementCount: number;
|
49
|
-
readonly byteAlignment: number;
|
50
|
-
readonly size: number;
|
51
|
-
readonly stride: number;
|
52
|
-
constructor(elementType: TElement, count: number);
|
53
|
-
write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]): void;
|
54
|
-
read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[];
|
55
|
-
measure(value: MaxValue | Parsed<Unwrap<TElement>>[], measurer?: IMeasurer): IMeasurer;
|
56
|
-
resolve(ctx: ResolutionCtx): string;
|
57
|
-
}
|
58
49
|
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
50
|
+
declare function isArraySchema<T extends TgpuArray<AnyTgpuData>>(schema: T | unknown): schema is T;
|
59
51
|
|
60
52
|
interface matBase<TColumn> {
|
61
53
|
columns(): Iterable<TColumn>;
|
@@ -97,13 +89,22 @@ declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPo
|
|
97
89
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
98
90
|
interface Atomic<TSchema extends U32 | I32> extends TgpuData<Unwrap<TSchema>> {
|
99
91
|
}
|
92
|
+
declare function isAtomicSchema<T extends Atomic<U32 | I32>>(schema: T | unknown): schema is T;
|
100
93
|
|
101
94
|
declare function align<TAlign extends number, TData extends AnyTgpuData>(byteAlignment: TAlign, data: TData): TgpuAligned<TAlign, TData>;
|
95
|
+
declare function align<TAlign extends number, TData extends AnyTgpuLooseData>(byteAlignment: TAlign, data: TData): TgpuLooseAligned<TAlign, TData>;
|
102
96
|
interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
97
|
+
readonly byteAlignment: TAlign;
|
98
|
+
}
|
99
|
+
interface TgpuLooseAligned<TAlign extends number, TData extends AnyTgpuLooseData> extends TgpuLooseData<Unwrap<TData>> {
|
100
|
+
readonly byteAlignment: TAlign;
|
103
101
|
}
|
102
|
+
declare function isAlignedSchema<T extends TgpuAligned<number, AnyTgpuData>>(value: T | unknown): value is T;
|
104
103
|
|
105
104
|
declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSize, data: TData): TgpuSized<TSize, TData>;
|
106
105
|
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
106
|
+
readonly size: TSize;
|
107
107
|
}
|
108
|
+
declare function isSizedSchema<T extends TgpuSized<number, TgpuData<unknown>>>(value: T | unknown): value is T;
|
108
109
|
|
109
|
-
export { type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray,
|
110
|
+
export { type Atomic, type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, isAlignedSchema, isArraySchema, isAtomicSchema, isSizedSchema, isStructSchema, type mat2x2, mat2x2f, type mat3x3, mat3x3f, type mat4x4, mat4x4f, ptr, size, struct, u32, vec2f, vec3f, vec4f };
|
package/data/index.d.ts
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
import
|
2
|
-
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord, Parsed } from 'typed-binary';
|
1
|
+
import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer, ISchema, UnwrapRecord } from 'typed-binary';
|
3
2
|
export { Parsed, Unwrap } from 'typed-binary';
|
4
|
-
import {
|
5
|
-
export {
|
3
|
+
import { e as TgpuData, R as ResolutionCtx, A as AnyTgpuData, h as TgpuNamable, j as vec2f, b as vec3f, k as vec4f, l as TgpuPointer, m as AnyTgpuLooseData, n as TgpuLooseData } from '../tgpuBuffer-BVk2wCHR.js';
|
4
|
+
export { t as Vec2f, u as Vec2i, w as Vec2u, x as Vec3f, y as Vec3i, z as Vec3u, B as Vec4f, C as Vec4i, D as Vec4u, o as VecKind, p as vec2i, q as vec2u, c as vec3i, d as vec3u, r as vec4i, s as vec4u, v as vecBase } from '../tgpuBuffer-BVk2wCHR.js';
|
6
5
|
|
7
6
|
declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements TgpuData<Unwrap<TSchema>> {
|
8
7
|
readonly size: number;
|
9
8
|
readonly byteAlignment: number;
|
10
9
|
readonly expressionCode: string;
|
10
|
+
readonly isCustomAligned = false;
|
11
11
|
private readonly _innerSchema;
|
12
|
+
readonly isLoose: false;
|
13
|
+
readonly label?: string | undefined;
|
12
14
|
/**
|
13
15
|
* byteAlignment has to be a power of 2
|
14
16
|
*/
|
@@ -28,34 +30,24 @@ declare class SimpleTgpuData<TSchema extends AnySchema> extends Schema<Unwrap<TS
|
|
28
30
|
|
29
31
|
type Bool = TgpuData<boolean>;
|
30
32
|
declare const bool: Bool;
|
31
|
-
type U32 = TgpuData<number
|
33
|
+
type U32 = TgpuData<number> & ((v: number | boolean) => number);
|
32
34
|
declare const u32: U32;
|
33
|
-
type I32 = TgpuData<number
|
35
|
+
type I32 = TgpuData<number> & ((v: number | boolean) => number);
|
34
36
|
declare const i32: I32;
|
35
|
-
type F32 = TgpuData<number
|
37
|
+
type F32 = TgpuData<number> & ((v: number | boolean) => number);
|
36
38
|
declare const f32: F32;
|
37
39
|
|
38
40
|
interface TgpuStruct<TProps extends Record<string, AnyTgpuData>> extends ISchema<UnwrapRecord<TProps>>, TgpuData<UnwrapRecord<TProps>>, TgpuNamable {
|
39
41
|
}
|
40
42
|
declare const struct: <TProps extends Record<string, AnyTgpuData>>(properties: TProps) => TgpuStruct<TProps>;
|
43
|
+
declare function isStructSchema<T extends TgpuStruct<Record<string, AnyTgpuData>>>(schema: T | unknown): schema is T;
|
41
44
|
|
42
45
|
interface TgpuArray<TElement extends AnyTgpuData> extends TgpuData<Unwrap<TElement>[]> {
|
43
46
|
readonly elementType: TElement;
|
44
47
|
readonly elementCount: number;
|
45
48
|
}
|
46
|
-
declare class TgpuArrayImpl<TElement extends AnyTgpuData> extends Schema<Unwrap<TElement>[]> implements TgpuArray<TElement> {
|
47
|
-
readonly elementType: TElement;
|
48
|
-
readonly elementCount: number;
|
49
|
-
readonly byteAlignment: number;
|
50
|
-
readonly size: number;
|
51
|
-
readonly stride: number;
|
52
|
-
constructor(elementType: TElement, count: number);
|
53
|
-
write(output: TB.ISerialOutput, value: Parsed<Unwrap<TElement>>[]): void;
|
54
|
-
read(input: TB.ISerialInput): Parsed<Unwrap<TElement>>[];
|
55
|
-
measure(value: MaxValue | Parsed<Unwrap<TElement>>[], measurer?: IMeasurer): IMeasurer;
|
56
|
-
resolve(ctx: ResolutionCtx): string;
|
57
|
-
}
|
58
49
|
declare const arrayOf: <TElement extends AnyTgpuData>(elementType: TElement, count: number) => TgpuArray<TElement>;
|
50
|
+
declare function isArraySchema<T extends TgpuArray<AnyTgpuData>>(schema: T | unknown): schema is T;
|
59
51
|
|
60
52
|
interface matBase<TColumn> {
|
61
53
|
columns(): Iterable<TColumn>;
|
@@ -97,13 +89,22 @@ declare function ptr<TDataType extends AnyTgpuData>(pointsTo: TDataType): TgpuPo
|
|
97
89
|
declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
|
98
90
|
interface Atomic<TSchema extends U32 | I32> extends TgpuData<Unwrap<TSchema>> {
|
99
91
|
}
|
92
|
+
declare function isAtomicSchema<T extends Atomic<U32 | I32>>(schema: T | unknown): schema is T;
|
100
93
|
|
101
94
|
declare function align<TAlign extends number, TData extends AnyTgpuData>(byteAlignment: TAlign, data: TData): TgpuAligned<TAlign, TData>;
|
95
|
+
declare function align<TAlign extends number, TData extends AnyTgpuLooseData>(byteAlignment: TAlign, data: TData): TgpuLooseAligned<TAlign, TData>;
|
102
96
|
interface TgpuAligned<TAlign extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
97
|
+
readonly byteAlignment: TAlign;
|
98
|
+
}
|
99
|
+
interface TgpuLooseAligned<TAlign extends number, TData extends AnyTgpuLooseData> extends TgpuLooseData<Unwrap<TData>> {
|
100
|
+
readonly byteAlignment: TAlign;
|
103
101
|
}
|
102
|
+
declare function isAlignedSchema<T extends TgpuAligned<number, AnyTgpuData>>(value: T | unknown): value is T;
|
104
103
|
|
105
104
|
declare function size<TSize extends number, TData extends AnyTgpuData>(size: TSize, data: TData): TgpuSized<TSize, TData>;
|
106
105
|
interface TgpuSized<TSize extends number, TData extends AnyTgpuData> extends TgpuData<Unwrap<TData>> {
|
106
|
+
readonly size: TSize;
|
107
107
|
}
|
108
|
+
declare function isSizedSchema<T extends TgpuSized<number, TgpuData<unknown>>>(value: T | unknown): value is T;
|
108
109
|
|
109
|
-
export { type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray,
|
110
|
+
export { type Atomic, type Bool, type F32, type I32, type Mat2x2f, type Mat3x3f, type Mat4x4f, SimpleTgpuData, type TgpuAligned, type TgpuArray, type TgpuSized, type TgpuStruct, type U32, align, arrayOf, atomic, bool, f32, i32, isAlignedSchema, isArraySchema, isAtomicSchema, isSizedSchema, isStructSchema, type mat2x2, mat2x2f, type mat3x3, mat3x3f, type mat4x4, mat4x4f, ptr, size, struct, u32, vec2f, vec3f, vec4f };
|
package/data/index.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
import{a
|
2
|
-
struct ${
|
3
|
-
${Object.entries(this._properties).map(([
|
1
|
+
import{a,b as l,c as j,d as W,e as C,g as m,h as D,i as Ae,j as Se,k as v,l as Ce,m as De,n as I,o as ve,p as Ie}from"../chunk-2FWG5LPQ.js";import{MaxValue as H,Measurer as J,Schema as K}from"typed-binary";var c=class extends K{constructor({schema:t,byteAlignment:r,code:s}){super();a(this,"size");a(this,"byteAlignment");a(this,"expressionCode");a(this,"isCustomAligned",!1);a(this,"_innerSchema");a(this,"isLoose",!1);a(this,"label");this._innerSchema=t,this.byteAlignment=r,this.expressionCode=s,this.size=this.measure(H).size,this.label=s}resolveReferences(){throw new m}write(t,r){this._innerSchema.write(t,r)}read(t){return this._innerSchema.read(t)}measure(t,r=new J){return this._innerSchema.measure(t,r),r}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(t){return this.expressionCode}};import*as p from"typed-binary";var _=(e,n)=>({__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,size:4,byteAlignment:4,expressionCode:n,write(t,r){e.write(t,r)},read(t){return e.read(t)},measure(t,r=new p.Measurer){return e.measure(t,r),r},resolveReferences(t){throw new m},seekProperty(t,r){throw new Error("Method not implemented.")},resolve(){return n},toString(){return n}}),Re=new c({schema:p.bool,byteAlignment:4,code:"bool"}),Q=e=>typeof e=="boolean"?e?1:0:Number.isInteger(e)?((e<0||e>4294967295)&&console.warn(`u32 value ${e} overflowed`),(e&4294967295)>>>0):Math.max(0,Math.min(4294967295,Math.floor(e))),Be=Object.assign(Q,_(p.u32,"u32")),X=e=>{if(typeof e=="boolean")return e?1:0;if(Number.isInteger(e))return(e<-2147483648||e>2147483647)&&console.warn(`i32 value ${e} overflowed`),(e|0)&4294967295;let n=e<0?Math.ceil(e):Math.floor(e);return Math.max(-2147483648,Math.min(2147483647,n))},ze=Object.assign(X,_(p.i32,"i32")),Y=e=>typeof e=="boolean"?e?1:0:e,Ve=Object.assign(Y,_(p.f32,"f32"));import{MaxValue as z,Measurer as ie,Schema as ue}from"typed-binary";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")},Le=Object.values(u);function d(){return new M}var M=class{constructor(){a(this,"label")}$name(n){return this.label=n,this}resolve(n){return n.nameFor(this)}toString(){var n;return`id:${(n=this.label)!=null?n:"<unnamed>"}`}};var Z={[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"},G=new Map;function q(e){let n=G.get(e);return n===void 0&&(n=d().$name(Z[e]),G.set(e,n)),n}function k(e,...n){let t=e.flatMap((r,s)=>{let o=n[s];return o===void 0?[r]:Array.isArray(o)?[r,...o]:[r,o]});return new P(t)}var P=class{constructor(n){this.segments=n;a(this,"_label")}get label(){return this._label}$name(n){return this._label=n,this}resolve(n){let t="";for(let r of this.segments)if(j(r))t+=n.resolve(r);else if(typeof r=="function"){let s=r(o=>n.unwrap(o));t+=n.resolve(s)}else typeof r=="symbol"?(n.addBuiltin(r),t+=n.resolve(q(r))):t+=String(r);return t}with(n,t){return new U(this,[n,t])}toString(){var n;return`code:${(n=this._label)!=null?n:"<unnamed>"}`}},U=class e{constructor(n,t){this._innerFn=n;this._slotValuePair=t}get label(){return this._innerFn.label}with(n,t){return new e(this,[n,t])}resolve(n){return n.resolve(this._innerFn,[this._slotValuePair])}toString(){var r,s;let[n,t]=this._slotValuePair;return`code:${(r=this.label)!=null?r:"<unnamed>"}[${(s=n.label)!=null?s:"<unnamed>"}=${t}]`}};import{Measurer as te,Schema as ne}from"typed-binary";function ee(e,n){let t="size"in e?e.size:e.currentByteOffset,r=n-1,s=t&r;"skipBytes"in e?e.skipBytes(n-s&r):e.add(n-s&r)}var i=ee;function re(e,n){if(W(n))return new E(n,e);if(C(n))return new y(n,e);throw new Error(`Could not align data: ${n}`)}function R(e){return e instanceof y}var T=class extends ne{constructor(t,r){super();this.data=t;this.byteAlignment=r;a(this,"size");a(this,"isCustomAligned",!0);if(this.size=this.data.size,r<=0)throw new Error(`Custom data alignment must be a positive number, got: ${r}.`);if(Math.log2(r)%1!==0)throw new Error(`Alignment has to be a power of 2, got: ${r}.`);if(C(this.data)&&r%this.data.byteAlignment!==0)throw new Error(`Custom alignment has to be a multiple of the standard data byteAlignment. Got: ${r}, expected multiple of: ${this.data.byteAlignment}.`)}write(t,r){i(t,this.byteAlignment),this.data.write(t,r)}read(t){return i(t,this.byteAlignment),this.data.read(t)}measure(t,r=new te){return i(r,this.byteAlignment),this.data.measure(t,r)}resolve(t){return this.data.resolve(t)}},y=class extends T{constructor(){super(...arguments);a(this,"isLoose",!1)}},E=class extends T{constructor(){super(...arguments);a(this,"isLoose",!0)}};import{Measurer as ae,Schema as se}from"typed-binary";function oe(e,n){return new f(n,e)}function B(e){return e instanceof f}var f=class extends se{constructor(t,r){super();this.data=t;this.size=r;a(this,"byteAlignment");a(this,"isLoose",!1);a(this,"isCustomAligned");if(this.byteAlignment=this.data.byteAlignment,this.isCustomAligned=this.data.isCustomAligned,r<this.data.size)throw new Error(`Custom data size cannot be smaller then the standard data size. Got: ${r}, expected at least: ${this.data.size}.`);if(r<=0)throw new Error(`Custom data size must be a positive number. Got: ${r}.`)}write(t,r){this.data.write(t,r)}read(t){return this.data.read(t)}measure(t,r=new ae){return r.add(this.size)}resolve(t){return this.data.resolve(t)}};var le=e=>new g(e);function me(e){return e instanceof g}var g=class extends ue{constructor(t){super();this._properties=t;a(this,"_label");a(this,"byteAlignment");a(this,"size");a(this,"isLoose",!1);a(this,"isCustomAligned",!1);this.byteAlignment=Object.values(t).map(r=>r.byteAlignment).reduce((r,s)=>r>s?r:s),this.size=this.measure(z).size}$name(t){return this._label=t,this}resolveReferences(){throw new m}write(t,r){i(t,this.byteAlignment);for(let[s,o]of V(this._properties))i(t,o.byteAlignment),o.write(t,r[s])}read(t){i(t,this.byteAlignment);let r={};for(let[s,o]of V(this._properties))i(t,o.byteAlignment),r[s]=o.read(t);return r}measure(t,r=new ie){i(r,this.byteAlignment);for(let[s,o]of V(this._properties))i(r,o.byteAlignment),o.measure(t===z?z:t[s],r);return i(r,this.byteAlignment),r}resolve(t){let r=d().$name(this._label);return t.addDeclaration(k`
|
2
|
+
struct ${r} {
|
3
|
+
${Object.entries(this._properties).map(([s,o])=>{var N;return k`${(N=pe(o))!=null?N:""}${s}: ${o},\n`})}
|
4
4
|
}
|
5
|
-
`),
|
6
|
-
array<${
|
7
|
-
`)}}
|
5
|
+
`),t.resolve(r)}};function pe(e){if(R(e))return`@align(${e.byteAlignment}) `;if(B(e))return`@size(${e.size}) `}function V(e){return Object.entries(e)}import{Measurer as ce,Schema as de}from"typed-binary";var b=(e,n)=>{let t=n-1,r=~t;return e&t?(e&r)+n:e};var Te=(e,n)=>new h(e,n);function ye(e){return e instanceof h}var h=class extends de{constructor(t,r){super();a(this,"elementType");a(this,"elementCount");a(this,"byteAlignment");a(this,"size");a(this,"stride");a(this,"isLoose",!1);a(this,"isCustomAligned",!1);this.elementType=t,this.elementCount=r,this.byteAlignment=t.byteAlignment,this.stride=b(this.elementType.size,this.elementType.byteAlignment),this.size=this.stride*this.elementCount}write(t,r){i(t,this.byteAlignment);let s=t.currentByteOffset;for(let o=0;o<Math.min(this.elementCount,r.length);o++)i(t,this.byteAlignment),this.elementType.write(t,r[o]);t.seekTo(s+this.stride*this.elementCount)}read(t){i(t,this.byteAlignment);let r=[];for(let s=0;s<this.elementCount;s++)i(t,this.byteAlignment),r.push(this.elementType.read(t));return r}measure(t,r=new ce){return i(r,this.byteAlignment),r.add(this.stride*this.elementCount)}resolve(t){return t.resolve(`
|
6
|
+
array<${t.resolve(this.elementType)}, ${this.elementCount}>
|
7
|
+
`)}};import{Measurer as fe}from"typed-binary";function F(e){let n={__unwrapped:void 0,isLoose:!1,isCustomAligned:!1,label:e.label,byteAlignment:e.columnType.byteAlignment,size:b(e.columnType.size*e.columns,e.columnType.byteAlignment),resolveReferences(){throw new m},write(r,s){for(let o of s.columns())e.columnType.write(r,o)},read(r){let s=new Array(e.columns);for(let o=0;o<e.columns;++o)s[o]=e.columnType.read(r);return e.makeFromColumnVectors(...s)},measure(r,s=new fe){return s.add(this.size)},seekProperty(){throw new Error("Method not implemented.")},resolve(){return e.label}};return Object.assign((...r)=>{let s=[];for(let o of r)typeof o=="number"?s.push(o):s.push(...o);for(let o=s.length;o<e.columns*e.rows;++o)s.push(0);return e.makeFromElements(...s)},n)}var O=class{constructor(...n){a(this,"_columns",new Array(2));this._columns[0]=this.makeColumn(n[0],n[1]),this._columns[1]=this.makeColumn(n[2],n[3])}*columns(){yield this._columns[0],yield this._columns[1]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}},x=class extends O{makeColumn(n,t){return D(n,t)}},L=class{constructor(...n){a(this,"_columns",new Array(3));this._columns[0]=this.makeColumn(n[0],n[1],n[2]),this._columns[1]=this.makeColumn(n[3],n[4],n[5]),this._columns[2]=this.makeColumn(n[6],n[7],n[8])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1]),yield*l(this._columns[2])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}},w=class extends L{makeColumn(n,t,r){return v(n,t,r)}},$=class{constructor(...n){a(this,"_columns",new Array(4));this._columns[0]=this.makeColumn(n[0],n[1],n[2],n[3]),this._columns[1]=this.makeColumn(n[4],n[5],n[6],n[7]),this._columns[2]=this.makeColumn(n[8],n[9],n[10],n[11]),this._columns[3]=this.makeColumn(n[12],n[13],n[14],n[15])}*columns(){yield this._columns[0],yield this._columns[1],yield this._columns[2],yield this._columns[3]}*elements(){yield*l(this._columns[0]),yield*l(this._columns[1]),yield*l(this._columns[2]),yield*l(this._columns[3])}get 0(){return this._columns[0]}get 1(){return this._columns[1]}get 2(){return this._columns[2]}get 3(){return this._columns[3]}},A=class extends ${makeColumn(n,t,r,s){return I(n,t,r,s)}},Ct=F({label:"mat2x2f",columnType:D,rows:2,columns:2,makeFromColumnVectors:(...e)=>new x(...e[0],...e[1]),makeFromElements:(...e)=>new x(...e)}),Dt=F({label:"mat3x3f",columnType:v,rows:3,columns:3,makeFromColumnVectors(...[e,n,t]){return new w(...e,...n,...t)},makeFromElements:(...e)=>new w(...e)}),vt=F({label:"mat4x4f",columnType:I,rows:4,columns:4,makeFromColumnVectors(...[e,n,t,r]){return new A(...e,...n,...t,...r)},makeFromElements:(...e)=>new A(...e)});function ge(e){return{scope:"function",pointsTo:e}}import{Measurer as be,Schema as he}from"typed-binary";function xe(e){return new S(e)}function we(e){return e instanceof S}var S=class extends he{constructor(t){super();this.innerData=t;a(this,"size");a(this,"byteAlignment");a(this,"isLoose",!1);a(this,"isCustomAligned");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment,this.isCustomAligned=this.innerData.isCustomAligned}resolveReferences(){throw new m}write(t,r){this.innerData.write(t,r)}read(t){return this.innerData.read(t)}measure(t,r=new be){return this.innerData.measure(t,r)}resolve(t){return`atomic<${t.resolve(this.innerData)}>`}};export{c as SimpleTgpuData,re as align,Te as arrayOf,xe as atomic,Re as bool,Ve as f32,ze as i32,R as isAlignedSchema,ye as isArraySchema,we as isAtomicSchema,B as isSizedSchema,me as isStructSchema,Ct as mat2x2f,Dt as mat3x3f,vt as mat4x4f,ge as ptr,oe as size,le as struct,Be as u32,D as vec2f,Ae as vec2i,Se as vec2u,v as vec3f,Ce as vec3i,De as vec3u,I as vec4f,ve as vec4i,Ie as vec4u};
|
8
8
|
//# sourceMappingURL=index.js.map
|