typegpu 0.1.2 → 0.2.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +1 -1
- package/chunk-5EPBCOO4.js +8 -0
- package/chunk-5EPBCOO4.js.map +1 -0
- package/chunk-SBJR5ZQJ.cjs +8 -0
- package/chunk-SBJR5ZQJ.cjs.map +1 -0
- package/data/index.cjs +1 -7
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +482 -48
- package/data/index.d.ts +482 -48
- package/data/index.js +1 -7
- package/data/index.js.map +1 -1
- package/index.cjs +51 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +299 -37
- package/index.d.ts +299 -37
- package/index.js +51 -1
- package/index.js.map +1 -1
- package/package.json +7 -1
- package/types-qmW7FFqN.d.cts +880 -0
- package/types-qmW7FFqN.d.ts +880 -0
- 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/vector-D5Vx-xhb.d.cts +0 -516
- package/vector-D5Vx-xhb.d.ts +0 -516
package/data/index.js.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"],"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"],"mappings":"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","names":["MaxValue","Measurer","Schema","SimpleTgpuData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","TB","bool","SimpleTgpuData","u32","i32","f32","MaxValue","Measurer","Schema","object","builtin","builtins","identifier","TgpuIdentifierImpl","__publicField","label","ctx","_a","builtinToName","builtin","identifierMap","idForBuiltin","key","id","identifierMap","identifier","builtinToName","code","strings","params","segments","string","idx","param","TgpuCodeImpl","__publicField","label","ctx","s","isResolvable","result","eventual","idForBuiltin","slot","value","BoundTgpuCodeImpl","_a","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b","Measurer","Schema","align","byteAlignment","data","TgpuAlignedImpl","Schema","__publicField","output","value","alignIO_default","input","measurer","Measurer","ctx","Measurer","Schema","size","data","TgpuSizedImpl","Schema","__publicField","output","value","input","measurer","Measurer","ctx","struct","properties","TgpuStructImpl","Schema","_properties","__publicField","object","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","ident","identifier","code","key","field","_a","getAttribute","TgpuAlignedImpl","TgpuSizedImpl","Measurer","Schema","roundUp","value","modulo","bitMask","invBitMask","TgpuArrayImpl","Schema","elementType","count","__publicField","roundUp","output","value","alignIO_default","beginning","i","input","elements","measurer","Measurer","ctx","arrayOf","Measurer","createMatSchema","options","MatSchema","roundUp","RecursiveDataTypeError","output","value","col","input","columns","c","_value","measurer","Measurer","alignIO_default","args","elements","arg","i","mat2x2Impl","__publicField","__yieldStar","mat2x2fImpl","e0","e1","vec2f","mat3x3Impl","mat3x3fImpl","x","y","z","vec3f","mat4x4Impl","mat4x4fImpl","w","vec4f","mat2x2f","mat3x3f","v0","v1","v2","mat4x4f","v3","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/index.cjs
CHANGED
@@ -1,2 +1,52 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkSBJR5ZQJcjs = require('./chunk-SBJR5ZQJ.cjs');var H=class{constructor(e){this._make=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_map",new WeakMap)}getOrMake(e,...r){if(this._map.has(e))return this._map.get(e);let n=this._make(e,...r);return this._map.set(e,n),n}};var ft=Symbol("This plum's value is sourced from outside the root.");function re(t){return t[ft]===!0}function Xe(t){return t.__brand==="TgpuPlum"}var ne=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_stateMap",new WeakMap)}inspect(e){return this._stateMap.get(e)}_getState(e){let r=this._stateMap.get(e);if(!r){let{value:n,dependencies:a}=this._computeAndGatherDependencies(e);r={value:n,dependencies:a,version:0},this._stateMap.set(e,r)}return r}_notifyListeners(e){let r=this._getState(e);if(!r.active)return;let n=[...r.active.listeners];for(let a of n)a(r.value)}_computeAndGatherDependencies(e){let r=new Map,n=a=>{if(!r.has(a)){let i=this._getState(a);r.set(a,i.version)}return this.get(a)};return{value:e.compute(n),dependencies:r}}_recompute(e){let r=this._getState(e);if(r.active)for(let i of r.active.unsubs)i();let{value:n,dependencies:a}=this._computeAndGatherDependencies(e);if(r.dependencies=a,r.active)for(let[i]of r.dependencies)r.active.unsubs.add(this.subscribe(i,()=>{this._recompute(e)}));return Object.is(r.value,n)||(r.value=n,r.version=re(e)?e.version:r.version+1,this._notifyListeners(e)),r.value}get(e){let r=this._getState(e);if(r.active)return r.value;let n=!1;return re(e)?(e.compute(null),n=r.version!==e.version):r.dependencies.size>0&&(n=[...r.dependencies.entries()].some(([a,i])=>(this.get(a),this._getState(a).version!==i))),n?this._recompute(e):r.value}set(e,r){let n=this._getState(e);Object.is(n.value,r)||(n.value=r,n.version++,this._notifyListeners(e))}subscribe(e,r){let n=this._getState(e),a;if(!n.active){let i=new Set;n.active={listeners:new Set,unsubs:i};for(let[u]of n.dependencies)i.add(this.subscribe(u,()=>{this._recompute(e)}));re(e)&&(a=e.subscribe(()=>{this._recompute(e)}))}return n.active.listeners.add(r),()=>{if(n.active&&(n.active.listeners.delete(r),n.active.listeners.size===0)){for(let i of n.active.unsubs)i();a==null||a(),n.active=void 0}}}};var Tt={f32:"float32",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",u32:"uint32",vec2u:"uint32x2",vec3u:"uint32x3",vec4u:"uint32x4",i32:"sint32",vec2i:"sint32x2",vec3i:"sint32x3",vec4i:"sint32x4"};function xe(t){if("expressionCode"in t){let e=t.expressionCode,r=Tt[e];if(!r)throw new Error(`Unsupported vertex format: ${e}`);return r}if("elementType"in t)return xe(t.elementType);throw new Error("Invalid vertex format schema")}function ae(t){return t.type==="sampler"||t.type==="sampler_comparison"}function Qe(t){return!("texture"in t)&&!ae(t)}function ue(t){return"texture"in t}var mt={uniform:"uniform",mutable:"storage",readonly:"read-only-storage"},ie=class{constructor(e,r,n){this.root=e;this.context=r;this.shaderStage=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"samplers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"textureViews",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"externalTextures",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"buffers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"vertexBuffers",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"layout",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"bindGroup",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"vertexLayout",null);let a=Array.from(r.usedRenderResources);for(let i of a)if(ae(i))this.samplers.push(i);else if(ue(i))this.textureViews.push(i);else if(Qe(i))this.externalTextures.push(i);else throw new Error(`Invalid resource type: ${i}`);this.buffers=Array.from(r.usedBindables)}setVertexBuffers(e){if(this.shaderStage!==GPUShaderStage.VERTEX)throw new Error("Vertex buffers can only be set for vertex shader");this.vertexBuffers=new Map(e.map(({index:r,buffer:n})=>[n,r]))}getBindGroupLayout(){if(this.layout)return this.layout;let e=[];for(let n of this.textureViews)n.access===void 0?e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,texture:{}}):e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,storageTexture:{format:n.texture.descriptor.format}});for(let n of this.externalTextures)e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,externalTexture:{}});for(let n of this.samplers)e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,sampler:{}});for(let n of this.buffers)n.usage!=="vertex"&&e.push({binding:this.context.getIndexFor(n),visibility:this.shaderStage,buffer:{type:mt[n.usage]}});let r=this.root.device.createBindGroupLayout({entries:e});return this.layout=r,r}getBindGroup(){if(this.checkBindGroupInvalidation(),this.bindGroup)return this.bindGroup;let e=[];for(let n of this.textureViews)e.push({binding:this.context.getIndexFor(n),resource:this.root.viewFor(n)});for(let n of this.externalTextures)e.push({binding:this.context.getIndexFor(n),resource:this.root.externalTextureFor(n)});for(let n of this.samplers)e.push({binding:this.context.getIndexFor(n),resource:this.root.samplerFor(n)});for(let n of this.buffers)n.usage!=="vertex"&&e.push({binding:this.context.getIndexFor(n),resource:{buffer:n.allocatable.buffer}});let r=this.root.device.createBindGroup({layout:this.getBindGroupLayout(),entries:e});return this.bindGroup=r,r}getBindings(){return{bindGroupLayout:this.getBindGroupLayout(),bindGroup:this.getBindGroup()}}getVertexBufferDescriptors(){if(this.vertexBuffers===null)throw new Error("Vertex buffers not set");if(this.vertexLayout)return this.vertexLayout;let e=[];for(let[r,n]of this.vertexBuffers.entries())e.push(_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},r.vertexLayout),{attributes:[{shaderLocation:n,offset:0,format:xe(r.allocatable.dataType)}]}));return this.vertexLayout=e,e}getVertexBuffers(){if(this.vertexBuffers===null)throw new Error("Vertex buffers not set");return this.vertexBuffers.entries()}getVertexBufferIndex(e){var n;let r=(n=this.vertexBuffers)==null?void 0:n.get(e);if(this.vertexBuffers===null||r===void 0)throw new Error("Vertex buffers not set");return r}invalidateBindGroup(){this.bindGroup=null}checkBindGroupInvalidation(){for(let e of this.externalTextures){if(this.root.isDirty(e)){this.invalidateBindGroup(),this.root.markClean(e);continue}e.source instanceof HTMLVideoElement&&this.invalidateBindGroup()}}};var f=class{constructor(e){this.name=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"s");this.s=_chunkSBJR5ZQJcjs.q.get(e)}get label(){return this.name}resolve(e){return e.resolve(_chunkSBJR5ZQJcjs.B`${this.s}`)}},y={vertexIndex:new f("vertex_index"),instanceIndex:new f("instance_index"),position:new f("position"),clipDistances:new f("clip_distances"),frontFacing:new f("front_facing"),fragDepth:new f("frag_depth"),sampleIndex:new f("sample_index"),sampleMask:new f("sample_mask"),fragment:new f("fragment"),localInvocationId:new f("local_invocation_id"),localInvocationIndex:new f("local_invocation_index"),globalInvocationId:new f("global_invocation_id"),workgroupId:new f("workgroup_id"),numWorkgroups:new f("num_workgroups")};var yt={[y.vertexIndex.s]:_chunkSBJR5ZQJcjs.m,[y.instanceIndex.s]:_chunkSBJR5ZQJcjs.m,[y.position.s]:_chunkSBJR5ZQJcjs.V,[y.clipDistances.s]:_chunkSBJR5ZQJcjs.H.call(void 0, _chunkSBJR5ZQJcjs.m,8),[y.frontFacing.s]:_chunkSBJR5ZQJcjs.o,[y.fragDepth.s]:_chunkSBJR5ZQJcjs.o,[y.sampleIndex.s]:_chunkSBJR5ZQJcjs.m,[y.sampleMask.s]:_chunkSBJR5ZQJcjs.m,[y.fragment.s]:_chunkSBJR5ZQJcjs.V,[y.localInvocationId.s]:_chunkSBJR5ZQJcjs.U,[y.localInvocationIndex.s]:_chunkSBJR5ZQJcjs.m,[y.globalInvocationId.s]:_chunkSBJR5ZQJcjs.U,[y.workgroupId.s]:_chunkSBJR5ZQJcjs.U,[y.numWorkgroups.s]:_chunkSBJR5ZQJcjs.U};function X(t){let e=yt[t];if(!e)throw new Error(`The symbol ${String(t)} in not a valid 'builtin'`);return e}var S=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"lastUniqueId",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"names",new WeakMap)}nameFor(e){let r=this.names.get(e);if(r===void 0){let n;e.label?(n=e.label.replaceAll(/\s/g,"_"),n=n.replaceAll(/[^\w\d]/g,"")):n="item",r=`${n}_${this.lastUniqueId++}`,this.names.set(e,r)}return r}};function x(t,e){return _chunkSBJR5ZQJcjs.v.call(void 0, e.value)?t.resolve(e.value):String(e.value)}function xt(t){throw new Error(`'${JSON.stringify(t)}' was not handled by the WGSL generator.`)}function Ze(t,e){return e?{value:"true",dataType:_chunkSBJR5ZQJcjs.l}:{value:"false",dataType:_chunkSBJR5ZQJcjs.l}}function et(t,e){return`${t.indent()}{
|
2
|
+
${e.block.map(r=>ve(t,r)).join(`
|
3
|
+
`)}
|
4
|
+
${t.dedent()}}`}function he(t,e){return t.getById(e)}function b(t,e){if(typeof e=="string")return he(t,e);if(typeof e=="boolean")return Ze(t,e);if("x2"in e){let[r,n,a]=e.x2,i=x(t,b(t,r)),u=x(t,b(t,a));return{value:`${i} ${n} ${u}`,dataType:_chunkSBJR5ZQJcjs.t}}if("."in e){let[r,n]=e["."],a=b(t,r),i=x(t,b(t,n));return _chunkSBJR5ZQJcjs.u.call(void 0, a.value)||typeof a.value=="object"?i==="value"?{value:x(t,a),dataType:_chunkSBJR5ZQJcjs.t}:{value:a.value[i],dataType:_chunkSBJR5ZQJcjs.t}:{value:`${x(t,a)}.${i}`,dataType:_chunkSBJR5ZQJcjs.t}}if("[]"in e){let[r,n]=e["[]"],a=x(t,b(t,r)),i=x(t,b(t,n));return{value:`${a}[${i}]`,dataType:_chunkSBJR5ZQJcjs.t}}if("num"in e)return{value:e.num,dataType:_chunkSBJR5ZQJcjs.t};if("call"in e){let n=b(t,e.call).value,i=e.args.map(u=>b(t,u)).map(u=>x(t,u));return _chunkSBJR5ZQJcjs.u.call(void 0, n)||typeof n=="function"?{value:n(...i),dataType:_chunkSBJR5ZQJcjs.t}:{value:`${String(n)}(${i.join(", ")})`,dataType:_chunkSBJR5ZQJcjs.t}}xt(e)}function ve(t,e){if(typeof e=="string")return`${t.pre}${x(t,he(t,e))};`;if(typeof e=="boolean")return`${t.pre}${x(t,Ze(t,e))};`;if("return"in e)return e.return===null?`${t.pre}return;`:`${t.pre}return ${x(t,b(t,e.return))};`;if("if"in e){let r=x(t,b(t,e.if));t.indent();let n=ve(t,e.do);t.dedent(),t.indent();let a=e.else?ve(t,e.else):void 0;return t.dedent(),a?`${t.pre}if (${r})
|
5
|
+
${n}
|
6
|
+
${t.pre}else
|
7
|
+
${a}`:`${t.pre}if (${r})
|
8
|
+
${n}`}if("let"in e||"const"in e){let r=x(t,he(t,"let"in e?e.let:e.const)),n=e.eq?b(t,e.eq):void 0;if(!n)throw new Error("Cannot create variable without an initial value.");return`${t.pre}var ${r} = ${x(t,n)};`}return"block"in e?et(t,e):`${t.pre}${x(t,b(t,e))};`}function be(t,e){return et(t,e)}var ht={uniform:"uniform",mutable:"storage, read_write",readonly:"storage, read"},Be=class{constructor(e,r,n){this.names=e;this._bindingGroup=r;this.jitTranspiler=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_nextFreeBindingIdx",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_nextFreeVertexBindingIdx",0);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedBindables",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedRenderResources",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_resourceToIndexMap",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_vertexBufferToIndexMap",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_usedBuiltins",new Set);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_declarations",[])}get usedBindables(){return this._usedBindables}get usedRenderResources(){return this._usedRenderResources}get declarations(){return this._declarations}get usedBuiltins(){return this._usedBuiltins}reserveBindingEntry(e){this._usedBindables.add(e);let r=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,r),{group:this._bindingGroup,idx:r}}registerVertexEntry(e){this._usedBindables.add(e);let r=this._nextFreeVertexBindingIdx++;this._vertexBufferToIndexMap.set(e,r)}reserveRenderResourceEntry(e){this._usedRenderResources.add(e);let r=this._nextFreeBindingIdx++;return this._resourceToIndexMap.set(e,r),{group:this._bindingGroup,idx:r}}getBindingIndex(e){return this._resourceToIndexMap.get(e)}addDeclaration(e){this._declarations.push(e)}addBuiltin(e){this._usedBuiltins.add(e)}},Pe=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_stack",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_itemDepth",0)}get itemDepth(){return this._itemDepth}get topItem(){let e=this._stack[this._stack.length-1];if(!e||e.type!=="item")throw new Error("Internal error, expected item layer to be on top.");return e}pushItem(){this._itemDepth++,this._stack.push({type:"item",usedSlots:new Set})}pushSlotBindings(e){this._stack.push({type:"slotBinding",bindingMap:new WeakMap(e)})}pushFunctionScope(e,r,n){this._stack.push({type:"functionScope",args:e,returnType:r,externalMap:n})}pop(){let e=this._stack.pop();(e==null?void 0:e.type)==="item"&&this._itemDepth--}readSlot(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if((n==null?void 0:n.type)==="item")n.usedSlots.add(e);else if((n==null?void 0:n.type)==="slotBinding"){let a=n.bindingMap.get(e);if(a!==void 0)return a}else if(!((n==null?void 0:n.type)==="functionScope"||(n==null?void 0:n.type)==="blockScope"))throw new Error("Unknown layer type.")}return e.defaultValue}getResourceById(e){for(let r=this._stack.length-1;r>=0;--r){let n=this._stack[r];if((n==null?void 0:n.type)==="functionScope"){let a=n.args.find(u=>u.value===e);if(a!==void 0)return a;let i=n.externalMap[e];if(i!==void 0)return{value:i,dataType:_chunkSBJR5ZQJcjs.t}}else if((n==null?void 0:n.type)==="blockScope"){let a=n.declarations.get(e);if(a!==void 0)return{value:e,dataType:a}}}}},oe=[""," "," "," "," "," "," "," "," "],we=oe.length-1,Se=class{constructor(){_chunkSBJR5ZQJcjs.d.call(void 0, this,"identLevel",0)}get pre(){var e;return(e=oe[this.identLevel])!=null?e:oe[we].repeat(this.identLevel/we)+oe[this.identLevel%we]}indent(){let e=this.pre;return this.identLevel++,e}dedent(){return this.identLevel--,this.pre}},_=class{constructor(e){_chunkSBJR5ZQJcjs.d.call(void 0, this,"_memoizedResolves",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_shared");_chunkSBJR5ZQJcjs.d.call(void 0, this,"_indentController",new Se);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_itemStateStack",new Pe);var r;this._shared=new Be(e.names,(r=e.bindingGroup)!=null?r:0,e.jitTranspiler)}get usedBindables(){return this._shared.usedBindables}get usedRenderResources(){return this._shared.usedRenderResources}get usedBuiltins(){return this._shared.usedBuiltins}get pre(){return this._indentController.pre}indent(){return this._indentController.indent()}dedent(){return this._indentController.dedent()}getById(e){var r;return(r=this._itemStateStack.getResourceById(e))!=null?r:{value:e,dataType:_chunkSBJR5ZQJcjs.t}}transpileFn(e){if(!this._shared.jitTranspiler)throw new Error("Tried to execute a tgpu.fn function without providing a JIT transpiler, or transpiling at build time.");return this._shared.jitTranspiler.transpileFn(e)}fnToWgsl(e,r,n,a){let i=r.map((l,d)=>({value:l,dataType:e.argTypes[d]}));this._itemStateStack.pushFunctionScope(i,e.returnType,a);let u=be(this,n);this._itemStateStack.pop();let s=i.map(l=>`${l.value}: ${this.resolve(l.dataType)}`).join(", ");return{head:e.returnType!==void 0?`(${s}) -> ${this.resolve(e.returnType)}`:`(${s})`,body:u}}addDeclaration(e){this._shared.addDeclaration(this.resolve(e))}addBinding(e,r){if(e.usage==="vertex"){this._shared.registerVertexEntry(e);return}let{group:n,idx:a}=this._shared.reserveBindingEntry(e);this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var<${ht[e.usage]}> ${r}: ${e.allocatable.dataType};`)}addRenderResource(e,r){let{group:n,idx:a}=this._shared.reserveRenderResourceEntry(e);if(_chunkSBJR5ZQJcjs.w.call(void 0, e.type)||_chunkSBJR5ZQJcjs.y.call(void 0, e.type)||_chunkSBJR5ZQJcjs.x.call(void 0, e.type)){this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type};`);return}if(ue(e)){if(e.access!==void 0){this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type}<${e.texture.descriptor.format}, ${e.access}>;`);return}this.addDeclaration(_chunkSBJR5ZQJcjs.B`@group(${n}) @binding(${a}) var ${r}: ${e.type}<${e.dataType}>;`);return}throw new Error(`Unsupported resource type: ${e.type}`)}addBuiltin(e){this._shared.addBuiltin(e)}nameFor(e){return this._shared.names.nameFor(e)}readSlot(e){let r=this._itemStateStack.readSlot(e);if(r===void 0)throw new (0, _chunkSBJR5ZQJcjs.h)(e);return r}unwrap(e){let r=e;for(;_chunkSBJR5ZQJcjs.A.call(void 0, r);)r=this.readSlot(r);return r}_getOrInstantiate(e){var n;let r=(n=this._memoizedResolves.get(e))!=null?n:[];this._itemStateStack.pushItem();try{for(let u of r)if([...u.slotToValueMap.entries()].every(([l,d])=>this._itemStateStack.readSlot(l)===d))return u.result;let a=e.resolve(this),i=new Map;for(let u of this._itemStateStack.topItem.usedSlots)i.set(u,this._itemStateStack.readSlot(u));return r.push({slotToValueMap:i,result:a}),this._memoizedResolves.set(e,r),a}catch(a){throw a instanceof _chunkSBJR5ZQJcjs.g?a.appendToTrace(e):new (0, _chunkSBJR5ZQJcjs.g)(a,[e])}finally{this._itemStateStack.pop()}}resolve(e,r=[]){if(!_chunkSBJR5ZQJcjs.u.call(void 0, e))return String(e);let n=!1;r.length>0&&(n=!0,this._itemStateStack.pushSlotBindings(r));try{if(this._itemStateStack.itemDepth===0){let a=_chunkSBJR5ZQJcjs.e.call(void 0, ()=>this._getOrInstantiate(e));return`${[...this._shared.declarations].join(`
|
9
|
+
|
10
|
+
`)}${a}`}return this._getOrInstantiate(e)}finally{n&&this._itemStateStack.pop()}}getIndexFor(e){let r=this._shared.getBindingIndex(e);if(r===void 0)throw new Error("No index found for item");return r}};var $=class{constructor(e,r){this.root=e;this.rootNode=r}build(e){var a;let r=new _({names:(a=e.nameRegistry)!=null?a:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler}),n=r.resolve(this.rootNode);return{bindGroupResolver:new ie(this.root,r,e.shaderStage),code:n}}};function vt(t){return Object.getOwnPropertySymbols(t).map(r=>{if(_chunkSBJR5ZQJcjs.p.get(r)===void 0)throw new Error("Symbol is not a member of `builtin`");return{name:t[r],builtinSymbol:r}})}var se=class{constructor(e,r,n,a){this.root=e;this.vertexRoot=r;this.fragmentRoot=n;this.vertexOutputFormat=a}build(e){var ke,Ie,Ce,Fe;let r=Object.getOwnPropertySymbols(this.vertexOutputFormat).map(p=>{let h=this.vertexOutputFormat[p];if(typeof h!="string")throw new Error("Output names must be strings.");return{symbol:p,name:h}}),n=vt(Object.fromEntries(r.map(({symbol:p,name:h})=>[p,h]))),a=Object.keys(this.vertexOutputFormat).map((p,h)=>{let E=this.vertexOutputFormat[p];if(!E)throw new Error("Output names must be strings.");return{name:p,varInfo:E,index:h}}),i=[...n.map(p=>{var E;let h=(E=this.vertexOutputFormat[p.builtinSymbol])!=null?E:"";return _chunkSBJR5ZQJcjs.B`
|
11
|
+
@builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p.builtinSymbol)}) ${h}: ${X(p.builtinSymbol)},
|
12
|
+
`}),...a.map(({name:p,varInfo:h,index:E})=>_chunkSBJR5ZQJcjs.B`
|
13
|
+
@location(${E}) ${p}: ${h},
|
14
|
+
`)],u=new _({names:(ke=e.nameRegistry)!=null?ke:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});u.resolve(this.vertexRoot);let l=Array.from(u.usedBindables).filter(p=>p.usage==="vertex").map((p,h)=>({idx:h,entry:{bindable:p,underlyingType:p.allocatable.dataType}})),d=l.map(p=>_chunkSBJR5ZQJcjs.B`
|
15
|
+
@location(${p.idx}) ${p.entry.bindable} : ${"expressionCode"in p.entry.underlyingType?p.entry.underlyingType.expressionCode:p.entry.underlyingType.elementType},
|
16
|
+
`),c=[...Array.from(u.usedBuiltins).map(p=>_chunkSBJR5ZQJcjs.B`
|
17
|
+
@builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, p)}: ${X(p)},
|
18
|
+
`),...d],w=_chunkSBJR5ZQJcjs.B`
|
19
|
+
struct VertexOutput {
|
20
|
+
${i}
|
21
|
+
};
|
22
|
+
|
23
|
+
@vertex
|
24
|
+
fn main(${c}) -> VertexOutput {
|
25
|
+
${this.vertexRoot}
|
26
|
+
var output: VertexOutput;
|
27
|
+
${n.map(p=>_chunkSBJR5ZQJcjs.B`
|
28
|
+
output.${p.name} = ${p.name};
|
29
|
+
`)}
|
30
|
+
${a.map(({name:p})=>_chunkSBJR5ZQJcjs.B`
|
31
|
+
output.${p} = ${p};
|
32
|
+
`)}
|
33
|
+
return output;
|
34
|
+
}
|
35
|
+
`,U=new _({names:(Ie=e.nameRegistry)!=null?Ie:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});U.resolve(this.fragmentRoot);let Q=Array.from(U.usedBuiltins).map(p=>_chunkSBJR5ZQJcjs.B`
|
36
|
+
@builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, p)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, p)}: ${X(p)},
|
37
|
+
`),Z=a.map(({name:p,varInfo:h},E)=>_chunkSBJR5ZQJcjs.B`
|
38
|
+
@location(${E}) ${p}: ${h},
|
39
|
+
`),lt=[...Q,...Z],dt=_chunkSBJR5ZQJcjs.B`
|
40
|
+
@fragment
|
41
|
+
fn main(${lt}) -> @location(0) vec4f {
|
42
|
+
${this.fragmentRoot}
|
43
|
+
}
|
44
|
+
`,$e=new $(this.root,w).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.VERTEX,nameRegistry:(Ce=e.nameRegistry)!=null?Ce:new S}),gt=new $(this.root,dt).build({bindingGroup:e.bindingGroup+1,shaderStage:GPUShaderStage.FRAGMENT,nameRegistry:(Fe=e.nameRegistry)!=null?Fe:new S});return $e.bindGroupResolver.setVertexBuffers(l.map(p=>({index:p.idx,buffer:p.entry.bindable}))),{vertexProgram:$e,fragmentProgram:gt}}},pe=class{constructor(e,r,n){this.root=e;this.computeRoot=r;this.workgroupSize=n}build(e){var l,d,T,m;let r=new _({names:(l=e.nameRegistry)!=null?l:new S,bindingGroup:e.bindingGroup,jitTranspiler:this.root.jitTranspiler});r.resolve(this.computeRoot);let a=Array.from(r.usedBuiltins).map(c=>_chunkSBJR5ZQJcjs.B`
|
45
|
+
@builtin(${_chunkSBJR5ZQJcjs.r.call(void 0, c)}) ${_chunkSBJR5ZQJcjs.s.call(void 0, c)}: ${X(c)},
|
46
|
+
`),i=`@workgroup_size(${this.workgroupSize[0]}, ${(d=this.workgroupSize[1])!=null?d:1}, ${(T=this.workgroupSize[2])!=null?T:1})`,u=_chunkSBJR5ZQJcjs.B`
|
47
|
+
@compute ${i}
|
48
|
+
fn main(${a}) {
|
49
|
+
${this.computeRoot}
|
50
|
+
}
|
51
|
+
`;return new $(this.root,u).build({bindingGroup:e.bindingGroup,shaderStage:GPUShaderStage.COMPUTE,nameRegistry:(m=e.nameRegistry)!=null?m:new S})}};var _typedbinary = require('typed-binary');function le(t,e,r){return new De(t,e,r)}function A(t){return t.resourceType==="buffer"}function de(t){return!!t.usableAsUniform}function ge(t){return!!t.usableAsStorage}function bt(t){return!!t.usableAsVertex}var De=class{constructor(e,r,n){this._group=e;this.dataType=r;this.initialOrBuffer=n;_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","buffer");_chunkSBJR5ZQJcjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_device",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_buffer",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_destroyed",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_subscription",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_label");_chunkSBJR5ZQJcjs.d.call(void 0, this,"initial");_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsUniform",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsStorage",!1);_chunkSBJR5ZQJcjs.d.call(void 0, this,"usableAsVertex",!1);_chunkSBJR5ZQJcjs.z.call(void 0, n)?this._buffer=n:this.initial=n}get label(){return this._label}get buffer(){if(!this._device)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let e=new (0, _typedbinary.BufferWriter)(this._buffer.getMappedRange());if(Xe(this.initial)){let r=this._group;if(!r)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");let n=this.initial;this.dataType.write(e,r.readPlum(n)),this._subscription=r.onPlumChange(n,()=>{this.write(r.readPlum(n))})}else this.dataType.write(e,this.initial);this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer has not been assigned a device. Use .$device(device) to assign a device");return this._device}get destroyed(){return this._destroyed}$name(e){return this._label=e,this}$usage(...e){for(let r of e)this.flags|=r==="uniform"?GPUBufferUsage.UNIFORM:0,this.flags|=r==="storage"?GPUBufferUsage.STORAGE:0,this.flags|=r==="vertex"?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r==="uniform",this.usableAsStorage=this.usableAsStorage||r==="storage",this.usableAsVertex=this.usableAsVertex||r==="vertex";return this}$addFlags(e){return this.flags|=e,this}$device(e){return this._device=e,this}write(e){let r=this.buffer,n=this.device;if(r.mapState==="mapped"){let i=r.getMappedRange();if(A(e))throw new Error("Cannot copy to a mapped buffer.");this.dataType.write(new (0, _typedbinary.BufferWriter)(i),e);return}let a=this.dataType.size;if(A(e)){let i=e.buffer;if(this._group)this._group.commandEncoder.copyBufferToBuffer(i,0,r,0,a);else{let u=n.createCommandEncoder();u.copyBufferToBuffer(i,0,r,0,a),n.queue.submit([u.finish()])}}else{this._group&&this._group.flush();let i=new ArrayBuffer(a);this.dataType.write(new (0, _typedbinary.BufferWriter)(i),e),n.queue.writeBuffer(r,0,i,0,a)}}async read(){this._group&&this._group.flush();let e=this.buffer,r=this.device;if(e.mapState==="mapped"){let u=e.getMappedRange();return this.dataType.read(new (0, _typedbinary.BufferReader)(u))}if(e.usage&GPUBufferUsage.MAP_READ){await e.mapAsync(GPUMapMode.READ);let u=e.getMappedRange(),s=this.dataType.read(new (0, _typedbinary.BufferReader)(u));return e.unmap(),s}let n=r.createBuffer({size:this.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),a=r.createCommandEncoder();a.copyBufferToBuffer(e,0,n,0,this.dataType.size),r.queue.submit([a.finish()]),await r.queue.onSubmittedWorkDone(),await n.mapAsync(GPUMapMode.READ,0,this.dataType.size);let i=this.dataType.read(new (0, _typedbinary.BufferReader)(n.getMappedRange()));return n.unmap(),n.destroy(),i}destroy(){var e;this._destroyed||(this._destroyed=!0,this._subscription&&this._subscription(),(e=this._buffer)==null||e.destroy())}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function Re(t){return!!t&&t.resourceType==="buffer-usage"}function rt(t){return new _e(t)}function nt(t){return!!t&&t.resourceType==="bind-group-layout"}function at(t){return!!t&&t.resourceType==="bind-group"}var Ge=class t extends Error{constructor(e,r){super(`Bind group '${e!=null?e:"<unnamed>"}' is missing a required binding '${r}'`),Object.setPrototypeOf(this,t.prototype)}},tt=["compute"],k=["compute","vertex","fragment"],_e=class{constructor(e){this.entries=e;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_label");_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","bind-group-layout");_chunkSBJR5ZQJcjs.d.call(void 0, this,"bound",{})}get label(){return this._label}$name(e){return this._label=e,this}unwrap(e){var n;return e.device.createBindGroupLayout({label:(n=this.label)!=null?n:"",entries:Object.values(this.entries).map((a,i)=>{var l,d,T,m;if(a===null)return null;let u=a.visibility,s={binding:i,visibility:0};if("uniform"in a)u=u!=null?u:k,s.buffer={type:"uniform"};else if("storage"in a)u=u!=null?u:a.access==="mutable"?tt:k,s.buffer={type:a.access==="mutable"?"storage":"read-only-storage"};else if("sampler"in a)u=u!=null?u:k,s.sampler={type:a.sampler};else if("texture"in a)u=u!=null?u:k,s.texture={sampleType:a.texture,viewDimension:(l=a.viewDimension)!=null?l:"2d",multisampled:(d=a.multisampled)!=null?d:!1};else if("storageTexture"in a){let c=(T=a.access)!=null?T:"writeonly";u=u!=null?u:c==="readonly"?k:tt,s.storageTexture={format:a.storageTexture,access:{mutable:"read-write",readonly:"read-only",writeonly:"write-only"}[c],viewDimension:(m=a.viewDimension)!=null?m:"2d"}}else"externalTexture"in a&&(u=u!=null?u:k,s.externalTexture={});return u!=null&&u.includes("compute")&&(s.visibility|=GPUShaderStage.COMPUTE),u!=null&&u.includes("vertex")&&(s.visibility|=GPUShaderStage.VERTEX),u!=null&&u.includes("fragment")&&(s.visibility|=GPUShaderStage.FRAGMENT),s}).filter(a=>a!==null)})}populate(e){return new Ae(this,e)}},Ae=class{constructor(e,r){this.layout=e;this.entries=r;_chunkSBJR5ZQJcjs.d.call(void 0, this,"resourceType","bind-group");for(let n of Object.keys(e.entries))if(e.entries[n]!==null&&!(n in r))throw new Ge(e.label,n)}unwrap(e){var n;return e.device.createBindGroup({label:(n=this.layout.label)!=null?n:"",layout:e.unwrap(this.layout),entries:Object.entries(this.layout.entries).map(([a,i],u)=>{var l;if(i===null)return null;let s=this.entries[a];if(s===void 0)throw new Error(`'${a}' is a resource required to populate bind group layout '${(l=this.layout.label)!=null?l:"<unnamed>"}'.`);if("uniform"in i){let d;if(A(s)){if(!de(s))throw new (0, _chunkSBJR5ZQJcjs.j)(s);d={buffer:e.unwrap(s)}}else if(Re(s)){if(!de(s.allocatable))throw new (0, _chunkSBJR5ZQJcjs.j)(s.allocatable);d={buffer:e.unwrap(s.allocatable)}}else d={buffer:s};return{binding:u,resource:d}}if("storage"in i){let d;if(A(s)){if(!ge(s))throw new (0, _chunkSBJR5ZQJcjs.j)(s);d={buffer:e.unwrap(s)}}else if(Re(s)){if(!ge(s.allocatable))throw new (0, _chunkSBJR5ZQJcjs.j)(s.allocatable);d={buffer:e.unwrap(s.allocatable)}}else d={buffer:s};return{binding:u,resource:d}}if("texture"in i||"storageTexture"in i||"externalTexture"in i||"sampler"in i)return{binding:u,resource:s};throw new Error(`Malformed bind group entry: ${s} (${JSON.stringify(s)})`)}).filter(a=>a!==null)})}};var ce=class{constructor(e,r){this.device=e;this.jitTranspiler=r;_chunkSBJR5ZQJcjs.d.call(void 0, this,"_buffers",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_samplers",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_textures",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_textureViews",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_externalTexturesStatus",new WeakMap);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_unwrappedBindGroupLayouts",new H(e=>e.unwrap(this)));_chunkSBJR5ZQJcjs.d.call(void 0, this,"_unwrappedBindGroups",new H(e=>e.unwrap(this)));_chunkSBJR5ZQJcjs.d.call(void 0, this,"_pipelineExecutors",[]);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_commandEncoder",null);_chunkSBJR5ZQJcjs.d.call(void 0, this,"_plumStore",new ne)}get commandEncoder(){return this._commandEncoder||(this._commandEncoder=this.device.createCommandEncoder()),this._commandEncoder}createBuffer(e,r){let n=le(this,e,r).$device(this.device);return this._buffers.push(n),n}destroy(){for(let e of this._buffers)e.destroy()}unwrap(e){if(A(e))return e.buffer;if(nt(e))return this._unwrappedBindGroupLayouts.getOrMake(e);if(at(e))return this._unwrappedBindGroups.getOrMake(e);throw new Error(`Unknown resource type: ${e}`)}textureFor(e){let r;"texture"in e?r=e.texture:r=e;let n=this._textures.get(r);if(!n){let a=_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},r.descriptor),{usage:r.flags});if(n=this.device.createTexture(a),!n)throw new Error(`Failed to create texture for ${e}`);this._textures.set(r,n)}return n}viewFor(e){let r=this._textureViews.get(e);return r||(r=this.textureFor(e.texture).createView(e.descriptor),this._textureViews.set(e,r)),r}externalTextureFor(e){if(this._externalTexturesStatus.set(e,"clean"),e.descriptor.source===void 0)throw new Error("External texture source needs to be defined before use");return this.device.importExternalTexture(e.descriptor)}samplerFor(e){let r=this._samplers.get(e);if(!r){if(r=this.device.createSampler(e.descriptor),!r)throw new Error(`Failed to create sampler for ${e}`);this._samplers.set(e,r)}return r}setSource(e,r){this._externalTexturesStatus.set(e,"dirty"),e.descriptor.source=r}isDirty(e){return this._externalTexturesStatus.get(e)==="dirty"}markClean(e){this._externalTexturesStatus.set(e,"clean")}readPlum(e){return this._plumStore.get(e)}setPlum(e,r){if(typeof r=="function"){let n=r;this._plumStore.set(e,n(this._plumStore.get(e)))}else this._plumStore.set(e,r)}onPlumChange(e,r){return this._plumStore.subscribe(e,r)}makeRenderPipeline(e){var d,T,m,c,w,U,fe,Q,Z;let{vertexProgram:r,fragmentProgram:n}=new se(this,e.vertex.code,e.fragment.code,e.vertex.output).build({bindingGroup:((d=e.externalLayouts)!=null?d:[]).length}),a=this.device.createShaderModule({code:r.code}),i=this.device.createShaderModule({code:n.code}),u=this.device.createPipelineLayout({label:(T=e.label)!=null?T:"",bindGroupLayouts:[...(m=e.externalLayouts)!=null?m:[],r.bindGroupResolver.getBindGroupLayout(),n.bindGroupResolver.getBindGroupLayout()]}),s=this.device.createRenderPipeline({label:(c=e.label)!=null?c:"",layout:u,vertex:{module:a,buffers:(w=r.bindGroupResolver.getVertexBufferDescriptors())!=null?w:[]},fragment:{module:i,targets:(fe=(U=e.fragment)==null?void 0:U.target)!=null?fe:[]},primitive:e.primitive}),l=new Ve(this,s,r,n,(Z=(Q=e.externalLayouts)==null?void 0:Q.length)!=null?Z:0);return this._pipelineExecutors.push(l),l}makeComputePipeline(e){var s,l,d,T,m;let r=_chunkSBJR5ZQJcjs.e.call(void 0, ()=>{var c,w;return new pe(this,e.code,(c=e.workgroupSize)!=null?c:[1]).build({bindingGroup:((w=e.externalLayouts)!=null?w:[]).length})}),n=this.device.createShaderModule({code:r.code}),a=this.device.createPipelineLayout({label:(s=e.label)!=null?s:"",bindGroupLayouts:[...(l=e.externalLayouts)!=null?l:[],r.bindGroupResolver.getBindGroupLayout()]}),i=this.device.createComputePipeline({label:(d=e.label)!=null?d:"",layout:a,compute:{module:n}}),u=new Le(this,i,[r],(m=(T=e.externalLayouts)==null?void 0:T.length)!=null?m:0);return this._pipelineExecutors.push(u),u}flush(){this._commandEncoder&&(this.device.queue.submit([this._commandEncoder.finish()]),this._commandEncoder=null)}},Ve=class{constructor(e,r,n,a,i,u){this.root=e;this.pipeline=r;this.vertexProgram=n;this.fragmentProgram=a;this.externalLayoutCount=i;this.label=u}execute(e){var T,m,c;let d=e,{vertexCount:r,instanceCount:n,firstVertex:a,firstInstance:i,externalBindGroups:u}=d,s=_chunkSBJR5ZQJcjs.c.call(void 0, d,["vertexCount","instanceCount","firstVertex","firstInstance","externalBindGroups"]);if(((T=u==null?void 0:u.length)!=null?T:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(m=u==null?void 0:u.length)!=null?m:0}`);let l=this.root.commandEncoder.beginRenderPass(_chunkSBJR5ZQJcjs.b.call(void 0, _chunkSBJR5ZQJcjs.a.call(void 0, {},s),{label:(c=this.label)!=null?c:""}));l.setPipeline(this.pipeline),(u!=null?u:[]).forEach((w,U)=>l.setBindGroup(U,w)),l.setBindGroup((u!=null?u:[]).length,this.vertexProgram.bindGroupResolver.getBindGroup()),l.setBindGroup((u!=null?u:[]).length+1,this.fragmentProgram.bindGroupResolver.getBindGroup());for(let[w,U]of this.vertexProgram.bindGroupResolver.getVertexBuffers())l.setVertexBuffer(U,w.allocatable.buffer);l.draw(r,n,a,i),l.end()}},Le=class{constructor(e,r,n,a,i){this.root=e;this.pipeline=r;this.programs=n;this.externalLayoutCount=a;this.label=i}execute(e){var i,u,s;let{workgroups:r=[1,1],externalBindGroups:n}=e!=null?e:{};if(((i=n==null?void 0:n.length)!=null?i:0)!==this.externalLayoutCount)throw new Error(`External bind group count doesn't match the external bind group layout configuration. Expected ${this.externalLayoutCount}, got: ${(u=n==null?void 0:n.length)!=null?u:0}`);let a=this.root.commandEncoder.beginComputePass({label:(s=this.label)!=null?s:""});a.setPipeline(this.pipeline),(n!=null?n:[]).forEach((l,d)=>a.setBindGroup(d,l)),this.programs.forEach((l,d)=>a.setBindGroup((n!=null?n:[]).length+d,l.bindGroupResolver.getBindGroup())),a.dispatchWorkgroups(...r),a.end()}};async function ut(t){if(!navigator.gpu)throw new Error("WebGPU is not supported by this browser.");let e=await navigator.gpu.requestAdapter(t==null?void 0:t.adapter);if(!e)throw new Error("Could not find a compatible GPU");return new ce(await e.requestDevice(t==null?void 0:t.device),t==null?void 0:t.unstable_jitTranspiler)}function it(t){return new ce(t.device,t.unstable_jitTranspiler)}function ot(t,e){return le(void 0,t,e)}function st(t,e){t.write(e)}async function pt(t){return t.read()}var I=t=>Math.sqrt(t.x**2+t.y**2),C=t=>Math.sqrt(t.x**2+t.y**2+t.z**2),F=t=>Math.sqrt(t.x**2+t.y**2+t.z**2+t.w**2),R={length:{vec2f:I,vec2i:I,vec2u:I,vec3f:C,vec3i:C,vec3u:C,vec4f:F,vec4i:F,vec4u:F},add:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t.x+e.x,t.y+e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t.x+e.x,t.y+e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t.x+e.x,t.y+e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t.x+e.x,t.y+e.y,t.z+e.z,t.w+e.w)},sub:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t.x-e.x,t.y-e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t.x-e.x,t.y-e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t.x-e.x,t.y-e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t.x-e.x,t.y-e.y,t.z-e.z,t.w-e.w)},mul:{vec2f:(t,e)=>_chunkSBJR5ZQJcjs.P.call(void 0, t*e.x,t*e.y),vec2i:(t,e)=>_chunkSBJR5ZQJcjs.Q.call(void 0, t*e.x,t*e.y),vec2u:(t,e)=>_chunkSBJR5ZQJcjs.R.call(void 0, t*e.x,t*e.y),vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t*e.x,t*e.y,t*e.z),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t*e.x,t*e.y,t*e.z),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t*e.x,t*e.y,t*e.z),vec4f:(t,e)=>_chunkSBJR5ZQJcjs.V.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w),vec4i:(t,e)=>_chunkSBJR5ZQJcjs.W.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w),vec4u:(t,e)=>_chunkSBJR5ZQJcjs.X.call(void 0, t*e.x,t*e.y,t*e.z,t*e.w)},dot:{vec2f:(t,e)=>t.x*e.x+t.y*e.y,vec2i:(t,e)=>t.x*e.x+t.y*e.y,vec2u:(t,e)=>t.x*e.x+t.y*e.y,vec3f:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec3i:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec3u:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z,vec4f:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w,vec4i:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w,vec4u:(t,e)=>t.x*e.x+t.y*e.y+t.z*e.z+t.w*e.w},normalize:{vec2f:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.P.call(void 0, t.x/e,t.y/e)},vec2i:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.Q.call(void 0, t.x/e,t.y/e)},vec2u:t=>{let e=I(t);return _chunkSBJR5ZQJcjs.R.call(void 0, t.x/e,t.y/e)},vec3f:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.S.call(void 0, t.x/e,t.y/e,t.z/e)},vec3i:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.T.call(void 0, t.x/e,t.y/e,t.z/e)},vec3u:t=>{let e=C(t);return _chunkSBJR5ZQJcjs.U.call(void 0, t.x/e,t.y/e,t.z/e)},vec4f:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.V.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)},vec4i:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.W.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)},vec4u:t=>{let e=F(t);return _chunkSBJR5ZQJcjs.X.call(void 0, t.x/e,t.y/e,t.z/e,t.w/e)}},cross:{vec3f:(t,e)=>_chunkSBJR5ZQJcjs.S.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x),vec3i:(t,e)=>_chunkSBJR5ZQJcjs.T.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x),vec3u:(t,e)=>_chunkSBJR5ZQJcjs.U.call(void 0, t.y*e.z-t.z*e.y,t.z*e.x-t.x*e.z,t.x*e.y-t.y*e.x)}};var wt={add(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} + ${e})`:R.add[t.kind](t,e)},sub(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} - ${e})`:R.sub[t.kind](t,e)},mul:(t,e)=>_chunkSBJR5ZQJcjs.f.call(void 0, )?`(${t} * ${e})`:R.mul[e.kind](t,e),dot(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`dot(${t}, ${e})`:R.dot[t.kind](t,e)},normalize:t=>_chunkSBJR5ZQJcjs.f.call(void 0, )?`normalize(${t})`:R.normalize[t.kind](t),cross(t,e){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`cross(${t}, ${e})`:R.cross[t.kind](t,e)},fract(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`fract(${t})`:t-Math.floor(t)},length(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`length(${t})`:R.length[t.kind](t)},sin(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`sin(${t})`:Math.sin(t)},cos(t){return _chunkSBJR5ZQJcjs.f.call(void 0, )?`cos(${t})`:Math.cos(t)}};var Bt={Uniform:"uniform",Storage:"storage",Vertex:"vertex",bindGroupLayout:rt,init:ut,initFromDevice:it,createBuffer:ot,read:pt,write:st},Yr= exports.default =Bt;exports.RecursiveDataTypeError = _chunkSBJR5ZQJcjs.i; exports.default = Yr; exports.isUsableAsStorage = ge; exports.isUsableAsUniform = de; exports.isUsableAsVertex = bt; exports.std = wt; exports.tgpu = Bt;
|
2
52
|
//# sourceMappingURL=index.cjs.map
|