typegpu 0.0.0-alpha.6 → 0.0.0-alpha.7
Sign up to get free protection for your applications and to get access to all the features.
- package/chunk-34O2K2PT.js +2 -0
- package/chunk-34O2K2PT.js.map +1 -0
- package/chunk-T3YCU4G4.cjs +2 -0
- package/chunk-T3YCU4G4.cjs.map +1 -0
- package/data/index.cjs +7 -1
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +38 -8
- package/data/index.d.ts +38 -8
- package/data/index.js +7 -1
- package/data/index.js.map +1 -1
- package/index.cjs +1 -1
- package/index.cjs.map +1 -1
- package/index.d.cts +32 -32
- package/index.d.ts +32 -32
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/{types-DU0c7BuW.d.cts → types-D2gslu2F.d.cts} +5 -10
- package/{types-DU0c7BuW.d.ts → types-D2gslu2F.d.ts} +5 -10
- package/chunk-337KOXP7.js +0 -2
- package/chunk-337KOXP7.js.map +0 -1
- package/chunk-6WFXH2OR.js +0 -8
- package/chunk-6WFXH2OR.js.map +0 -1
- package/chunk-G6QA55EY.cjs +0 -8
- package/chunk-G6QA55EY.cjs.map +0 -1
- package/chunk-S55XYV7U.cjs +0 -2
- package/chunk-S55XYV7U.cjs.map +0 -1
- package/macro/index.cjs +0 -8
- package/macro/index.cjs.map +0 -1
- package/macro/index.d.cts +0 -7
- package/macro/index.d.ts +0 -7
- package/macro/index.js +0 -8
- package/macro/index.js.map +0 -1
package/chunk-G6QA55EY.cjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/data/std140.ts","../src/errors.ts","../src/data/alignIO.ts","../src/data/numeric.ts","../src/data/struct.ts","../src/data/align.ts","../src/data/size.ts","../src/data/array.ts","../src/mathUtils.ts","../src/data/vector.ts","../src/callable.ts","../src/data/pointer.ts","../src/data/atomic.ts"],"names":["MaxValue","Measurer","Schema","RecursiveDataTypeError","_RecursiveDataTypeError","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","SimpleTgpuData","schema","byteAlignment","code","__publicField","output","value","input","measurer","ctx","TB","bool","u32","i32","f32","mat4f","object","align","data","TgpuAlignedImpl","size","TgpuSizedImpl","struct","properties","TgpuStructImpl","_properties","prop","a","b","label","identifier","TgpuIdentifier","key","field","_a","getAttribute","roundUp","modulo","invBitMask","TgpuArrayImpl","elementType","count","beginning","i","elements","arrayOf","CallableImpl","VecSchemaImpl","unitType","length","make","makeFromScalar","args","values","idx","_","_value","reference","Swizzle2Impl","vec2Impl","x","y","vec2fImpl","_vec2fImpl","vec2iImpl","_vec2iImpl","vec2uImpl","_vec2uImpl","Swizzle3Impl","vec3Impl","z","vec3fImpl","_vec3fImpl","vec3iImpl","_vec3iImpl","vec3uImpl","_vec3uImpl","Swizzle4Impl","vec4Impl","w","vec4fImpl","_vec4fImpl","vec4iImpl","_vec4iImpl","vec4uImpl","_vec4uImpl","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","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 type { TgpuResolvable, TgpuSlot } from './types';\n\n/**\n * An error that happens during resolution of WGSL code.\n * Contains a trace of all ancestor resolvables in\n * which this error originated.\n *\n * @category Errors\n */\nexport class ResolutionError extends Error {\n constructor(\n public readonly cause: unknown,\n public readonly trace: TgpuResolvable[],\n ) {\n let entries = trace.map((ancestor) => `- ${ancestor}`);\n\n // Showing only the root and leaf nodes.\n if (entries.length > 20) {\n entries = [...entries.slice(0, 11), '...', ...entries.slice(-10)];\n }\n\n super(`Resolution of the following tree failed: \\n${entries.join('\\n')}`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, ResolutionError.prototype);\n }\n\n appendToTrace(ancestor: TgpuResolvable): ResolutionError {\n const newTrace = [ancestor, ...this.trace];\n\n return new ResolutionError(this.cause, newTrace);\n }\n}\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: TgpuSlot<unknown>) {\n super(`Missing value for '${slot}'`);\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, MissingSlotValueError.prototype);\n }\n}\n\n/**\n * @category Errors\n */\nexport class RecursiveDataTypeError extends Error {\n constructor() {\n super('Recursive types are not supported in WGSL');\n\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, RecursiveDataTypeError.prototype);\n }\n}\n","import type { IMeasurer, ISerialInput, ISerialOutput } from 'typed-binary';\n\n/**\n * @param io the IO to align\n * @param baseAlignment must be power of 2\n */\nfunction alignIO(\n io: ISerialInput | ISerialOutput | IMeasurer,\n baseAlignment: number,\n) {\n const currentPos = 'size' in io ? io.size : io.currentByteOffset;\n\n const bitMask = baseAlignment - 1;\n const offset = currentPos & bitMask;\n\n if ('skipBytes' in io) {\n io.skipBytes((baseAlignment - offset) & bitMask);\n } else {\n io.add((baseAlignment - offset) & bitMask);\n }\n}\n\nexport default alignIO;\n","import * as TB from 'typed-binary';\nimport type { 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\n/**\n * Array of column vectors\n */\nexport type Mat4f = TgpuData<number[]>;\nexport const mat4f: Mat4f = new SimpleTgpuData({\n schema: TB.arrayOf(TB.f32, 16),\n byteAlignment: 16,\n code: 'mat4x4f',\n});\n","import {\n type IMeasurer,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type Parsed,\n Schema,\n type UnwrapRecord,\n object,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type {\n AnyTgpuData,\n ResolutionCtx,\n TgpuData,\n TgpuNamable,\n} from '../types';\nimport { code } from '../wgslCode';\nimport { TgpuIdentifier } from '../wgslIdentifier';\nimport { TgpuAlignedImpl } from './align';\nimport alignIO from './alignIO';\nimport { TgpuSizedImpl } from './size';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuStruct<TProps extends Record<string, AnyTgpuData>>\n extends ISchema<UnwrapRecord<TProps>>,\n TgpuData<UnwrapRecord<TProps>>,\n TgpuNamable {}\n\nexport const struct = <TProps extends Record<string, AnyTgpuData>>(\n properties: TProps,\n): TgpuStruct<TProps> => new TgpuStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuStructImpl<TProps extends Record<string, AnyTgpuData>>\n extends Schema<UnwrapRecord<TProps>>\n implements TgpuData<UnwrapRecord<TProps>>\n{\n private _label: string | undefined;\n private _innerSchema: ISchema<UnwrapRecord<TProps>>;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(private readonly _properties: TProps) {\n super();\n\n this._innerSchema = object(_properties);\n\n this.byteAlignment = Object.values(_properties)\n .map((prop) => prop.byteAlignment)\n .reduce((a, b) => (a > b ? a : b));\n\n this.size = this.measure(MaxValue).size;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<UnwrapRecord<TProps>>): void {\n alignIO(output, this.byteAlignment);\n this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n alignIO(input, this.byteAlignment);\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new TgpuIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${getAttribute(field) ?? ''}${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n\nfunction getAttribute(field: AnyTgpuData): string | undefined {\n if (field instanceof TgpuAlignedImpl) {\n return `@align(${field.byteAlignment}) `;\n }\n if (field instanceof TgpuSizedImpl) {\n return `@size(${field.size}) `;\n }\n}\n","import {\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 IRefResolver,\n type ISchema,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type Parsed,\n f32,\n i32,\n u32,\n} from 'typed-binary';\nimport { CallableImpl } from '../callable';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { TgpuData } from '../types';\nimport alignIO from './alignIO';\n\n// --------------\n// Implementation\n// --------------\n\ninterface VecSchemaOptions<T> {\n unitType: ISchema<number>;\n byteAlignment: number;\n length: number;\n label: string;\n make: (...args: number[]) => T;\n makeFromScalar: (value: number) => T;\n}\n\nclass VecSchemaImpl<T extends vecBase>\n extends CallableImpl<number[], T>\n implements TgpuData<T>\n{\n readonly __unwrapped!: T; // type-token, not available at runtime\n\n readonly unitType: ISchema<number>;\n readonly byteAlignment;\n readonly length;\n readonly size;\n readonly label;\n public get expressionCode() {\n return this.label;\n }\n readonly make: (...args: number[]) => T;\n readonly makeFromScalar: (value: number) => T;\n\n constructor({\n unitType,\n byteAlignment,\n length,\n label,\n make,\n makeFromScalar,\n }: VecSchemaOptions<T>) {\n super();\n this.unitType = unitType;\n this.byteAlignment = byteAlignment;\n this.length = length;\n this.size = length * 4;\n this.label = label;\n this.make = make;\n this.makeFromScalar = makeFromScalar;\n }\n\n _call(...args: number[]): T {\n const values = args; // TODO: Allow users to pass in vectors that fill part of the values.\n\n if (values.length <= 1) {\n return this.makeFromScalar(values[0] ?? 0);\n }\n\n if (values.length === this.length) {\n return this.make(...values);\n }\n\n throw new Error(\n `'${this.label}' constructor called with invalid number of arguments.`,\n );\n }\n\n resolveReferences(ctx: IRefResolver): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: Parsed<T>): void {\n alignIO(output, this.byteAlignment);\n for (let idx = 0; idx < value.length; ++idx) {\n this.unitType.write(output, value.at(idx));\n }\n }\n\n read(input: ISerialInput): Parsed<T> {\n alignIO(input, this.byteAlignment);\n return this.make(\n ...Array.from({ length: this.length }).map((_) =>\n this.unitType.read(input),\n ),\n ) as Parsed<T>;\n }\n\n measure(\n _value: Parsed<T> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment);\n return measurer.add(this.size);\n }\n\n seekProperty(\n reference: Parsed<T> | MaxValue,\n prop: never,\n ): { bufferOffset: number; schema: ISchema<unknown> } | null {\n throw new Error('Method not implemented.');\n }\n\n resolve(): string {\n return this.label;\n }\n}\n\nabstract class Swizzle2Impl<T2> {\n abstract make2(x: number, y: number): T2;\n\n abstract readonly x: number;\n abstract readonly y: number;\n\n get xx(): T2 {\n return this.make2(this.x, this.x);\n }\n\n get xy(): T2 {\n return this.make2(this.x, this.y);\n }\n\n get yx(): T2 {\n return this.make2(this.y, this.x);\n }\n\n get yy(): T2 {\n return this.make2(this.y, this.y);\n }\n}\n\nabstract class vec2Impl<T2> extends Swizzle2Impl<T2> implements vec2 {\n readonly length = 2;\n\n constructor(\n public x: number,\n public y: number,\n ) {\n super();\n }\n\n at(idx: 0 | 1): number {\n return idx === 0 ? this.x : this.y;\n }\n}\n\nclass vec2fImpl extends vec2Impl<vec2f> implements vec2f {\n readonly kind = 'vec2f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n}\n\nclass vec2iImpl extends vec2Impl<vec2i> implements vec2i {\n readonly kind = 'vec2i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n}\n\nclass vec2uImpl extends vec2Impl<vec2u> implements vec2u {\n readonly kind = 'vec2u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n}\n\nabstract class Swizzle3Impl<T2, T3> extends Swizzle2Impl<T2> {\n abstract make3(x: number, y: number, z: number): T3;\n\n abstract readonly z: number;\n}\n\nabstract class vec3Impl<T2, T3> extends Swizzle3Impl<T2, T3> implements vec3 {\n readonly length = 3;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n ) {\n super();\n }\n\n at(idx: 0 | 1 | 2): number {\n return idx === 0 ? this.x : idx === 1 ? this.y : this.z;\n }\n}\n\nclass vec3fImpl extends vec3Impl<vec2f, vec3f> implements vec3f {\n readonly kind = 'vec3f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n}\n\nclass vec3iImpl extends vec3Impl<vec2i, vec3i> implements vec3i {\n readonly kind = 'vec3i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n}\n\nclass vec3uImpl extends vec3Impl<vec2u, vec3u> implements vec3u {\n readonly kind = 'vec3u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n}\n\nabstract class Swizzle4Impl<T2, T3, T4> extends Swizzle3Impl<T2, T3> {\n abstract make4(x: number, y: number, z: number, w: number): T4;\n\n abstract readonly w: number;\n}\n\nabstract class vec4Impl<T2, T3, T4>\n extends Swizzle4Impl<T2, T3, T4>\n implements vec4\n{\n readonly length = 4;\n\n constructor(\n public x: number,\n public y: number,\n public z: number,\n public w: number,\n ) {\n super();\n }\n\n at(idx: 0 | 1 | 2 | 3): number {\n return idx === 0\n ? this.x\n : idx === 1\n ? this.y\n : idx === 2\n ? this.z\n : this.w;\n }\n}\n\nclass vec4fImpl extends vec4Impl<vec2f, vec3f, vec4f> implements vec4f {\n readonly kind = 'vec4f';\n\n make2(x: number, y: number): vec2f {\n return new vec2fImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3f {\n return new vec3fImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4f {\n return new vec4fImpl(x, y, z, w);\n }\n}\n\nclass vec4iImpl extends vec4Impl<vec2i, vec3i, vec4i> implements vec4i {\n readonly kind = 'vec4i';\n\n make2(x: number, y: number): vec2i {\n return new vec2iImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3i {\n return new vec3iImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4i {\n return new vec4iImpl(x, y, z, w);\n }\n}\n\nclass vec4uImpl extends vec4Impl<vec2u, vec3u, vec4u> implements vec4u {\n readonly kind = 'vec4u';\n\n make2(x: number, y: number): vec2u {\n return new vec2uImpl(x, y);\n }\n\n make3(x: number, y: number, z: number): vec3u {\n return new vec3uImpl(x, y, z);\n }\n\n make4(x: number, y: number, z: number, w: number): vec4u {\n return new vec4uImpl(x, y, z, w);\n }\n}\n\ninterface Swizzle2<T2> {\n readonly xx: T2; // TODO: Create setter\n readonly xy: T2; // TODO: Create setter\n readonly yx: T2; // TODO: Create setter\n readonly yy: T2; // TODO: Create setter\n}\n\ninterface Swizzle3<T2, T3> extends Swizzle2<T2> {\n // TODO: Implement\n}\n\ninterface Swizzle4<T2, T3, T4> extends Swizzle3<T2, T3> {\n // TODO: Implement\n}\n\ninterface vec2 {\n x: number;\n y: number;\n length: 2;\n at(idx: 0 | 1): number;\n}\n\ninterface vec3 {\n x: number;\n y: number;\n z: number;\n length: 3;\n at(idx: 0 | 1 | 2): number;\n}\n\ninterface vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n length: 4;\n at(idx: 0 | 1 | 2 | 3): number;\n}\n\n// ----------\n// Public API\n// ----------\n\nexport type VecKind =\n | 'vec2f'\n | 'vec2i'\n | 'vec2u'\n | 'vec3f'\n | 'vec3i'\n | 'vec3u'\n | 'vec4f'\n | 'vec4i'\n | 'vec4u';\n\nexport interface vecBase {\n kind: VecKind;\n length: number;\n at(idx: number): number;\n}\n\nexport interface vec2f extends vec2, Swizzle2<vec2f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2f';\n}\nexport interface vec2i extends vec2, Swizzle2<vec2i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2i';\n}\nexport interface vec2u extends vec2, Swizzle2<vec2u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec2u';\n}\n\nexport interface vec3f extends vec3, Swizzle3<vec2f, vec3f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3f';\n}\nexport interface vec3i extends vec3, Swizzle3<vec2i, vec3i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3i';\n}\nexport interface vec3u extends vec3, Swizzle3<vec2u, vec3u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec3u';\n}\n\nexport interface vec4f extends vec4, Swizzle4<vec2f, vec3f, vec4f> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4f';\n}\nexport interface vec4i extends vec4, Swizzle4<vec2i, vec3i, vec4i> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4i';\n}\nexport interface vec4u extends vec4, Swizzle4<vec2u, vec3u, vec4u> {\n /** use to distinguish between vectors of the same size on the type level */\n kind: 'vec4u';\n}\n\nexport type Vec2f = TgpuData<vec2f> &\n ((x: number, y: number) => vec2f) &\n ((xy: number) => vec2f) &\n (() => vec2f);\n\nexport const vec2f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2f',\n make: (x: number, y: number) => new vec2fImpl(x, y),\n makeFromScalar: (x) => new vec2fImpl(x, x),\n}) as unknown as Vec2f;\n\nexport type Vec2i = TgpuData<vec2i> &\n ((x: number, y: number) => vec2i) &\n ((xy: number) => vec2i) &\n (() => vec2i);\n\nexport const vec2i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2i',\n make: (x: number, y: number) => new vec2iImpl(x, y),\n makeFromScalar: (x) => new vec2iImpl(x, x),\n}) as unknown as Vec2i;\n\nexport type Vec2u = TgpuData<vec2u> &\n ((x: number, y: number) => vec2u) &\n ((xy: number) => vec2u) &\n (() => vec2u);\n\nexport const vec2u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 8,\n length: 2,\n label: 'vec2u',\n make: (x: number, y: number) => new vec2uImpl(x, y),\n makeFromScalar: (x) => new vec2uImpl(x, x),\n}) as unknown as Vec2u;\n\nexport type Vec3f = TgpuData<vec3f> &\n ((x: number, y: number, z: number) => vec3f) &\n ((xyz: number) => vec3f) &\n (() => vec3f);\n\nexport const vec3f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3f',\n make: (x, y, z) => new vec3fImpl(x, y, z),\n makeFromScalar: (x) => new vec3fImpl(x, x, x),\n}) as unknown as Vec3f;\n\nexport type Vec3i = TgpuData<vec3i> &\n ((x: number, y: number, z: number) => vec3i) &\n ((xyz: number) => vec3i) &\n (() => vec3i);\n\nexport const vec3i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3i',\n make: (x, y, z) => new vec3iImpl(x, y, z),\n makeFromScalar: (x) => new vec3iImpl(x, x, x),\n}) as unknown as Vec3i;\n\nexport type Vec3u = TgpuData<vec3u> &\n ((x: number, y: number, z: number) => vec3u) &\n ((xyz: number) => vec3u) &\n (() => vec3u);\n\nexport const vec3u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 3,\n label: 'vec3u',\n make: (x, y, z) => new vec3uImpl(x, y, z),\n makeFromScalar: (x) => new vec3uImpl(x, x, x),\n}) as unknown as Vec3u;\n\nexport type Vec4f = TgpuData<vec4f> &\n ((x: number, y: number, z: number, w: number) => vec4f) &\n ((xyzw: number) => vec4f) &\n (() => vec4f);\n\nexport const vec4f = new VecSchemaImpl({\n unitType: f32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4f',\n make: (x, y, z, w) => new vec4fImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4fImpl(x, x, x, x),\n}) as unknown as Vec4f;\n\nexport type Vec4i = TgpuData<vec4i> &\n ((x: number, y: number, z: number, w: number) => vec4i) &\n ((xyzw: number) => vec4i) &\n (() => vec4i);\n\nexport const vec4i = new VecSchemaImpl({\n unitType: i32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4i',\n make: (x, y, z, w) => new vec4iImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4iImpl(x, x, x, x),\n}) as unknown as Vec4i;\n\nexport type Vec4u = TgpuData<vec4u> &\n ((x: number, y: number, z: number, w: number) => vec4u) &\n ((xyzw: number) => vec4u) &\n (() => vec4u);\n\nexport const vec4u = new VecSchemaImpl({\n unitType: u32,\n byteAlignment: 16,\n length: 4,\n label: 'vec4u',\n make: (x, y, z, w) => new vec4uImpl(x, y, z, w),\n makeFromScalar: (x) => new vec4uImpl(x, x, x, x),\n}) as unknown as Vec4u;\n","export abstract class CallableImpl<\n TArgs extends [...unknown[]],\n TReturn,\n> extends Function {\n _bound: CallableImpl<TArgs, TReturn>;\n\n constructor() {\n // We create a new Function object using `super`, with a `this` reference\n // to itself (the Function object) provided by binding it to `this`,\n // then returning the bound Function object (which is a wrapper around the\n // the original `this`/Function object). We then also have to store\n // a reference to the bound Function object, as `_bound` on the unbound `this`,\n // so the bound function has access to the new bound object.\n // Pro: Works well, doesn't rely on deprecated features.\n // Con: A little convoluted, and requires wrapping `this` in a bound object.\n\n super('...args', 'return this._bound._call(...args)');\n // Or without the spread/rest operator:\n // super('return this._bound._call.apply(this._bound, arguments)')\n this._bound = this.bind(this);\n\n // biome-ignore lint/correctness/noConstructorReturn: <quirks of creating a custom callable>\n return this._bound;\n }\n\n abstract _call(...args: TArgs): TReturn;\n}\n\nexport type Callable<TArgs extends [...unknown[]], TReturn> = (\n ...args: TArgs\n) => TReturn;\n\nexport type AsCallable<T, TArgs extends [...unknown[]], TReturn> = T &\n Callable<TArgs, TReturn>;\n","import type { AnyTgpuData, TgpuPointer } from '../types';\n\nexport function ptr<TDataType extends AnyTgpuData>(\n pointsTo: TDataType,\n): TgpuPointer<'function', TDataType> {\n return {\n scope: 'function',\n pointsTo,\n };\n}\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n type MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { ResolutionCtx, TgpuData } from '../types';\nimport type { I32, U32 } from './numeric';\n\nexport function atomic<TSchema extends U32 | I32>(\n data: TSchema,\n): Atomic<TSchema> {\n return new AtomicImpl(data);\n}\n\nexport interface Atomic<TSchema extends U32 | I32>\n extends TgpuData<Unwrap<TSchema>> {}\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"]}
|
package/chunk-S55XYV7U.cjs
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var T=Object.defineProperty;var m=(n,e,r)=>e in n?T(n,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):n[e]=r;var l=(n,e,r)=>(m(n,typeof e!="symbol"?e+"":e,r),r);function d(n){return!!n&&(typeof n=="object"||typeof n=="function")&&"resolve"in n}function x(n){return!!n&&typeof n=="object"&&"getMappedRange"in n&&"mapAsync"in n}var o=class{constructor(){l(this,"label")}$name(e){return this.label=e,this}resolve(e){return e.nameFor(this)}toString(){var e;return`id:${(e=this.label)!=null?e:"<unnamed>"}`}};var t={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")},c={[t.vertexIndex]:{symbol:t.vertexIndex,name:"vertex_index",stage:"vertex",direction:"input",identifier:new o().$name("vertex_index")},[t.instanceIndex]:{symbol:t.instanceIndex,name:"instance_index",stage:"vertex",direction:"input",identifier:new o().$name("instance_index")},[t.position]:{symbol:t.position,name:"position",stage:"vertex",direction:"output",identifier:new o().$name("position")},[t.clipDistances]:{symbol:t.clipDistances,name:"clip_distances",stage:"vertex",direction:"output",identifier:new o().$name("clip_distances")},[t.frontFacing]:{symbol:t.frontFacing,name:"front_facing",stage:"fragment",direction:"input",identifier:new o().$name("front_facing")},[t.fragDepth]:{symbol:t.fragDepth,name:"frag_depth",stage:"fragment",direction:"output",identifier:new o().$name("frag_depth")},[t.sampleIndex]:{symbol:t.sampleIndex,name:"sample_index",stage:"fragment",direction:"input",identifier:new o().$name("sample_index")},[t.sampleMask]:{symbol:t.sampleMask,name:"sample_mask",stage:"fragment",direction:"input",identifier:new o().$name("sample_mask")},[t.fragment]:{symbol:t.fragment,name:"fragment",stage:"fragment",direction:"input",identifier:new o().$name("fragment")},[t.localInvocationId]:{symbol:t.localInvocationId,name:"local_invocation_id",stage:"compute",direction:"input",identifier:new o().$name("local_invocation_id")},[t.localInvocationIndex]:{symbol:t.localInvocationIndex,name:"local_invocation_index",stage:"compute",direction:"input",identifier:new o().$name("local_invocation_index")},[t.globalInvocationId]:{symbol:t.globalInvocationId,name:"global_invocation_id",stage:"compute",direction:"input",identifier:new o().$name("global_invocation_id")},[t.workgroupId]:{symbol:t.workgroupId,name:"workgroup_id",stage:"compute",direction:"input",identifier:new o().$name("workgroup_id")},[t.numWorkgroups]:{symbol:t.numWorkgroups,name:"num_workgroups",stage:"compute",direction:"input",identifier:new o().$name("num_workgroups")}};function g(n){let e=c[n];if(!e)throw new Error("Symbol is not a member of builtin");return e}function R(n,...e){let r=n.flatMap((i,a)=>{let u=e[a];return u===void 0?[i]:Array.isArray(u)?[i,...u]:[i,u]});return new p(r)}var p=class{constructor(e){this.segments=e;l(this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let r="";for(let i of this.segments)if(d(i))r+=e.resolve(i);else if(typeof i=="function"){let a=i(u=>e.unwrap(u));r+=e.resolve(a)}else if(typeof i=="symbol"){let a=g(i);e.addBuiltin(a),r+=e.resolve(a.identifier)}else r+=String(i);return r}with(e,r){return new s(this,[e,r])}toString(){var e;return`code:${(e=this._label)!=null?e:"<unnamed>"}`}},s=class n{constructor(e,r){this._innerFn=e;this._slotValuePair=r}get label(){return this._innerFn.label}with(e,r){return new n(this,[e,r])}resolve(e){return e.resolve(this._innerFn,[this._slotValuePair])}toString(){var i,a;let[e,r]=this._slotValuePair;return`code:${(i=this.label)!=null?i:"<unnamed>"}[${(a=e.label)!=null?a:"<unnamed>"}=${r}]`}};exports.a = l; exports.b = x; exports.c = o; exports.d = R;
|
2
|
-
//# sourceMappingURL=chunk-S55XYV7U.cjs.map
|
package/chunk-S55XYV7U.cjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/wgslIdentifier.ts","../src/wgslBuiltin.ts","../src/wgslCode.ts"],"names":["isResolvable","value","isGPUBuffer","TgpuIdentifier","__publicField","label","ctx","_a","builtin","builtinSymbolToObj","getBuiltinInfo","s","code","strings","params","segments","string","idx","param","TgpuCodeImpl","result","eventual","slot","BoundTgpuCodeImpl","_BoundTgpuCodeImpl","_innerFn","_slotValuePair","_b"],"mappings":"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","sourcesContent":["import type { ISchema, Parsed } from 'typed-binary';\nimport type { F32, I32, U32, Vec4f, Vec4i, Vec4u } from './data';\nimport type { Builtin } from './wgslBuiltin';\nimport type { TgpuIdentifier } from './wgslIdentifier';\nimport type { TgpuPlum } from './wgslPlum';\n\nexport type Wgsl = string | number | TgpuResolvable | symbol | boolean;\n\n/**\n * Passed into each resolvable item. All sibling items share a resolution ctx,\n * and a new resolution ctx is made when going down each level in the tree.\n */\nexport interface ResolutionCtx {\n /**\n * Slots that were used by items resolved by this context.\n */\n readonly usedSlots: Iterable<TgpuSlot<unknown>>;\n\n addDeclaration(item: TgpuResolvable): void;\n addBinding(bindable: TgpuBindable, identifier: TgpuIdentifier): void;\n addRenderResource(\n resource: TgpuRenderResource,\n identifier: TgpuIdentifier,\n ): void;\n addBuiltin(builtin: Builtin): void;\n nameFor(token: TgpuResolvable): string;\n /**\n * Unwraps all layers of slot indirection and returns the concrete value if available.\n * @throws {MissingSlotValueError}\n */\n unwrap<T>(eventual: Eventual<T>): T;\n resolve(item: Wgsl, slotValueOverrides?: SlotValuePair<unknown>[]): string;\n}\n\nexport interface TgpuResolvable {\n readonly label?: string | undefined;\n resolve(ctx: ResolutionCtx): string;\n}\n\n/**\n * Can be assigned a name. Not to be confused with\n * being able to HAVE a name.\n */\nexport interface TgpuNamable {\n $name(label?: string | undefined): this;\n}\n\nexport function isResolvable(value: unknown): value is TgpuResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isNamable(value: unknown): value is TgpuNamable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n '$name' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\nexport interface TgpuSlot<T> extends TgpuNamable {\n readonly __brand: 'TgpuSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n /**\n * Used to determine if code generated using either value `a` or `b` in place\n * of the slot will be equivalent. Defaults to `Object.is`.\n */\n areEqual(a: T, b: T): boolean;\n}\n\nexport function isSlot<T>(value: unknown | TgpuSlot<T>): value is TgpuSlot<T> {\n return (value as TgpuSlot<T>).__brand === 'TgpuSlot';\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | TgpuSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface TgpuResolvableSlot<T extends Wgsl>\n extends TgpuResolvable,\n TgpuSlot<T> {}\n\nexport type SlotValuePair<T> = [TgpuSlot<T>, T];\n\nexport interface TgpuAllocatable<TData extends AnyTgpuData = AnyTgpuData> {\n /**\n * The data type this allocatable was constructed with.\n * It informs the size and format of data in both JS and\n * binary.\n */\n readonly dataType: TData;\n vertexLayout: Omit<GPUVertexBufferLayout, 'attributes'> | null;\n readonly initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n readonly flags: GPUBufferUsageFlags;\n}\n\nexport function isAllocatable(value: unknown): value is TgpuAllocatable {\n return (\n !!value &&\n typeof value === 'object' &&\n 'dataType' in value &&\n 'flags' in value\n );\n}\n\nexport interface TgpuBindable<\n TData extends AnyTgpuData = AnyTgpuData,\n TUsage extends BufferUsage = BufferUsage,\n> extends TgpuResolvable {\n readonly allocatable: TgpuAllocatable<TData>;\n readonly usage: TUsage;\n}\n\nexport type TgpuSamplerType = 'sampler' | 'sampler_comparison';\nexport type TgpuTypedTextureType =\n | 'texture_1d'\n | 'texture_2d'\n | 'texture_2d_array'\n | 'texture_3d'\n | 'texture_cube'\n | 'texture_cube_array'\n | 'texture_multisampled_2d';\nexport type TgpuDepthTextureType =\n | 'texture_depth_2d'\n | 'texture_depth_2d_array'\n | 'texture_depth_cube'\n | 'texture_depth_cube_array'\n | 'texture_depth_multisampled_2d';\nexport type TgpuStorageTextureType =\n | 'texture_storage_1d'\n | 'texture_storage_2d'\n | 'texture_storage_2d_array'\n | 'texture_storage_3d';\nexport type TgpuExternalTextureType = 'texture_external';\n\nexport type TgpuRenderResourceType =\n | TgpuSamplerType\n | TgpuTypedTextureType\n | TgpuDepthTextureType\n | TgpuStorageTextureType\n | TgpuExternalTextureType;\n\nexport interface TgpuRenderResource extends TgpuResolvable {\n readonly type: TgpuRenderResourceType;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly' | 'mutable' | 'vertex';\nexport type TextureUsage = 'sampled' | 'storage';\nexport type StorageTextureAccess = 'read' | 'write' | 'read_write';\n\nexport type StorageTextureParams = {\n type: TgpuStorageTextureType;\n access: StorageTextureAccess;\n descriptor?: GPUTextureViewDescriptor;\n};\nexport type SampledTextureParams = {\n type: TgpuTypedTextureType;\n dataType: TextureScalarFormat;\n descriptor?: GPUTextureViewDescriptor;\n};\n\nexport function isSamplerType(\n type: TgpuRenderResourceType,\n): type is TgpuSamplerType {\n return type === 'sampler' || type === 'sampler_comparison';\n}\n\nexport function isTypedTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuTypedTextureType {\n return [\n 'texture_1d',\n 'texture_2d',\n 'texture_2d_array',\n 'texture_3d',\n 'texture_cube',\n 'texture_cube_array',\n 'texture_multisampled_2d',\n ].includes(type);\n}\n\nexport function isDepthTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuDepthTextureType {\n return [\n 'texture_depth_2d',\n 'texture_depth_2d_array',\n 'texture_depth_cube',\n 'texture_depth_cube_array',\n 'texture_depth_multisampled_2d',\n ].includes(type);\n}\n\nexport function isStorageTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuStorageTextureType {\n return [\n 'texture_storage_1d',\n 'texture_storage_2d',\n 'texture_storage_2d_array',\n 'texture_storage_3d',\n ].includes(type);\n}\n\nexport function isExternalTextureType(\n type: TgpuRenderResourceType,\n): type is TgpuExternalTextureType {\n return type === 'texture_external';\n}\n\nexport interface TgpuData<TInner> extends ISchema<TInner>, TgpuResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyTgpuData = TgpuData<unknown>;\nexport type TextureScalarFormat = U32 | I32 | F32;\nexport type TexelFormat = Vec4u | Vec4i | Vec4f;\n\nexport interface TgpuPointer<\n TScope extends 'function',\n TInner extends AnyTgpuData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type TgpuValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyTgpuPointer = TgpuPointer<'function', AnyTgpuData>;\n\nexport type TgpuFnArgument = AnyTgpuPointer | AnyTgpuData;\n\nexport function isPointer(\n value: AnyTgpuPointer | AnyTgpuData,\n): value is AnyTgpuPointer {\n return 'pointsTo' in value;\n}\n\nexport function isGPUBuffer(value: unknown): value is GPUBuffer {\n return (\n !!value &&\n typeof value === 'object' &&\n 'getMappedRange' in value &&\n 'mapAsync' in value\n );\n}\n","import type { ResolutionCtx, TgpuNamable, TgpuResolvable } from './types';\n\n/**\n * Helpful when creating new Resolvable types. For internal use.\n */\nexport class TgpuIdentifier implements TgpuResolvable, TgpuNamable {\n label?: string | undefined;\n\n $name(label: string | undefined) {\n this.label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.nameFor(this);\n }\n\n toString(): string {\n return `id:${this.label ?? '<unnamed>'}`;\n }\n}\n","import { TgpuIdentifier } from './wgslIdentifier';\n\nexport const builtin = {\n vertexIndex: Symbol('builtin_vertexIndex'),\n instanceIndex: Symbol('builtin_instanceIndex'),\n position: Symbol('builtin_position'),\n clipDistances: Symbol('builtin_clipDistances'),\n frontFacing: Symbol('builtin_frontFacing'),\n fragDepth: Symbol('builtin_fragDepth'),\n sampleIndex: Symbol('builtin_sampleIndex'),\n sampleMask: Symbol('builtin_sampleMask'),\n fragment: Symbol('builtin_fragment'),\n localInvocationId: Symbol('builtin_localInvocationId'),\n localInvocationIndex: Symbol('builtin_localInvocationIndex'),\n globalInvocationId: Symbol('builtin_globalInvocationId'),\n workgroupId: Symbol('builtin_workgroupId'),\n numWorkgroups: Symbol('builtin_numWorkgroups'),\n} as const;\n\nexport interface Builtin {\n symbol: symbol;\n name: string;\n stage: 'vertex' | 'fragment' | 'compute';\n direction: 'input' | 'output';\n identifier: TgpuIdentifier;\n}\n\nconst builtinSymbolToObj: Record<symbol, Builtin> = {\n [builtin.vertexIndex]: {\n symbol: builtin.vertexIndex,\n name: 'vertex_index',\n stage: 'vertex',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('vertex_index'),\n },\n [builtin.instanceIndex]: {\n symbol: builtin.instanceIndex,\n name: 'instance_index',\n stage: 'vertex',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('instance_index'),\n },\n [builtin.position]: {\n symbol: builtin.position,\n name: 'position',\n stage: 'vertex',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('position'),\n },\n [builtin.clipDistances]: {\n symbol: builtin.clipDistances,\n name: 'clip_distances',\n stage: 'vertex',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('clip_distances'),\n },\n [builtin.frontFacing]: {\n symbol: builtin.frontFacing,\n name: 'front_facing',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('front_facing'),\n },\n [builtin.fragDepth]: {\n symbol: builtin.fragDepth,\n name: 'frag_depth',\n stage: 'fragment',\n direction: 'output',\n identifier: new TgpuIdentifier().$name('frag_depth'),\n },\n [builtin.sampleIndex]: {\n symbol: builtin.sampleIndex,\n name: 'sample_index',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('sample_index'),\n },\n [builtin.sampleMask]: {\n symbol: builtin.sampleMask,\n name: 'sample_mask',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('sample_mask'),\n },\n [builtin.fragment]: {\n symbol: builtin.fragment,\n name: 'fragment',\n stage: 'fragment',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('fragment'),\n },\n [builtin.localInvocationId]: {\n symbol: builtin.localInvocationId,\n name: 'local_invocation_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('local_invocation_id'),\n },\n [builtin.localInvocationIndex]: {\n symbol: builtin.localInvocationIndex,\n name: 'local_invocation_index',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('local_invocation_index'),\n },\n [builtin.globalInvocationId]: {\n symbol: builtin.globalInvocationId,\n name: 'global_invocation_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('global_invocation_id'),\n },\n [builtin.workgroupId]: {\n symbol: builtin.workgroupId,\n name: 'workgroup_id',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('workgroup_id'),\n },\n [builtin.numWorkgroups]: {\n symbol: builtin.numWorkgroups,\n name: 'num_workgroups',\n stage: 'compute',\n direction: 'input',\n identifier: new TgpuIdentifier().$name('num_workgroups'),\n },\n};\n\nexport function getBuiltinInfo(s: symbol): Builtin {\n const builtin = builtinSymbolToObj[s];\n if (!builtin) {\n throw new Error('Symbol is not a member of builtin');\n }\n return builtin;\n}\n\nexport function getUsedBuiltinsNamed(\n o: Record<symbol, string>,\n): { name: string; builtin: Builtin }[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n const builtin = builtinSymbolToObj[s];\n if (!builtin) {\n throw new Error('Symbol is not a member of builtin');\n }\n const name = o[s];\n if (!name) {\n throw new Error('Name is not provided');\n }\n return { name: name, builtin: builtin };\n });\n return res;\n}\n\nexport function getUsedBuiltins(o: Record<symbol, string>): symbol[] {\n const res = Object.getOwnPropertySymbols(o).map((s) => {\n if (!builtinSymbolToObj[s]) {\n throw new Error('Symbol is not a member of builtin');\n }\n return s;\n });\n\n return res;\n}\n","import {\n type Eventual,\n type InlineResolve,\n type ResolutionCtx,\n type SlotValuePair,\n type TgpuNamable,\n type TgpuResolvable,\n type TgpuSlot,\n type Wgsl,\n isResolvable,\n} from './types';\nimport { getBuiltinInfo } from './wgslBuiltin';\n\n// ----------\n// Public API\n// ----------\n\nexport interface TgpuCode extends TgpuResolvable, TgpuNamable {\n with<T>(slot: TgpuSlot<T>, value: Eventual<T>): BoundTgpuCode;\n}\n\nexport type BoundTgpuCode = Omit<TgpuCode, '$name'>;\n\nexport function code(\n strings: TemplateStringsArray,\n ...params: (Wgsl | Wgsl[] | InlineResolve)[]\n): TgpuCode {\n const segments: (Wgsl | InlineResolve)[] = strings.flatMap((string, idx) => {\n const param = params[idx];\n if (param === undefined) {\n return [string];\n }\n\n return Array.isArray(param) ? [string, ...param] : [string, param];\n });\n\n return new TgpuCodeImpl(segments);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuCodeImpl implements TgpuCode {\n private _label: string | undefined;\n\n constructor(public readonly segments: (Wgsl | InlineResolve)[]) {}\n\n get label() {\n return this._label;\n }\n\n $name(label?: string | undefined) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx) {\n let code = '';\n\n for (const s of this.segments) {\n if (isResolvable(s)) {\n code += ctx.resolve(s);\n } else if (typeof s === 'function') {\n const result = s((eventual) => ctx.unwrap(eventual));\n code += ctx.resolve(result);\n } else if (typeof s === 'symbol') {\n const builtin = getBuiltinInfo(s);\n ctx.addBuiltin(builtin);\n code += ctx.resolve(builtin.identifier);\n } else {\n code += String(s);\n }\n }\n\n return code;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n toString(): string {\n return `code:${this._label ?? '<unnamed>'}`;\n }\n}\n\nclass BoundTgpuCodeImpl<T> implements BoundTgpuCode {\n constructor(\n private readonly _innerFn: BoundTgpuCode,\n private readonly _slotValuePair: SlotValuePair<T>,\n ) {}\n\n get label() {\n return this._innerFn.label;\n }\n\n with<TValue>(slot: TgpuSlot<TValue>, value: Eventual<TValue>): BoundTgpuCode {\n return new BoundTgpuCodeImpl(this, [slot, value]);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._innerFn, [this._slotValuePair]);\n }\n\n toString(): string {\n const [slot, value] = this._slotValuePair;\n return `code:${this.label ?? '<unnamed>'}[${slot.label ?? '<unnamed>'}=${value}]`;\n }\n}\n"]}
|
package/macro/index.cjs
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkS55XYV7Ucjs = require('../chunk-S55XYV7U.cjs');function i(l,s){return _chunkS55XYV7Ucjs.d`${o=>{let r=o(l),n=o(s);if(typeof r!="number"){let e=new (0, _chunkS55XYV7Ucjs.c)().$name("i");return typeof n=="function"?_chunkS55XYV7Ucjs.d`
|
2
|
-
for (var ${e} = 0; ${e} < ${r}; ${e} += 1) {
|
3
|
-
${n(e)}
|
4
|
-
}`:_chunkS55XYV7Ucjs.d`
|
5
|
-
for (var ${e} = 0; ${e} < ${r}; ${e} += 1) {
|
6
|
-
${n}
|
7
|
-
}`}return typeof n=="function"?_chunkS55XYV7Ucjs.d`${Array.from({length:r},(e,p)=>n(p))}`:_chunkS55XYV7Ucjs.d`${Array.from({length:r},()=>n)}`}}`}exports.repeat = i;
|
8
|
-
//# sourceMappingURL=index.cjs.map
|
package/macro/index.cjs.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/macro/repeat.ts"],"names":["repeat","count","snippet","code","get","countValue","snippetValue","index","TgpuIdentifier","_","idx"],"mappings":"iDAcO,SAASA,EACdC,EACAC,EACM,CACN,OAAOC,IAAQC,GAAQ,CACrB,IAAMC,EAAaD,EAAIH,CAAK,EACtBK,EAAeF,EAAIF,CAAO,EAEhC,GAAI,OAAOG,GAAe,SAAU,CAClC,IAAME,EAAQ,IAAIC,EAAe,EAAE,MAAM,GAAG,EAE5C,OAAI,OAAOF,GAAiB,WACnBH;AAAA,qBACMI,CAAK,SAASA,CAAK,MAAMF,CAAU,KAAKE,CAAK;AAAA,cACpDD,EAAaC,CAA0B,CAA0C;AAAA,aAIlFJ;AAAA,mBACMI,CAAK,SAASA,CAAK,MAAMF,CAAU,KAAKE,CAAK;AAAA,YACpDD,CAAY;AAAA,UAEpB,CAEA,OAAI,OAAOA,GAAiB,WACnBH,IAAO,MAAM,KAAK,CAAE,OAAQE,CAAW,EAAG,CAACI,EAAGC,IAAQJ,EAAaI,CAAG,CAAC,CAAC,GAG1EP,IAAO,MAAM,KAAK,CAAE,OAAQE,CAAW,EAAG,IAAMC,CAAY,CAAC,EACtE,CAAC,EACH","sourcesContent":["import type { Eventual, Wgsl } from '../types';\nimport { code } from '../wgslCode';\nimport { TgpuIdentifier } from '../wgslIdentifier';\n\nexport function repeat(\n count: Eventual<Wgsl>,\n snippet: Eventual<Wgsl | ((idx: Wgsl) => Wgsl)>,\n): Wgsl;\n\nexport function repeat(\n count: Eventual<number>,\n snippet: Eventual<Wgsl | ((idx: number) => Wgsl)>,\n): Wgsl;\n\nexport function repeat(\n count: Eventual<Wgsl>,\n snippet: Eventual<Wgsl | ((idx: number) => Wgsl) | ((idx: Wgsl) => Wgsl)>,\n): Wgsl {\n return code`${(get) => {\n const countValue = get(count);\n const snippetValue = get(snippet);\n\n if (typeof countValue !== 'number') {\n const index = new TgpuIdentifier().$name('i');\n\n if (typeof snippetValue === 'function') {\n return code`\n for (var ${index} = 0; ${index} < ${countValue}; ${index} += 1) {\n ${snippetValue(index as unknown as number) /* silencing TypeScript with the cast */}\n }`;\n }\n\n return code`\n for (var ${index} = 0; ${index} < ${countValue}; ${index} += 1) {\n ${snippetValue}\n }`;\n }\n\n if (typeof snippetValue === 'function') {\n return code`${Array.from({ length: countValue }, (_, idx) => snippetValue(idx))}`;\n }\n\n return code`${Array.from({ length: countValue }, () => snippetValue)}`;\n }}`;\n}\n"]}
|
package/macro/index.d.cts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
import { E as Eventual, W as Wgsl } from '../types-DU0c7BuW.cjs';
|
2
|
-
import 'typed-binary';
|
3
|
-
|
4
|
-
declare function repeat(count: Eventual<Wgsl>, snippet: Eventual<Wgsl | ((idx: Wgsl) => Wgsl)>): Wgsl;
|
5
|
-
declare function repeat(count: Eventual<number>, snippet: Eventual<Wgsl | ((idx: number) => Wgsl)>): Wgsl;
|
6
|
-
|
7
|
-
export { repeat };
|
package/macro/index.d.ts
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
import { E as Eventual, W as Wgsl } from '../types-DU0c7BuW.js';
|
2
|
-
import 'typed-binary';
|
3
|
-
|
4
|
-
declare function repeat(count: Eventual<Wgsl>, snippet: Eventual<Wgsl | ((idx: Wgsl) => Wgsl)>): Wgsl;
|
5
|
-
declare function repeat(count: Eventual<number>, snippet: Eventual<Wgsl | ((idx: number) => Wgsl)>): Wgsl;
|
6
|
-
|
7
|
-
export { repeat };
|
package/macro/index.js
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
import{c as u,d as t}from"../chunk-337KOXP7.js";function i(l,s){return t`${o=>{let r=o(l),n=o(s);if(typeof r!="number"){let e=new u().$name("i");return typeof n=="function"?t`
|
2
|
-
for (var ${e} = 0; ${e} < ${r}; ${e} += 1) {
|
3
|
-
${n(e)}
|
4
|
-
}`:t`
|
5
|
-
for (var ${e} = 0; ${e} < ${r}; ${e} += 1) {
|
6
|
-
${n}
|
7
|
-
}`}return typeof n=="function"?t`${Array.from({length:r},(e,p)=>n(p))}`:t`${Array.from({length:r},()=>n)}`}}`}export{i as repeat};
|
8
|
-
//# sourceMappingURL=index.js.map
|
package/macro/index.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../src/macro/repeat.ts"],"sourcesContent":["import type { Eventual, Wgsl } from '../types';\nimport { code } from '../wgslCode';\nimport { TgpuIdentifier } from '../wgslIdentifier';\n\nexport function repeat(\n count: Eventual<Wgsl>,\n snippet: Eventual<Wgsl | ((idx: Wgsl) => Wgsl)>,\n): Wgsl;\n\nexport function repeat(\n count: Eventual<number>,\n snippet: Eventual<Wgsl | ((idx: number) => Wgsl)>,\n): Wgsl;\n\nexport function repeat(\n count: Eventual<Wgsl>,\n snippet: Eventual<Wgsl | ((idx: number) => Wgsl) | ((idx: Wgsl) => Wgsl)>,\n): Wgsl {\n return code`${(get) => {\n const countValue = get(count);\n const snippetValue = get(snippet);\n\n if (typeof countValue !== 'number') {\n const index = new TgpuIdentifier().$name('i');\n\n if (typeof snippetValue === 'function') {\n return code`\n for (var ${index} = 0; ${index} < ${countValue}; ${index} += 1) {\n ${snippetValue(index as unknown as number) /* silencing TypeScript with the cast */}\n }`;\n }\n\n return code`\n for (var ${index} = 0; ${index} < ${countValue}; ${index} += 1) {\n ${snippetValue}\n }`;\n }\n\n if (typeof snippetValue === 'function') {\n return code`${Array.from({ length: countValue }, (_, idx) => snippetValue(idx))}`;\n }\n\n return code`${Array.from({ length: countValue }, () => snippetValue)}`;\n }}`;\n}\n"],"mappings":"gDAcO,SAASA,EACdC,EACAC,EACM,CACN,OAAOC,IAAQC,GAAQ,CACrB,IAAMC,EAAaD,EAAIH,CAAK,EACtBK,EAAeF,EAAIF,CAAO,EAEhC,GAAI,OAAOG,GAAe,SAAU,CAClC,IAAME,EAAQ,IAAIC,EAAe,EAAE,MAAM,GAAG,EAE5C,OAAI,OAAOF,GAAiB,WACnBH;AAAA,qBACMI,CAAK,SAASA,CAAK,MAAMF,CAAU,KAAKE,CAAK;AAAA,cACpDD,EAAaC,CAA0B,CAA0C;AAAA,aAIlFJ;AAAA,mBACMI,CAAK,SAASA,CAAK,MAAMF,CAAU,KAAKE,CAAK;AAAA,YACpDD,CAAY;AAAA,UAEpB,CAEA,OAAI,OAAOA,GAAiB,WACnBH,IAAO,MAAM,KAAK,CAAE,OAAQE,CAAW,EAAG,CAACI,EAAGC,IAAQJ,EAAaI,CAAG,CAAC,CAAC,GAG1EP,IAAO,MAAM,KAAK,CAAE,OAAQE,CAAW,EAAG,IAAMC,CAAY,CAAC,EACtE,CAAC,EACH","names":["repeat","count","snippet","code","get","countValue","snippetValue","index","TgpuIdentifier","_","idx"]}
|