typegpu 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. package/README.md +29 -0
  2. package/chunk-34O2K2PT.js +2 -0
  3. package/chunk-34O2K2PT.js.map +1 -0
  4. package/chunk-T3YCU4G4.cjs +2 -0
  5. package/chunk-T3YCU4G4.cjs.map +1 -0
  6. package/data/index.cjs +8 -0
  7. package/data/index.cjs.map +1 -0
  8. package/data/index.d.cts +109 -0
  9. package/data/index.d.ts +109 -0
  10. package/data/index.js +8 -0
  11. package/data/index.js.map +1 -0
  12. package/index.cjs +2 -0
  13. package/index.cjs.map +1 -0
  14. package/index.d.cts +72 -0
  15. package/index.d.ts +72 -0
  16. package/index.js +2 -0
  17. package/index.js.map +1 -0
  18. package/package.json +28 -37
  19. package/types-D2gslu2F.d.cts +202 -0
  20. package/types-D2gslu2F.d.ts +202 -0
  21. package/dist/chunk-5ZQTJALJ.cjs +0 -4
  22. package/dist/chunk-5ZQTJALJ.cjs.map +0 -1
  23. package/dist/chunk-AS7UPXZ3.cjs +0 -2
  24. package/dist/chunk-AS7UPXZ3.cjs.map +0 -1
  25. package/dist/chunk-G3U6RTMF.cjs +0 -2
  26. package/dist/chunk-G3U6RTMF.cjs.map +0 -1
  27. package/dist/chunk-JJZKRDXD.js +0 -4
  28. package/dist/chunk-JJZKRDXD.js.map +0 -1
  29. package/dist/chunk-KBVQVOLY.cjs +0 -2
  30. package/dist/chunk-KBVQVOLY.cjs.map +0 -1
  31. package/dist/chunk-OZ2XZ4ZA.js +0 -2
  32. package/dist/chunk-OZ2XZ4ZA.js.map +0 -1
  33. package/dist/chunk-TVPC7ZME.js +0 -2
  34. package/dist/chunk-TVPC7ZME.js.map +0 -1
  35. package/dist/chunk-XGSMOADT.js +0 -2
  36. package/dist/chunk-XGSMOADT.js.map +0 -1
  37. package/dist/data/index.cjs +0 -10
  38. package/dist/data/index.cjs.map +0 -1
  39. package/dist/data/index.d.cts +0 -84
  40. package/dist/data/index.d.ts +0 -84
  41. package/dist/data/index.js +0 -10
  42. package/dist/data/index.js.map +0 -1
  43. package/dist/index.cjs +0 -6
  44. package/dist/index.cjs.map +0 -1
  45. package/dist/index.d.cts +0 -145
  46. package/dist/index.d.ts +0 -145
  47. package/dist/index.js +0 -6
  48. package/dist/index.js.map +0 -1
  49. package/dist/macro/index.cjs +0 -8
  50. package/dist/macro/index.cjs.map +0 -1
  51. package/dist/macro/index.d.cts +0 -7
  52. package/dist/macro/index.d.ts +0 -7
  53. package/dist/macro/index.js +0 -8
  54. package/dist/macro/index.js.map +0 -1
  55. package/dist/struct-CFmatz6R.d.ts +0 -9
  56. package/dist/struct-CRg8uhjj.d.cts +0 -9
  57. package/dist/typegpuRuntime-BZwyf0k_.d.ts +0 -77
  58. package/dist/typegpuRuntime-Dg50sa5T.d.cts +0 -77
  59. package/dist/types-Dgp6OHLq.d.cts +0 -148
  60. package/dist/types-Dgp6OHLq.d.ts +0 -148
  61. package/dist/web/index.cjs +0 -23
  62. package/dist/web/index.cjs.map +0 -1
  63. package/dist/web/index.d.cts +0 -40
  64. package/dist/web/index.d.ts +0 -40
  65. package/dist/web/index.js +0 -23
  66. package/dist/web/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types.ts","../src/wgslCode.ts"],"sourcesContent":["import type { ISchema, Parsed } from 'typed-binary';\nimport type { WgslIdentifier } from './wgslIdentifier';\nimport type { WgslPlum } from './wgslPlum';\n\nexport type Wgsl = string | boolean | number | WgslResolvable;\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<WgslSlot<unknown>>;\n\n addDeclaration(item: WgslResolvable): void;\n addBinding(bindable: WgslBindable, identifier: WgslIdentifier): void;\n nameFor(token: WgslResolvable): 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 WgslResolvable {\n readonly label?: string | undefined;\n\n resolve(ctx: ResolutionCtx): string;\n}\n\nexport function isResolvable(value: unknown): value is WgslResolvable {\n return (\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'resolve' in value\n );\n}\n\nexport function isWgsl(value: unknown): value is Wgsl {\n return (\n typeof value === 'number' ||\n typeof value === 'string' ||\n isResolvable(value)\n );\n}\n\nexport interface WgslSlot<T> {\n readonly __brand: 'WgslSlot';\n\n readonly defaultValue: T | undefined;\n\n readonly label?: string | undefined;\n\n $name(label: string): WgslSlot<T>;\n\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 | WgslSlot<T>): value is WgslSlot<T> {\n return (value as WgslSlot<T>).__brand === 'WgslSlot';\n}\n\n/**\n * Represents a value that is available at resolution time.\n */\nexport type Eventual<T> = T | WgslSlot<T>;\n\nexport type EventualGetter = <T>(value: Eventual<T>) => T;\n\nexport type InlineResolve = (get: EventualGetter) => Wgsl;\n\nexport interface WgslResolvableSlot<T extends Wgsl>\n extends WgslResolvable,\n WgslSlot<T> {\n $name(label: string): WgslResolvableSlot<T>;\n}\n\nexport type SlotValuePair<T> = [WgslSlot<T>, T];\n\nexport interface WgslAllocatable<TData extends AnyWgslData = AnyWgslData> {\n /**\n * The data type this allocatable was constructed with.\n * It informs the size and format of data in both JS and\n * binary.\n */\n readonly dataType: TData;\n readonly initial?: Parsed<TData> | WgslPlum<Parsed<TData>> | undefined;\n readonly flags: GPUBufferUsageFlags;\n}\n\nexport interface WgslBindable<\n TData extends AnyWgslData = AnyWgslData,\n TUsage extends BufferUsage = BufferUsage,\n> extends WgslResolvable {\n readonly allocatable: WgslAllocatable<TData>;\n readonly usage: TUsage;\n}\n\nexport type BufferUsage = 'uniform' | 'readonly_storage' | 'mutable_storage';\n\nexport interface WgslData<TInner> extends ISchema<TInner>, WgslResolvable {\n readonly byteAlignment: number;\n readonly size: number;\n}\n\nexport type AnyWgslData = WgslData<unknown>;\n\nexport interface WgslPointer<\n TScope extends 'function',\n TInner extends AnyWgslData,\n> {\n readonly scope: TScope;\n readonly pointsTo: TInner;\n}\n\n/**\n * A virtual representation of a WGSL value.\n */\nexport type WgslValue<TDataType> = {\n readonly __dataType: TDataType;\n};\n\nexport type AnyWgslPointer = WgslPointer<'function', AnyWgslData>;\n\nexport type WgslFnArgument = AnyWgslPointer | AnyWgslData;\n\nexport function isPointer(\n value: AnyWgslPointer | AnyWgslData,\n): value is AnyWgslPointer {\n return 'pointsTo' in value;\n}\n","import {\n type InlineResolve,\n type ResolutionCtx,\n type Wgsl,\n type WgslResolvable,\n isResolvable,\n} from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslCode extends WgslResolvable {\n $name(label?: string | undefined): WgslCode;\n}\n\nexport function code(\n strings: TemplateStringsArray,\n ...params: (Wgsl | Wgsl[] | InlineResolve)[]\n): WgslCode {\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 WgslCodeImpl(segments);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslCodeImpl implements WgslCode {\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 (typeof s === 'function') {\n const result = s((eventual) => ctx.unwrap(eventual));\n code += ctx.resolve(result);\n } else if (isResolvable(s)) {\n code += ctx.resolve(s);\n } else {\n code += String(s);\n }\n }\n\n return code;\n }\n\n toString(): string {\n return `code:${this._label ?? '<unnamed>'}`;\n }\n}\n"],"mappings":"moBAiCO,SAASA,EAAaC,EAAyC,CACpE,MACE,CAAC,CAACA,IACD,OAAOA,GAAU,UAAY,OAAOA,GAAU,aAC/C,YAAaA,CAEjB,CAEO,SAASC,EAAOD,EAA+B,CACpD,OACE,OAAOA,GAAU,UACjB,OAAOA,GAAU,UACjBD,EAAaC,CAAK,CAEtB,CAkBO,SAASE,EAAUF,EAAoD,CAC5E,OAAQA,EAAsB,UAAY,UAC5C,CAkEO,SAASG,EACdH,EACyB,CACzB,MAAO,aAAcA,CACvB,CCzHO,SAASI,EACdC,KACGC,EACO,CACV,IAAMC,EAAqCF,EAAQ,QAAQ,CAACG,EAAQC,IAAQ,CAC1E,IAAMC,EAAQJ,EAAOG,CAAG,EACxB,OAAIC,IAAU,OACL,CAACF,CAAM,EAGT,MAAM,QAAQE,CAAK,EAAI,CAACF,EAAQ,GAAGE,CAAK,EAAI,CAACF,EAAQE,CAAK,CACnE,CAAC,EAED,OAAO,IAAIC,EAAaJ,CAAQ,CAClC,CAMA,IAAMI,EAAN,KAAuC,CAGrC,YAA4BJ,EAAoC,CAApC,cAAAA,EAF5BK,EAAA,KAAQ,SAEyD,CAEjE,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAEA,MAAMC,EAA4B,CAChC,YAAK,OAASA,EACP,IACT,CAEA,QAAQC,EAAoB,CAC1B,IAAIV,EAAO,GAEX,QAAWW,KAAK,KAAK,SACnB,GAAI,OAAOA,GAAM,WAAY,CAC3B,IAAMC,EAASD,EAAGE,GAAaH,EAAI,OAAOG,CAAQ,CAAC,EACnDb,GAAQU,EAAI,QAAQE,CAAM,CAC5B,MAAWE,EAAaH,CAAC,EACvBX,GAAQU,EAAI,QAAQC,CAAC,EAErBX,GAAQ,OAAOW,CAAC,EAIpB,OAAOX,CACT,CAEA,UAAmB,CAnErB,IAAAe,EAoEI,MAAO,SAAQA,EAAA,KAAK,SAAL,KAAAA,EAAe,WAAW,EAC3C,CACF","names":["isResolvable","value","isWgsl","isSlot","isPointer","code","strings","params","segments","string","idx","param","WgslCodeImpl","__publicField","label","ctx","s","result","eventual","isResolvable","_a"]}
@@ -1,2 +0,0 @@
1
- var o=class t extends Error{constructor(s){super(`Missing value for '${s}'`);this.slot=s;Object.setPrototypeOf(this,t.prototype)}},e=class t extends Error{constructor(){super("Recursive types are not supported in WGSL"),Object.setPrototypeOf(this,t.prototype)}};export{o as a,e as b};
2
- //# sourceMappingURL=chunk-XGSMOADT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors.ts"],"sourcesContent":["import type { WgslSlot } from './types';\n\n/**\n * @category Errors\n */\nexport class MissingSlotValueError extends Error {\n constructor(public readonly slot: WgslSlot<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"],"mappings":"AAKO,IAAMA,EAAN,MAAMC,UAA8B,KAAM,CAC/C,YAA4BC,EAAyB,CACnD,MAAM,sBAAsBA,CAAI,GAAG,EADT,UAAAA,EAI1B,OAAO,eAAe,KAAMD,EAAsB,SAAS,CAC7D,CACF,EAKaE,EAAN,MAAMC,UAA+B,KAAM,CAChD,aAAc,CACZ,MAAM,2CAA2C,EAGjD,OAAO,eAAe,KAAMA,EAAuB,SAAS,CAC9D,CACF","names":["MissingSlotValueError","_MissingSlotValueError","slot","RecursiveDataTypeError","_RecursiveDataTypeError"]}
@@ -1,10 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkKBVQVOLYcjs = require('../chunk-KBVQVOLY.cjs');var _chunkG3U6RTMFcjs = require('../chunk-G3U6RTMF.cjs');var _chunkAS7UPXZ3cjs = require('../chunk-AS7UPXZ3.cjs');var _typedbinary = require('typed-binary'); var t = _interopRequireWildcard(_typedbinary); var g = _interopRequireWildcard(_typedbinary);function x(n,o){let e="size"in n?n.size:n.currentByteOffset,r=o-1,i=e&r;"skipBytes"in n?n.skipBytes(o-i&r):n.add(o-i&r)}var p=x;var a=class extends _typedbinary.Schema{constructor({schema:e,byteAlignment:r,code:i}){super();_chunkAS7UPXZ3cjs.d.call(void 0, this,"size");_chunkAS7UPXZ3cjs.d.call(void 0, this,"byteAlignment");_chunkAS7UPXZ3cjs.d.call(void 0, this,"_innerSchema");_chunkAS7UPXZ3cjs.d.call(void 0, this,"_expressionCode");this._innerSchema=e,this.byteAlignment=r,this._expressionCode=i,this.size=this.measure(_typedbinary.MaxValue).size}resolveReferences(){throw new _chunkG3U6RTMFcjs.b}write(e,r){p(e,this.byteAlignment),this._innerSchema.write(e,r)}read(e){return p(e,this.byteAlignment),this._innerSchema.read(e)}measure(e,r=new _typedbinary.Measurer){return p(r,this.byteAlignment),this._innerSchema.measure(e,r),r}resolve(e){return e.resolve(this._expressionCode)}};var F=new a({schema:t.bool,byteAlignment:4,code:"bool"}),y= exports.u32 =new a({schema:t.u32,byteAlignment:4,code:"u32"}),q= exports.i32 =new a({schema:t.i32,byteAlignment:4,code:"i32"}),G= exports.f32 =new a({schema:t.f32,byteAlignment:4,code:"f32"}),H= exports.vec2u =new a({schema:t.tupleOf([t.u32,t.u32]),byteAlignment:8,code:"vec2u"}),J= exports.vec2i =new a({schema:t.tupleOf([t.i32,t.i32]),byteAlignment:8,code:"vec2i"}),K= exports.vec2f =new a({schema:t.tupleOf([t.f32,t.f32]),byteAlignment:8,code:"vec2f"}),L= exports.vec3u =new a({schema:t.tupleOf([t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec3u"}),N= exports.vec3i =new a({schema:t.tupleOf([t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec3i"}),Q= exports.vec3f =new a({schema:t.tupleOf([t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec3f"}),X= exports.vec4u =new a({schema:t.tupleOf([t.u32,t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec4u"}),Y= exports.vec4i =new a({schema:t.tupleOf([t.i32,t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec4i"}),Z= exports.vec4f =new a({schema:t.tupleOf([t.f32,t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec4f"}),ee= exports.mat4f =new a({schema:t.arrayOf(t.f32,16),byteAlignment:16,code:"mat4x4f"});var d=class extends _typedbinary.Schema{constructor(e,r){super();this._elementType=e;this.capacity=r;_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label");_chunkAS7UPXZ3cjs.d.call(void 0, this,"byteAlignment");_chunkAS7UPXZ3cjs.d.call(void 0, this,"size");this.byteAlignment=Math.max(4,this._elementType.byteAlignment),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkG3U6RTMFcjs.b}write(e,r){if(r.length>this.capacity)throw new (0, _typedbinary.ValidationError)(`Tried to write too many values, ${r.length} > ${this.capacity}`);p(e,this.byteAlignment),y.write(e,r.length),p(e,this._elementType.byteAlignment);let i=e.currentByteOffset;for(let c of r)this._elementType.write(e,c);e.seekTo(i+this.capacity*this._elementType.size)}read(e){let r=[];p(e,this.byteAlignment);let i=y.read(e);p(e,this._elementType.byteAlignment);let c=e.currentByteOffset;for(let f=0;f<i;++f)r.push(this._elementType.read(e));return e.seekTo(c+this.capacity*this._elementType.size),r}measure(e,r=new _typedbinary.Measurer){return p(r,this.byteAlignment),y.measure(_typedbinary.MaxValue,r),p(r,this._elementType.byteAlignment),r.add(this._elementType.size*this.capacity),r}resolve(e){let r=new (0, _chunkKBVQVOLYcjs.a)().$name(this._label);return e.addDeclaration(_chunkAS7UPXZ3cjs.i`
2
- struct ${r} {
3
- count: u32,
4
- values: array<${this._elementType}, ${this.capacity}>,
5
- }`),e.resolve(r)}},pe= exports.dynamicArrayOf =(n,o)=>new d(n,o);var he=n=>new h(n),h=class extends _typedbinary.Schema{constructor(e){super();this._properties=e;_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label");_chunkAS7UPXZ3cjs.d.call(void 0, this,"_innerSchema");_chunkAS7UPXZ3cjs.d.call(void 0, this,"byteAlignment");_chunkAS7UPXZ3cjs.d.call(void 0, this,"size");this._innerSchema=_typedbinary.object.call(void 0, e),this.byteAlignment=Object.values(e).map(r=>r.byteAlignment).reduce((r,i)=>r>i?r:i),this.size=this.measure(_typedbinary.MaxValue).size}$name(e){return this._label=e,this}resolveReferences(){throw new _chunkG3U6RTMFcjs.b}write(e,r){this._innerSchema.write(e,r)}read(e){return this._innerSchema.read(e)}measure(e,r=new _typedbinary.Measurer){return this._innerSchema.measure(e,r),r}resolve(e){let r=new (0, _chunkKBVQVOLYcjs.a)().$name(this._label);return e.addDeclaration(_chunkAS7UPXZ3cjs.i`
6
- struct ${r} {
7
- ${Object.entries(this._properties).map(([i,c])=>_chunkAS7UPXZ3cjs.i`${i}: ${c},\n`)}
8
- }
9
- `),e.resolve(r)}};var xe=(n,o)=>new a({schema:g.arrayOf(n,o),byteAlignment:n.byteAlignment,code:_chunkAS7UPXZ3cjs.i`array<${n}, ${o}>`});function O(n){return{scope:"function",pointsTo:n}}function R(n){return new T(n)}var T=class extends _typedbinary.Schema{constructor(e){super();this.innerData=e;_chunkAS7UPXZ3cjs.d.call(void 0, this,"size");_chunkAS7UPXZ3cjs.d.call(void 0, this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new _chunkG3U6RTMFcjs.b}write(e,r){this.innerData.write(e,r)}read(e){return this.innerData.read(e)}measure(e,r=new _typedbinary.Measurer){return this.innerData.measure(e,r)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};exports.SimpleWgslData = a; exports.arrayOf = xe; exports.atomic = R; exports.bool = F; exports.dynamicArrayOf = pe; exports.f32 = G; exports.i32 = q; exports.mat4f = ee; exports.ptr = O; exports.struct = he; exports.u32 = y; exports.vec2f = K; exports.vec2i = J; exports.vec2u = H; exports.vec3f = Q; exports.vec3i = N; exports.vec3u = L; exports.vec4f = Z; exports.vec4i = Y; exports.vec4u = X;
10
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/data/std140.ts","../../src/data/alignIO.ts","../../src/data/numeric.ts","../../src/data/dynamicArray.ts","../../src/data/struct.ts","../../src/data/array.ts","../../src/data/pointer.ts","../../src/data/atomic.ts"],"names":["MaxValue","Measurer","Schema","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","SimpleWgslData","schema","byteAlignment","code","__publicField","RecursiveDataTypeError","output","value","input","measurer","ctx","TB","bool","u32","i32","f32","vec2u","vec2i","vec2f","vec3u","vec3i","vec3f","vec4u","vec4i","vec4f","mat4f","ValidationError","DynamicArrayDataType","_elementType","capacity","label","values","startOffset","array","len","i","_values","identifier","WgslIdentifier","dynamicArrayOf","elementType","object","struct","properties","WgslStructImpl","_properties","prop","a","b","key","field","arrayOf","size","ptr","pointsTo","atomic","data","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, Wgsl, WgslData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleWgslData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements WgslData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n private readonly _innerSchema: TSchema;\n private readonly _expressionCode: Wgsl;\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: Wgsl;\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 resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._expressionCode);\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 { WgslData } from '../types';\nimport { SimpleWgslData } from './std140';\n\nexport type Bool = WgslData<boolean>;\nexport const bool: Bool = new SimpleWgslData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = WgslData<number>;\nexport const u32: U32 = new SimpleWgslData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = WgslData<number>;\nexport const i32: I32 = new SimpleWgslData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = WgslData<number>;\nexport const f32: F32 = new SimpleWgslData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\n\nexport type Vec2u = WgslData<[number, number]>;\nexport const vec2u: Vec2u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32]),\n byteAlignment: 8,\n code: 'vec2u',\n});\n\nexport type Vec2i = WgslData<[number, number]>;\nexport const vec2i: Vec2i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32]),\n byteAlignment: 8,\n code: 'vec2i',\n});\nexport type Vec2f = WgslData<[number, number]>;\nexport const vec2f: Vec2f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32]),\n byteAlignment: 8,\n code: 'vec2f',\n});\nexport type Vec3u = WgslData<[number, number, number]>;\nexport const vec3u: Vec3u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec3u',\n});\nexport type Vec3i = WgslData<[number, number, number]>;\nexport const vec3i: Vec3i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec3i',\n});\nexport type Vec3f = WgslData<[number, number, number]>;\nexport const vec3f: Vec3f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec3f',\n});\nexport type Vec4u = WgslData<[number, number, number, number]>;\nexport const vec4u: Vec4u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec4u',\n});\nexport type Vec4i = WgslData<[number, number, number, number]>;\nexport const vec4i: Vec4i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec4i',\n});\nexport type Vec4f = WgslData<[number, number, number, number]>;\nexport const vec4f: Vec4f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec4f',\n});\n\n/**\n * Array of column vectors\n */\nexport type Mat4f = WgslData<number[]>;\nexport const mat4f: Mat4f = new SimpleWgslData({\n schema: TB.arrayOf(TB.f32, 16),\n byteAlignment: 16,\n code: 'mat4x4f',\n});\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n ValidationError,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\nimport alignIO from './alignIO';\nimport { u32 } from './numeric';\n\nclass DynamicArrayDataType<TElement extends WgslData<unknown>>\n extends Schema<Unwrap<TElement>[]>\n implements WgslData<Unwrap<TElement>[]>\n{\n private _label: string | undefined;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(\n private readonly _elementType: TElement,\n public readonly capacity: number,\n ) {\n super();\n\n this.byteAlignment = Math.max(\n 4 /* u32 base alignment */,\n this._elementType.byteAlignment,\n );\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, values: ParseUnwrapped<TElement>[]): void {\n if (values.length > this.capacity) {\n throw new ValidationError(\n `Tried to write too many values, ${values.length} > ${this.capacity}`,\n );\n }\n\n alignIO(output, this.byteAlignment); // aligning to the start\n u32.write(output, values.length);\n alignIO(output, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = output.currentByteOffset;\n for (const value of values) {\n this._elementType.write(output, value);\n }\n output.seekTo(startOffset + this.capacity * this._elementType.size);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TElement>[] {\n const array: ParseUnwrapped<TElement>[] = [];\n\n alignIO(input, this.byteAlignment); // aligning to the start\n const len = u32.read(input);\n alignIO(input, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = input.currentByteOffset;\n for (let i = 0; i < len; ++i) {\n array.push(this._elementType.read(input) as ParseUnwrapped<TElement>);\n }\n input.seekTo(startOffset + this.capacity * this._elementType.size);\n\n return array;\n }\n\n measure(\n _values: ParseUnwrapped<TElement>[] | typeof MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment); // aligning to the start\n\n // Length encoding\n u32.measure(MaxValue, measurer);\n\n // Aligning to the start of the array\n alignIO(measurer, this._elementType.byteAlignment);\n\n // Values encoding\n measurer.add(this._elementType.size * this.capacity);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n count: u32,\n values: array<${this._elementType}, ${this.capacity}>,\n }`);\n\n return ctx.resolve(identifier);\n }\n}\n\nexport const dynamicArrayOf = <TSchema extends AnyWgslData>(\n elementType: TSchema,\n capacity: number,\n) => new DynamicArrayDataType(elementType, capacity);\n\nexport default DynamicArrayDataType;\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 { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslStruct<TProps extends Record<string, AnyWgslData>>\n extends ISchema<UnwrapRecord<TProps>>,\n WgslData<UnwrapRecord<TProps>> {\n $name(label: string): this;\n}\n\nexport const struct = <TProps extends Record<string, AnyWgslData>>(\n properties: TProps,\n): WgslStruct<TProps> => new WgslStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslStructImpl<TProps extends Record<string, AnyWgslData>>\n extends Schema<UnwrapRecord<TProps>>\n implements WgslData<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 this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n","import * as TB from 'typed-binary';\nimport type { AnyWgslData, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { SimpleWgslData } from './std140';\n\ntype WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;\n\nexport const arrayOf = <TElement extends AnyWgslData>(\n elementType: TElement,\n size: number,\n): WgslArray<TElement> =>\n new SimpleWgslData({\n schema: TB.arrayOf(elementType, size),\n byteAlignment: elementType.byteAlignment,\n code: code`array<${elementType}, ${size}>`,\n });\n","import type { AnyWgslData, WgslPointer } from '../types';\n\nexport function ptr<TDataType extends AnyWgslData>(\n pointsTo: TDataType,\n): WgslPointer<'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, WgslData } 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 WgslData<Unwrap<TSchema>> {}\n\nclass AtomicImpl<TSchema extends U32 | I32>\n extends Schema<Unwrap<TSchema>>\n implements Atomic<TSchema>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n constructor(private readonly innerData: TSchema) {\n super();\n this.size = this.innerData.size;\n this.byteAlignment = this.innerData.byteAlignment;\n }\n\n resolveReferences(): void {\n throw new RecursiveDataTypeError();\n }\n\n write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void {\n this.innerData.write(output, value);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TSchema> {\n return this.innerData.read(input) as ParseUnwrapped<TSchema>;\n }\n\n measure(\n value: ParseUnwrapped<TSchema> | MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n return this.innerData.measure(value, measurer);\n }\n\n resolve(ctx: ResolutionCtx): string {\n return `atomic<${ctx.resolve(this.innerData)}>`;\n }\n}\n"]}
@@ -1,84 +0,0 @@
1
- import * as TB from 'typed-binary';
2
- import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer } from 'typed-binary';
3
- export { Parsed, Unwrap } from 'typed-binary';
4
- import { q as WgslData, e as Wgsl, R as ResolutionCtx, A as AnyWgslData, r as WgslPointer } from '../types-Dgp6OHLq.cjs';
5
- export { W as WgslStruct, s as struct } from '../struct-CRg8uhjj.cjs';
6
-
7
- declare class SimpleWgslData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements WgslData<Unwrap<TSchema>> {
8
- readonly size: number;
9
- readonly byteAlignment: number;
10
- private readonly _innerSchema;
11
- private readonly _expressionCode;
12
- /**
13
- * byteAlignment has to be a power of 2
14
- */
15
- constructor({ schema, byteAlignment, code, }: {
16
- schema: TSchema;
17
- byteAlignment: number;
18
- code: Wgsl;
19
- });
20
- resolveReferences(): void;
21
- write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void;
22
- read(input: ISerialInput): ParseUnwrapped<TSchema>;
23
- measure(value: ParseUnwrapped<TSchema> | MaxValue, measurer?: IMeasurer): IMeasurer;
24
- resolve(ctx: ResolutionCtx): string;
25
- }
26
-
27
- type Bool = WgslData<boolean>;
28
- declare const bool: Bool;
29
- type U32 = WgslData<number>;
30
- declare const u32: U32;
31
- type I32 = WgslData<number>;
32
- declare const i32: I32;
33
- type F32 = WgslData<number>;
34
- declare const f32: F32;
35
- type Vec2u = WgslData<[number, number]>;
36
- declare const vec2u: Vec2u;
37
- type Vec2i = WgslData<[number, number]>;
38
- declare const vec2i: Vec2i;
39
- type Vec2f = WgslData<[number, number]>;
40
- declare const vec2f: Vec2f;
41
- type Vec3u = WgslData<[number, number, number]>;
42
- declare const vec3u: Vec3u;
43
- type Vec3i = WgslData<[number, number, number]>;
44
- declare const vec3i: Vec3i;
45
- type Vec3f = WgslData<[number, number, number]>;
46
- declare const vec3f: Vec3f;
47
- type Vec4u = WgslData<[number, number, number, number]>;
48
- declare const vec4u: Vec4u;
49
- type Vec4i = WgslData<[number, number, number, number]>;
50
- declare const vec4i: Vec4i;
51
- type Vec4f = WgslData<[number, number, number, number]>;
52
- declare const vec4f: Vec4f;
53
- /**
54
- * Array of column vectors
55
- */
56
- type Mat4f = WgslData<number[]>;
57
- declare const mat4f: Mat4f;
58
-
59
- declare class DynamicArrayDataType<TElement extends WgslData<unknown>> extends Schema<Unwrap<TElement>[]> implements WgslData<Unwrap<TElement>[]> {
60
- private readonly _elementType;
61
- readonly capacity: number;
62
- private _label;
63
- readonly byteAlignment: number;
64
- readonly size: number;
65
- constructor(_elementType: TElement, capacity: number);
66
- $name(label: string): this;
67
- resolveReferences(): void;
68
- write(output: ISerialOutput, values: ParseUnwrapped<TElement>[]): void;
69
- read(input: ISerialInput): ParseUnwrapped<TElement>[];
70
- measure(_values: ParseUnwrapped<TElement>[] | typeof MaxValue, measurer?: IMeasurer): IMeasurer;
71
- resolve(ctx: ResolutionCtx): string;
72
- }
73
- declare const dynamicArrayOf: <TSchema extends AnyWgslData>(elementType: TSchema, capacity: number) => DynamicArrayDataType<TSchema>;
74
-
75
- type WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;
76
- declare const arrayOf: <TElement extends AnyWgslData>(elementType: TElement, size: number) => WgslArray<TElement>;
77
-
78
- declare function ptr<TDataType extends AnyWgslData>(pointsTo: TDataType): WgslPointer<'function', TDataType>;
79
-
80
- declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
81
- interface Atomic<TSchema extends U32 | I32> extends WgslData<Unwrap<TSchema>> {
82
- }
83
-
84
- export { type Bool, type F32, type I32, type Mat4f, SimpleWgslData, type U32, type Vec2f, type Vec2i, type Vec2u, type Vec3f, type Vec3i, type Vec3u, type Vec4f, type Vec4i, type Vec4u, arrayOf, atomic, bool, dynamicArrayOf, f32, i32, mat4f, ptr, u32, vec2f, vec2i, vec2u, vec3f, vec3i, vec3u, vec4f, vec4i, vec4u };
@@ -1,84 +0,0 @@
1
- import * as TB from 'typed-binary';
2
- import { AnySchema, Schema, Unwrap, ISerialOutput, ParseUnwrapped, ISerialInput, MaxValue, IMeasurer } from 'typed-binary';
3
- export { Parsed, Unwrap } from 'typed-binary';
4
- import { q as WgslData, e as Wgsl, R as ResolutionCtx, A as AnyWgslData, r as WgslPointer } from '../types-Dgp6OHLq.js';
5
- export { W as WgslStruct, s as struct } from '../struct-CFmatz6R.js';
6
-
7
- declare class SimpleWgslData<TSchema extends AnySchema> extends Schema<Unwrap<TSchema>> implements WgslData<Unwrap<TSchema>> {
8
- readonly size: number;
9
- readonly byteAlignment: number;
10
- private readonly _innerSchema;
11
- private readonly _expressionCode;
12
- /**
13
- * byteAlignment has to be a power of 2
14
- */
15
- constructor({ schema, byteAlignment, code, }: {
16
- schema: TSchema;
17
- byteAlignment: number;
18
- code: Wgsl;
19
- });
20
- resolveReferences(): void;
21
- write(output: ISerialOutput, value: ParseUnwrapped<TSchema>): void;
22
- read(input: ISerialInput): ParseUnwrapped<TSchema>;
23
- measure(value: ParseUnwrapped<TSchema> | MaxValue, measurer?: IMeasurer): IMeasurer;
24
- resolve(ctx: ResolutionCtx): string;
25
- }
26
-
27
- type Bool = WgslData<boolean>;
28
- declare const bool: Bool;
29
- type U32 = WgslData<number>;
30
- declare const u32: U32;
31
- type I32 = WgslData<number>;
32
- declare const i32: I32;
33
- type F32 = WgslData<number>;
34
- declare const f32: F32;
35
- type Vec2u = WgslData<[number, number]>;
36
- declare const vec2u: Vec2u;
37
- type Vec2i = WgslData<[number, number]>;
38
- declare const vec2i: Vec2i;
39
- type Vec2f = WgslData<[number, number]>;
40
- declare const vec2f: Vec2f;
41
- type Vec3u = WgslData<[number, number, number]>;
42
- declare const vec3u: Vec3u;
43
- type Vec3i = WgslData<[number, number, number]>;
44
- declare const vec3i: Vec3i;
45
- type Vec3f = WgslData<[number, number, number]>;
46
- declare const vec3f: Vec3f;
47
- type Vec4u = WgslData<[number, number, number, number]>;
48
- declare const vec4u: Vec4u;
49
- type Vec4i = WgslData<[number, number, number, number]>;
50
- declare const vec4i: Vec4i;
51
- type Vec4f = WgslData<[number, number, number, number]>;
52
- declare const vec4f: Vec4f;
53
- /**
54
- * Array of column vectors
55
- */
56
- type Mat4f = WgslData<number[]>;
57
- declare const mat4f: Mat4f;
58
-
59
- declare class DynamicArrayDataType<TElement extends WgslData<unknown>> extends Schema<Unwrap<TElement>[]> implements WgslData<Unwrap<TElement>[]> {
60
- private readonly _elementType;
61
- readonly capacity: number;
62
- private _label;
63
- readonly byteAlignment: number;
64
- readonly size: number;
65
- constructor(_elementType: TElement, capacity: number);
66
- $name(label: string): this;
67
- resolveReferences(): void;
68
- write(output: ISerialOutput, values: ParseUnwrapped<TElement>[]): void;
69
- read(input: ISerialInput): ParseUnwrapped<TElement>[];
70
- measure(_values: ParseUnwrapped<TElement>[] | typeof MaxValue, measurer?: IMeasurer): IMeasurer;
71
- resolve(ctx: ResolutionCtx): string;
72
- }
73
- declare const dynamicArrayOf: <TSchema extends AnyWgslData>(elementType: TSchema, capacity: number) => DynamicArrayDataType<TSchema>;
74
-
75
- type WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;
76
- declare const arrayOf: <TElement extends AnyWgslData>(elementType: TElement, size: number) => WgslArray<TElement>;
77
-
78
- declare function ptr<TDataType extends AnyWgslData>(pointsTo: TDataType): WgslPointer<'function', TDataType>;
79
-
80
- declare function atomic<TSchema extends U32 | I32>(data: TSchema): Atomic<TSchema>;
81
- interface Atomic<TSchema extends U32 | I32> extends WgslData<Unwrap<TSchema>> {
82
- }
83
-
84
- export { type Bool, type F32, type I32, type Mat4f, SimpleWgslData, type U32, type Vec2f, type Vec2i, type Vec2u, type Vec3f, type Vec3i, type Vec3u, type Vec4f, type Vec4i, type Vec4u, arrayOf, atomic, bool, dynamicArrayOf, f32, i32, mat4f, ptr, u32, vec2f, vec2i, vec2u, vec3f, vec3i, vec3u, vec4f, vec4i, vec4u };
@@ -1,10 +0,0 @@
1
- import{a as u}from"../chunk-OZ2XZ4ZA.js";import{b as m}from"../chunk-XGSMOADT.js";import{d as s,i as l}from"../chunk-TVPC7ZME.js";import{MaxValue as w,Measurer as S,Schema as I}from"typed-binary";function x(n,o){let e="size"in n?n.size:n.currentByteOffset,r=o-1,i=e&r;"skipBytes"in n?n.skipBytes(o-i&r):n.add(o-i&r)}var p=x;var a=class extends I{constructor({schema:e,byteAlignment:r,code:i}){super();s(this,"size");s(this,"byteAlignment");s(this,"_innerSchema");s(this,"_expressionCode");this._innerSchema=e,this.byteAlignment=r,this._expressionCode=i,this.size=this.measure(w).size}resolveReferences(){throw new m}write(e,r){p(e,this.byteAlignment),this._innerSchema.write(e,r)}read(e){return p(e,this.byteAlignment),this._innerSchema.read(e)}measure(e,r=new S){return p(r,this.byteAlignment),this._innerSchema.measure(e,r),r}resolve(e){return e.resolve(this._expressionCode)}};import*as t from"typed-binary";var F=new a({schema:t.bool,byteAlignment:4,code:"bool"}),y=new a({schema:t.u32,byteAlignment:4,code:"u32"}),q=new a({schema:t.i32,byteAlignment:4,code:"i32"}),G=new a({schema:t.f32,byteAlignment:4,code:"f32"}),H=new a({schema:t.tupleOf([t.u32,t.u32]),byteAlignment:8,code:"vec2u"}),J=new a({schema:t.tupleOf([t.i32,t.i32]),byteAlignment:8,code:"vec2i"}),K=new a({schema:t.tupleOf([t.f32,t.f32]),byteAlignment:8,code:"vec2f"}),L=new a({schema:t.tupleOf([t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec3u"}),N=new a({schema:t.tupleOf([t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec3i"}),Q=new a({schema:t.tupleOf([t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec3f"}),X=new a({schema:t.tupleOf([t.u32,t.u32,t.u32,t.u32]),byteAlignment:16,code:"vec4u"}),Y=new a({schema:t.tupleOf([t.i32,t.i32,t.i32,t.i32]),byteAlignment:16,code:"vec4i"}),Z=new a({schema:t.tupleOf([t.f32,t.f32,t.f32,t.f32]),byteAlignment:16,code:"vec4f"}),ee=new a({schema:t.arrayOf(t.f32,16),byteAlignment:16,code:"mat4x4f"});import{MaxValue as b,Measurer as B,Schema as D,ValidationError as v}from"typed-binary";var d=class extends D{constructor(e,r){super();this._elementType=e;this.capacity=r;s(this,"_label");s(this,"byteAlignment");s(this,"size");this.byteAlignment=Math.max(4,this._elementType.byteAlignment),this.size=this.measure(b).size}$name(e){return this._label=e,this}resolveReferences(){throw new m}write(e,r){if(r.length>this.capacity)throw new v(`Tried to write too many values, ${r.length} > ${this.capacity}`);p(e,this.byteAlignment),y.write(e,r.length),p(e,this._elementType.byteAlignment);let i=e.currentByteOffset;for(let c of r)this._elementType.write(e,c);e.seekTo(i+this.capacity*this._elementType.size)}read(e){let r=[];p(e,this.byteAlignment);let i=y.read(e);p(e,this._elementType.byteAlignment);let c=e.currentByteOffset;for(let f=0;f<i;++f)r.push(this._elementType.read(e));return e.seekTo(c+this.capacity*this._elementType.size),r}measure(e,r=new B){return p(r,this.byteAlignment),y.measure(b,r),p(r,this._elementType.byteAlignment),r.add(this._elementType.size*this.capacity),r}resolve(e){let r=new u().$name(this._label);return e.addDeclaration(l`
2
- struct ${r} {
3
- count: u32,
4
- values: array<${this._elementType}, ${this.capacity}>,
5
- }`),e.resolve(r)}},pe=(n,o)=>new d(n,o);import{MaxValue as A,Measurer as W,Schema as U,object as P}from"typed-binary";var he=n=>new h(n),h=class extends U{constructor(e){super();this._properties=e;s(this,"_label");s(this,"_innerSchema");s(this,"byteAlignment");s(this,"size");this._innerSchema=P(e),this.byteAlignment=Object.values(e).map(r=>r.byteAlignment).reduce((r,i)=>r>i?r:i),this.size=this.measure(A).size}$name(e){return this._label=e,this}resolveReferences(){throw new m}write(e,r){this._innerSchema.write(e,r)}read(e){return this._innerSchema.read(e)}measure(e,r=new W){return this._innerSchema.measure(e,r),r}resolve(e){let r=new u().$name(this._label);return e.addDeclaration(l`
6
- struct ${r} {
7
- ${Object.entries(this._properties).map(([i,c])=>l`${i}: ${c},\n`)}
8
- }
9
- `),e.resolve(r)}};import*as g from"typed-binary";var xe=(n,o)=>new a({schema:g.arrayOf(n,o),byteAlignment:n.byteAlignment,code:l`array<${n}, ${o}>`});function O(n){return{scope:"function",pointsTo:n}}import{Measurer as _,Schema as M}from"typed-binary";function R(n){return new T(n)}var T=class extends M{constructor(e){super();this.innerData=e;s(this,"size");s(this,"byteAlignment");this.size=this.innerData.size,this.byteAlignment=this.innerData.byteAlignment}resolveReferences(){throw new m}write(e,r){this.innerData.write(e,r)}read(e){return this.innerData.read(e)}measure(e,r=new _){return this.innerData.measure(e,r)}resolve(e){return`atomic<${e.resolve(this.innerData)}>`}};export{a as SimpleWgslData,xe as arrayOf,R as atomic,F as bool,pe as dynamicArrayOf,G as f32,q as i32,ee as mat4f,O as ptr,he as struct,y as u32,K as vec2f,J as vec2i,H as vec2u,Q as vec3f,N as vec3i,L as vec3u,Z as vec4f,Y as vec4i,X as vec4u};
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/data/std140.ts","../../src/data/alignIO.ts","../../src/data/numeric.ts","../../src/data/dynamicArray.ts","../../src/data/struct.ts","../../src/data/array.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, Wgsl, WgslData } from '../types';\nimport alignIO from './alignIO';\n\nexport class SimpleWgslData<TSchema extends AnySchema>\n extends Schema<Unwrap<TSchema>>\n implements WgslData<Unwrap<TSchema>>\n{\n public readonly size: number;\n public readonly byteAlignment: number;\n\n private readonly _innerSchema: TSchema;\n private readonly _expressionCode: Wgsl;\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: Wgsl;\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 resolve(ctx: ResolutionCtx): string {\n return ctx.resolve(this._expressionCode);\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 { WgslData } from '../types';\nimport { SimpleWgslData } from './std140';\n\nexport type Bool = WgslData<boolean>;\nexport const bool: Bool = new SimpleWgslData({\n schema: TB.bool,\n byteAlignment: 4,\n code: 'bool',\n});\nexport type U32 = WgslData<number>;\nexport const u32: U32 = new SimpleWgslData({\n schema: TB.u32,\n byteAlignment: 4,\n code: 'u32',\n});\nexport type I32 = WgslData<number>;\nexport const i32: I32 = new SimpleWgslData({\n schema: TB.i32,\n byteAlignment: 4,\n code: 'i32',\n});\nexport type F32 = WgslData<number>;\nexport const f32: F32 = new SimpleWgslData({\n schema: TB.f32,\n byteAlignment: 4,\n code: 'f32',\n});\n\nexport type Vec2u = WgslData<[number, number]>;\nexport const vec2u: Vec2u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32]),\n byteAlignment: 8,\n code: 'vec2u',\n});\n\nexport type Vec2i = WgslData<[number, number]>;\nexport const vec2i: Vec2i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32]),\n byteAlignment: 8,\n code: 'vec2i',\n});\nexport type Vec2f = WgslData<[number, number]>;\nexport const vec2f: Vec2f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32]),\n byteAlignment: 8,\n code: 'vec2f',\n});\nexport type Vec3u = WgslData<[number, number, number]>;\nexport const vec3u: Vec3u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec3u',\n});\nexport type Vec3i = WgslData<[number, number, number]>;\nexport const vec3i: Vec3i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec3i',\n});\nexport type Vec3f = WgslData<[number, number, number]>;\nexport const vec3f: Vec3f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec3f',\n});\nexport type Vec4u = WgslData<[number, number, number, number]>;\nexport const vec4u: Vec4u = new SimpleWgslData({\n schema: TB.tupleOf([TB.u32, TB.u32, TB.u32, TB.u32]),\n byteAlignment: 16,\n code: 'vec4u',\n});\nexport type Vec4i = WgslData<[number, number, number, number]>;\nexport const vec4i: Vec4i = new SimpleWgslData({\n schema: TB.tupleOf([TB.i32, TB.i32, TB.i32, TB.i32]),\n byteAlignment: 16,\n code: 'vec4i',\n});\nexport type Vec4f = WgslData<[number, number, number, number]>;\nexport const vec4f: Vec4f = new SimpleWgslData({\n schema: TB.tupleOf([TB.f32, TB.f32, TB.f32, TB.f32]),\n byteAlignment: 16,\n code: 'vec4f',\n});\n\n/**\n * Array of column vectors\n */\nexport type Mat4f = WgslData<number[]>;\nexport const mat4f: Mat4f = new SimpleWgslData({\n schema: TB.arrayOf(TB.f32, 16),\n byteAlignment: 16,\n code: 'mat4x4f',\n});\n","import {\n type IMeasurer,\n type ISerialInput,\n type ISerialOutput,\n MaxValue,\n Measurer,\n type ParseUnwrapped,\n Schema,\n type Unwrap,\n ValidationError,\n} from 'typed-binary';\nimport { RecursiveDataTypeError } from '../errors';\nimport type { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\nimport alignIO from './alignIO';\nimport { u32 } from './numeric';\n\nclass DynamicArrayDataType<TElement extends WgslData<unknown>>\n extends Schema<Unwrap<TElement>[]>\n implements WgslData<Unwrap<TElement>[]>\n{\n private _label: string | undefined;\n\n public readonly byteAlignment: number;\n public readonly size: number;\n\n constructor(\n private readonly _elementType: TElement,\n public readonly capacity: number,\n ) {\n super();\n\n this.byteAlignment = Math.max(\n 4 /* u32 base alignment */,\n this._elementType.byteAlignment,\n );\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, values: ParseUnwrapped<TElement>[]): void {\n if (values.length > this.capacity) {\n throw new ValidationError(\n `Tried to write too many values, ${values.length} > ${this.capacity}`,\n );\n }\n\n alignIO(output, this.byteAlignment); // aligning to the start\n u32.write(output, values.length);\n alignIO(output, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = output.currentByteOffset;\n for (const value of values) {\n this._elementType.write(output, value);\n }\n output.seekTo(startOffset + this.capacity * this._elementType.size);\n }\n\n read(input: ISerialInput): ParseUnwrapped<TElement>[] {\n const array: ParseUnwrapped<TElement>[] = [];\n\n alignIO(input, this.byteAlignment); // aligning to the start\n const len = u32.read(input);\n alignIO(input, this._elementType.byteAlignment); // aligning to the start of the array\n const startOffset = input.currentByteOffset;\n for (let i = 0; i < len; ++i) {\n array.push(this._elementType.read(input) as ParseUnwrapped<TElement>);\n }\n input.seekTo(startOffset + this.capacity * this._elementType.size);\n\n return array;\n }\n\n measure(\n _values: ParseUnwrapped<TElement>[] | typeof MaxValue,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n alignIO(measurer, this.byteAlignment); // aligning to the start\n\n // Length encoding\n u32.measure(MaxValue, measurer);\n\n // Aligning to the start of the array\n alignIO(measurer, this._elementType.byteAlignment);\n\n // Values encoding\n measurer.add(this._elementType.size * this.capacity);\n\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n count: u32,\n values: array<${this._elementType}, ${this.capacity}>,\n }`);\n\n return ctx.resolve(identifier);\n }\n}\n\nexport const dynamicArrayOf = <TSchema extends AnyWgslData>(\n elementType: TSchema,\n capacity: number,\n) => new DynamicArrayDataType(elementType, capacity);\n\nexport default DynamicArrayDataType;\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 { AnyWgslData, ResolutionCtx, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { WgslIdentifier } from '../wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslStruct<TProps extends Record<string, AnyWgslData>>\n extends ISchema<UnwrapRecord<TProps>>,\n WgslData<UnwrapRecord<TProps>> {\n $name(label: string): this;\n}\n\nexport const struct = <TProps extends Record<string, AnyWgslData>>(\n properties: TProps,\n): WgslStruct<TProps> => new WgslStructImpl(properties);\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslStructImpl<TProps extends Record<string, AnyWgslData>>\n extends Schema<UnwrapRecord<TProps>>\n implements WgslData<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 this._innerSchema.write(output, value);\n }\n\n read(input: ISerialInput): Parsed<UnwrapRecord<TProps>> {\n return this._innerSchema.read(input);\n }\n\n measure(\n value: MaxValue | Parsed<UnwrapRecord<TProps>>,\n measurer: IMeasurer = new Measurer(),\n ): IMeasurer {\n this._innerSchema.measure(value, measurer);\n return measurer;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`\n struct ${identifier} {\n ${Object.entries(this._properties).map(([key, field]) => code`${key}: ${field},\\n`)}\n }\n `);\n\n return ctx.resolve(identifier);\n }\n}\n","import * as TB from 'typed-binary';\nimport type { AnyWgslData, WgslData } from '../types';\nimport { code } from '../wgslCode';\nimport { SimpleWgslData } from './std140';\n\ntype WgslArray<TElement extends AnyWgslData> = WgslData<TB.Unwrap<TElement>[]>;\n\nexport const arrayOf = <TElement extends AnyWgslData>(\n elementType: TElement,\n size: number,\n): WgslArray<TElement> =>\n new SimpleWgslData({\n schema: TB.arrayOf(elementType, size),\n byteAlignment: elementType.byteAlignment,\n code: code`array<${elementType}, ${size}>`,\n });\n","import type { AnyWgslData, WgslPointer } from '../types';\n\nexport function ptr<TDataType extends AnyWgslData>(\n pointsTo: TDataType,\n): WgslPointer<'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, WgslData } 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 WgslData<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","alignIO","io","baseAlignment","currentPos","bitMask","offset","alignIO_default","SimpleWgslData","Schema","schema","byteAlignment","code","__publicField","MaxValue","RecursiveDataTypeError","output","value","alignIO_default","input","measurer","Measurer","ctx","TB","bool","SimpleWgslData","u32","i32","f32","vec2u","vec2i","vec2f","vec3u","vec3i","vec3f","vec4u","vec4i","vec4f","mat4f","MaxValue","Measurer","Schema","ValidationError","DynamicArrayDataType","Schema","_elementType","capacity","__publicField","MaxValue","label","RecursiveDataTypeError","output","values","ValidationError","alignIO_default","u32","startOffset","value","input","array","len","i","_values","measurer","Measurer","ctx","identifier","WgslIdentifier","code","dynamicArrayOf","elementType","MaxValue","Measurer","Schema","object","struct","properties","WgslStructImpl","Schema","_properties","__publicField","object","prop","a","b","MaxValue","label","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx","identifier","WgslIdentifier","code","key","field","TB","arrayOf","elementType","size","SimpleWgslData","code","ptr","pointsTo","Measurer","Schema","atomic","data","AtomicImpl","Schema","innerData","__publicField","RecursiveDataTypeError","output","value","input","measurer","Measurer","ctx"]}
package/dist/index.cjs DELETED
@@ -1,6 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkKBVQVOLYcjs = require('./chunk-KBVQVOLY.cjs');var _chunk5ZQTJALJcjs = require('./chunk-5ZQTJALJ.cjs');var _chunkG3U6RTMFcjs = require('./chunk-G3U6RTMF.cjs');var _chunkAS7UPXZ3cjs = require('./chunk-AS7UPXZ3.cjs');var u=class extends Function{constructor(){super("...args","return this._bound._call(...args)");_chunkAS7UPXZ3cjs.d.call(void 0, this,"_bound");return this._bound=this.bind(this),this._bound}},U=u;function g(s,e){return new f(s,e)}var f=class{constructor(e,t){this.buffer=e;this.usage=t;_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label")}get label(){return this._label}get allocatable(){return this.buffer}$name(e){return this._label=e,this}resolve(e){let t=new _chunkKBVQVOLYcjs.a;return e.addBinding(this,t),e.resolve(t)}toString(){var e;return`${this.usage}:${(e=this._label)!=null?e:"<unnamed>"}`}};function v(s,e){return new d(s,e)}var d=class{constructor(e,t){this.dataType=e;this.initial=t;_chunkAS7UPXZ3cjs.d.call(void 0, this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);_chunkAS7UPXZ3cjs.d.call(void 0, this,"_allowedUsages",{uniform:null,mutableStorage:null,readonlyStorage:null});_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}$allowUniform(){let e=this;return this.$addFlags(GPUBufferUsage.UNIFORM),this._allowedUsages.uniform||(this._allowedUsages.uniform=g(e,"uniform")),e}$allowReadonlyStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.readonlyStorage||(this._allowedUsages.readonlyStorage=g(e,"readonly_storage")),e}$allowMutableStorage(){let e=this;return this.$addFlags(GPUBufferUsage.STORAGE),this._allowedUsages.mutableStorage||(this._allowedUsages.mutableStorage=g(e,"mutable_storage")),e}$addFlags(e){return this.flags|=e,this}asUniform(){return this._allowedUsages.uniform}asStorage(){return this._allowedUsages.mutableStorage}asReadonlyStorage(){return this._allowedUsages.readonlyStorage}toString(){var e;return`buffer:${(e=this._label)!=null?e:"<unnamed>"}`}};function _(s){return new T(s)}var T=class{constructor(e){this.expr=e;_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkKBVQVOLYcjs.a)().$name(this._label);return e.addDeclaration(_chunkAS7UPXZ3cjs.i`const ${t} = ${this.expr};`),e.resolve(t)}};function R(s){return(e,...t)=>{let l=new p(_chunkAS7UPXZ3cjs.i.call(void 0, e,...t));return s&&l.$name(s),l}}var p=class{constructor(e){this.body=e;_chunkAS7UPXZ3cjs.d.call(void 0, this,"_label")}get label(){return this._label}$name(e){return this._label=e,this}resolve(e){let t=new (0, _chunkKBVQVOLYcjs.a)().$name(this._label);return e.addDeclaration(_chunkAS7UPXZ3cjs.i`fn ${t}${this.body}`.$name(this._label)),e.resolve(t)}with(e,t){return new m(this,[e,t])}toString(){var e;return`fn:${(e=this.label)!=null?e:"<unnamed>"}`}},m=class s{constructor(e,t){this._innerFn=e;this._slotValuePair=t}get label(){return this._innerFn.label}with(e,t){return new s(this,[e,t])}resolve(e){return e.resolve(this._innerFn,[this._slotValuePair])}toString(){var l,n;let[e,t]=this._slotValuePair;return`fn:${(l=this.label)!=null?l:"<unnamed>"}[${(n=e.label)!=null?n:"<unnamed>"}=${t}]`}};function F(s,e){let t=s.map(n=>[new _chunkKBVQVOLYcjs.a,n]),l=t.map(([n,i])=>n);return n=>{let i=n(...l);return new W(t,e,i)}}var y=class{constructor(e,t){this.usedFn=e;this.args=t}resolve(e){let t=this.args.map((l,n)=>{let i=n<this.args.length-1?", ":"";return _chunkAS7UPXZ3cjs.i`${l}${i}`});return e.resolve(_chunkAS7UPXZ3cjs.i`${this.usedFn}(${t})`)}},W=class extends U{constructor(t,l,n){super();this.argPairs=t;this.returnType=l;this.body=n;_chunkAS7UPXZ3cjs.d.call(void 0, this,"identifier",new _chunkKBVQVOLYcjs.a)}$name(t){return this.identifier.$name(t),this}resolve(t){let l=this.argPairs.map(([n,i],A)=>{let h=A<this.argPairs.length-1?", ":"";return _chunkAS7UPXZ3cjs.h.call(void 0, i)?_chunkAS7UPXZ3cjs.i`${n}: ptr<${i.scope}, ${i.pointsTo}>${h}`:_chunkAS7UPXZ3cjs.i`${n}: ${i}${h}`});return this.returnType!==void 0?t.addDeclaration(_chunkAS7UPXZ3cjs.i`fn ${this.identifier}(${l}) -> ${this.returnType} {
2
- ${this.body}
3
- }`):t.addDeclaration(_chunkAS7UPXZ3cjs.i`fn ${this.identifier}(${l}) {
4
- ${this.body}
5
- }`),t.resolve(this.identifier)}_call(...t){return new y(this,t)}};function B(s){return new b(s)}var b=class{constructor(e=void 0){this.defaultValue=e;_chunkAS7UPXZ3cjs.d.call(void 0, this,"__brand","WgslSlot");_chunkAS7UPXZ3cjs.d.call(void 0, this,"label")}$name(e){return this.label=e,this}areEqual(e,t){return Object.is(e,t)}resolve(e){var l;let t=e.unwrap(this);if(!_chunkAS7UPXZ3cjs.f.call(void 0, t))throw new Error(`Cannot inject value of type ${typeof t} of slot '${(l=this.label)!=null?l:"<unnamed>"}' in code.`);return e.resolve(t)}toString(){var e;return`slot:${(e=this.label)!=null?e:"<unnamed>"}`}};var S=(s,e)=>new c(s,e,"private"),c=class{constructor(e,t,l){this._dataType=e;this._initialValue=t;this.scope=l;_chunkAS7UPXZ3cjs.d.call(void 0, this,"identifier",new _chunkKBVQVOLYcjs.a)}$name(e){return this.identifier.$name(e),this}resolve(e){return this._initialValue?e.addDeclaration(_chunkAS7UPXZ3cjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType} = ${this._initialValue};`):e.addDeclaration(_chunkAS7UPXZ3cjs.i`var<${this.scope}> ${this.identifier}: ${this._dataType};`),e.resolve(this.identifier)}};var C=Object.assign(_chunkAS7UPXZ3cjs.i,{code:_chunkAS7UPXZ3cjs.i,fn:R,fun:F,buffer:v,plum:_chunk5ZQTJALJcjs.e,plumFromEvent:_chunk5ZQTJALJcjs.f,slot:B,constant:_,var:S});exports.MissingSlotValueError = _chunkG3U6RTMFcjs.a; exports.ProgramBuilder = _chunk5ZQTJALJcjs.c; exports.RandomNameRegistry = _chunk5ZQTJALJcjs.a; exports.RecursiveDataTypeError = _chunkG3U6RTMFcjs.b; exports.StrictNameRegistry = _chunk5ZQTJALJcjs.b; exports.default = C; exports.isPointer = _chunkAS7UPXZ3cjs.h; exports.isResolvable = _chunkAS7UPXZ3cjs.e; exports.isSlot = _chunkAS7UPXZ3cjs.g; exports.isWgsl = _chunkAS7UPXZ3cjs.f; exports.wgsl = C;
6
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/callable.ts","../src/wgslBufferUsage.ts","../src/wgslBuffer.ts","../src/wgslConstant.ts","../src/wgslFunction.ts","../src/wgslFunctionExperimental.ts","../src/wgslSlot.ts","../src/wgslVariable.ts","../src/wgsl.ts"],"names":["Callable","__publicField","callable_default","bufferUsage","buffer","usage","WgslBufferUsageImpl","label","ctx","identifier","WgslIdentifier","_a","typeSchema","initial","WgslBufferImpl","dataType","enrichedThis","flags","constant","expr","WgslConstImpl","code","fn","strings","params","func","WgslFnImpl","body","slot","value","BoundWgslFnImpl","_BoundWgslFnImpl","_innerFn","_slotValuePair","_b","argTypes","returnType","argPairs","argType","argValues","argIdent","bodyProducer","WgslFunctionCall","usedFn","args","argsCode","argSegment","idx","comma","ident","isPointer","defaultValue","WgslSlotImpl","a","b","isWgsl","variable","initialValue","WgslVarImpl","_dataType","_initialValue","scope","wgsl_default","plum","plumFromEvent"],"mappings":"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","sourcesContent":["// biome-ignore lint/suspicious/noExplicitAny: <generics>\nabstract class Callable<TArgs extends [...any[]], TReturn> extends Function {\n _bound: Callable<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\n// biome-ignore lint/suspicious/noExplicitAny: <generics>\nexport type ICallable<TArgs extends [...any[]], TReturn> = (\n ...args: TArgs\n) => TReturn;\n\n// biome-ignore lint/suspicious/noExplicitAny: <generics>\nexport type AsCallable<T, TArgs extends [...any[]], TReturn> = T &\n ICallable<TArgs, TReturn>;\n\nexport default Callable;\n","import type {\n AnyWgslData,\n BufferUsage,\n ResolutionCtx,\n WgslBindable,\n} from './types';\nimport type { WgslBuffer } from './wgslBuffer';\nimport { WgslIdentifier } from './wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslBufferUsage<\n TData extends AnyWgslData,\n TUsage extends BufferUsage,\n> extends WgslBindable<TData, TUsage> {\n $name(label: string): WgslBufferUsage<TData, TUsage>;\n}\n\nexport function bufferUsage<\n TData extends AnyWgslData,\n TUsage extends BufferUsage,\n>(\n buffer: WgslBuffer<TData, TUsage>,\n usage: TUsage,\n): WgslBufferUsage<TData, TUsage> {\n return new WgslBufferUsageImpl(buffer, usage);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslBufferUsageImpl<TData extends AnyWgslData, TUsage extends BufferUsage>\n implements WgslBufferUsage<TData, TUsage>\n{\n private _label: string | undefined;\n\n constructor(\n public readonly buffer: WgslBuffer<TData, TUsage>,\n public readonly usage: TUsage,\n ) {}\n\n get label() {\n return this._label;\n }\n\n get allocatable() {\n return this.buffer;\n }\n\n $name(label: string | undefined) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier();\n\n ctx.addBinding(this, identifier);\n\n return ctx.resolve(identifier);\n }\n\n toString(): string {\n return `${this.usage}:${this._label ?? '<unnamed>'}`;\n }\n}\n","import type { Parsed } from 'typed-binary';\nimport type { AnyWgslData, BufferUsage, WgslAllocatable } from './types';\nimport { type WgslBufferUsage, bufferUsage } from './wgslBufferUsage';\nimport type { WgslPlum } from './wgslPlum';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslBuffer<\n TData extends AnyWgslData,\n TAllows extends BufferUsage = never,\n> extends WgslAllocatable<TData> {\n $name(label: string): WgslBuffer<TData, TAllows>;\n $allowUniform(): WgslBuffer<TData, TAllows | 'uniform'>;\n $allowReadonlyStorage(): WgslBuffer<TData, TAllows | 'readonly_storage'>;\n $allowMutableStorage(): WgslBuffer<TData, TAllows | 'mutable_storage'>;\n $addFlags(flags: GPUBufferUsageFlags): WgslBuffer<TData, TAllows>;\n\n asUniform(): 'uniform' extends TAllows\n ? WgslBufferUsage<TData, 'uniform'>\n : null;\n\n asStorage(): 'mutable_storage' extends TAllows\n ? WgslBufferUsage<TData, 'mutable_storage'>\n : null;\n\n asReadonlyStorage(): 'readonly_storage' extends TAllows\n ? WgslBufferUsage<TData, 'readonly_storage'>\n : null;\n}\n\nexport function buffer<\n TData extends AnyWgslData,\n TUsage extends BufferUsage = never,\n>(\n typeSchema: TData,\n initial?: Parsed<TData> | WgslPlum<Parsed<TData>> | undefined,\n): WgslBuffer<TData, TUsage> {\n return new WgslBufferImpl<TData, TUsage>(typeSchema, initial);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslBufferImpl<\n TData extends AnyWgslData,\n TAllows extends BufferUsage = never,\n> implements WgslBuffer<TData, TAllows>\n{\n public flags: GPUBufferUsageFlags =\n GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n\n private _allowedUsages: {\n uniform: WgslBufferUsage<TData, TAllows | 'uniform'> | null;\n mutableStorage: WgslBufferUsage<TData, TAllows | 'mutable_storage'> | null;\n readonlyStorage: WgslBufferUsage<\n TData,\n TAllows | 'readonly_storage'\n > | null;\n } = {\n uniform: null,\n mutableStorage: null,\n readonlyStorage: null,\n };\n\n private _label: string | undefined;\n\n constructor(\n public readonly dataType: TData,\n public readonly initial?: Parsed<TData> | WgslPlum<Parsed<TData>>,\n ) {}\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n $allowUniform() {\n const enrichedThis = this as WgslBuffer<TData, TAllows | 'uniform'>;\n this.$addFlags(GPUBufferUsage.UNIFORM);\n if (!this._allowedUsages.uniform) {\n this._allowedUsages.uniform = bufferUsage(enrichedThis, 'uniform');\n }\n return enrichedThis;\n }\n\n $allowReadonlyStorage() {\n const enrichedThis = this as WgslBuffer<\n TData,\n TAllows | 'readonly_storage'\n >;\n this.$addFlags(GPUBufferUsage.STORAGE);\n if (!this._allowedUsages.readonlyStorage) {\n this._allowedUsages.readonlyStorage = bufferUsage(\n enrichedThis,\n 'readonly_storage',\n );\n }\n return enrichedThis;\n }\n\n $allowMutableStorage() {\n const enrichedThis = this as WgslBuffer<TData, TAllows | 'mutable_storage'>;\n this.$addFlags(GPUBufferUsage.STORAGE);\n if (!this._allowedUsages.mutableStorage) {\n this._allowedUsages.mutableStorage = bufferUsage(\n enrichedThis,\n 'mutable_storage',\n );\n }\n return enrichedThis;\n }\n\n // Temporary solution\n $addFlags(flags: GPUBufferUsageFlags) {\n this.flags |= flags;\n return this;\n }\n\n asUniform() {\n return this._allowedUsages.uniform as 'uniform' extends TAllows\n ? WgslBufferUsage<TData, 'uniform'>\n : null;\n }\n\n asStorage() {\n return this._allowedUsages\n .mutableStorage as 'mutable_storage' extends TAllows\n ? WgslBufferUsage<TData, 'mutable_storage'>\n : null;\n }\n\n asReadonlyStorage() {\n return this._allowedUsages\n .readonlyStorage as 'readonly_storage' extends TAllows\n ? WgslBufferUsage<TData, 'readonly_storage'>\n : null;\n }\n\n toString(): string {\n return `buffer:${this._label ?? '<unnamed>'}`;\n }\n}\n","import type { ResolutionCtx, Wgsl, WgslResolvable } from './types';\nimport { code } from './wgslCode';\nimport { WgslIdentifier } from './wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslConst extends WgslResolvable {\n $name(label: string): WgslConst;\n}\n\n/**\n * Creates a constant is computed at shader initialization according\n * to the passed in expression.\n */\nexport function constant(expr: Wgsl): WgslConst {\n return new WgslConstImpl(expr);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslConstImpl implements WgslConst {\n private _label: string | undefined;\n\n constructor(private readonly expr: Wgsl) {}\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`const ${identifier} = ${this.expr};`);\n\n return ctx.resolve(identifier);\n }\n}\n","import type {\n Eventual,\n InlineResolve,\n ResolutionCtx,\n SlotValuePair,\n Wgsl,\n WgslResolvable,\n WgslSlot,\n} from './types';\nimport { code } from './wgslCode';\nimport { WgslIdentifier } from './wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslFn extends WgslResolvable {\n $name(label: string): WgslFn;\n\n with<T>(slot: WgslSlot<T>, value: Eventual<T>): BoundWgslFn;\n}\n\nexport type BoundWgslFn = Omit<WgslFn, '$name'>;\n\nexport function fn(label?: string) {\n return (\n strings: TemplateStringsArray,\n ...params: (Wgsl | InlineResolve)[]\n ): WgslFn => {\n const func = new WgslFnImpl(code(strings, ...params));\n if (label) {\n func.$name(label);\n }\n return func;\n };\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslFnImpl implements WgslFn {\n private _label: string | undefined;\n\n constructor(private readonly body: Wgsl) {}\n\n get label() {\n return this._label;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const identifier = new WgslIdentifier().$name(this._label);\n\n ctx.addDeclaration(code`fn ${identifier}${this.body}`.$name(this._label));\n\n return ctx.resolve(identifier);\n }\n\n with<T>(slot: WgslSlot<T>, value: T): BoundWgslFn {\n return new BoundWgslFnImpl(this, [slot, value]);\n }\n\n toString(): string {\n return `fn:${this.label ?? '<unnamed>'}`;\n }\n}\n\nclass BoundWgslFnImpl<T> implements BoundWgslFn {\n constructor(\n private readonly _innerFn: BoundWgslFn,\n private readonly _slotValuePair: SlotValuePair<T>,\n ) {}\n\n get label() {\n return this._innerFn.label;\n }\n\n with<TValue>(slot: WgslSlot<TValue>, value: Eventual<TValue>): BoundWgslFn {\n return new BoundWgslFnImpl(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 `fn:${this.label ?? '<unnamed>'}[${slot.label ?? '<unnamed>'}=${value}]`;\n }\n}\n","import Callable, { type AsCallable } from './callable';\nimport { isPointer } from './types';\nimport type {\n AnyWgslData,\n ResolutionCtx,\n Wgsl,\n WgslFnArgument,\n WgslResolvable,\n WgslValue,\n} from './types';\nimport { code } from './wgslCode';\nimport { WgslIdentifier } from './wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport interface WgslFn<\n TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [],\n TReturn extends AnyWgslData | undefined = undefined,\n> extends WgslResolvable,\n Callable<\n SegmentsFromTypes<TArgTypes>,\n WgslFunctionCall<TArgTypes, TReturn>\n > {}\n\nexport function fn<\n TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [],\n TReturn extends AnyWgslData | undefined = undefined,\n>(argTypes: TArgTypes, returnType?: TReturn) {\n const argPairs = argTypes.map(\n (argType) => [new WgslIdentifier(), argType] as const,\n ) as PairsFromTypes<TArgTypes>;\n\n const argValues = argPairs.map(\n ([argIdent, argType]) =>\n argIdent as WgslValue<typeof argType> & WgslIdentifier,\n );\n\n type TArgValues = ValuesFromTypes<TArgTypes>;\n return (bodyProducer: (...args: TArgValues) => Wgsl) => {\n const body = bodyProducer(...(argValues as TArgValues));\n\n const fnInstance = new WgslFnImpl<TArgTypes, TReturn>(\n argPairs,\n returnType,\n body,\n );\n\n return fnInstance as AsCallable<\n typeof fnInstance,\n SegmentsFromTypes<TArgTypes>,\n WgslFunctionCall<TArgTypes>\n >;\n };\n}\n\n// --------------\n// Implementation\n// --------------\n\ntype ValuesFromTypes<TArgTypes extends WgslFnArgument[]> = {\n [K in keyof TArgTypes]: WgslValue<TArgTypes[K]> & WgslIdentifier;\n};\n\ntype PairsFromTypes<TArgTypes extends WgslFnArgument[]> = {\n [K in keyof TArgTypes]: readonly [WgslIdentifier, TArgTypes[K]];\n};\n\ntype SegmentsFromTypes<TArgTypes extends WgslFnArgument[]> = {\n [K in keyof TArgTypes]: Wgsl;\n};\n\nclass WgslFunctionCall<\n TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [],\n TReturn extends AnyWgslData | undefined = undefined,\n> implements WgslResolvable\n{\n constructor(\n private usedFn: WgslFn<TArgTypes, TReturn>,\n private readonly args: SegmentsFromTypes<TArgTypes>,\n ) {}\n\n resolve(ctx: ResolutionCtx): string {\n const argsCode = this.args.map((argSegment, idx) => {\n const comma = idx < this.args.length - 1 ? ', ' : '';\n return code`${argSegment}${comma}`;\n });\n\n return ctx.resolve(code`${this.usedFn}(${argsCode})`);\n }\n}\n\nclass WgslFnImpl<\n TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [],\n // TArgPairs extends (readonly [WgslIdentifier, WgslFnArgument])[],\n TReturn extends AnyWgslData | undefined = undefined,\n >\n extends Callable<\n SegmentsFromTypes<TArgTypes>,\n WgslFunctionCall<TArgTypes, TReturn>\n >\n implements WgslFn<TArgTypes, TReturn>\n{\n private identifier = new WgslIdentifier();\n\n constructor(\n private argPairs: PairsFromTypes<TArgTypes>,\n private returnType: TReturn | undefined,\n private readonly body: Wgsl,\n ) {\n super();\n }\n\n $name(label: string) {\n this.identifier.$name(label);\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n const argsCode = this.argPairs.map(([ident, argType], idx) => {\n const comma = idx < this.argPairs.length - 1 ? ', ' : '';\n\n if (isPointer(argType)) {\n return code`${ident}: ptr<${argType.scope}, ${argType.pointsTo}>${comma}`;\n }\n\n return code`${ident}: ${argType}${comma}`;\n });\n\n if (this.returnType !== undefined) {\n ctx.addDeclaration(code`fn ${this.identifier}(${argsCode}) -> ${this.returnType} {\n ${this.body}\n }`);\n } else {\n ctx.addDeclaration(code`fn ${this.identifier}(${argsCode}) {\n ${this.body}\n }`);\n }\n\n return ctx.resolve(this.identifier);\n }\n\n _call(\n ...args: SegmentsFromTypes<TArgTypes>\n ): WgslFunctionCall<TArgTypes, TReturn> {\n return new WgslFunctionCall(this, args);\n }\n}\n","import {\n type ResolutionCtx,\n type Wgsl,\n type WgslResolvable,\n type WgslResolvableSlot,\n type WgslSlot,\n isWgsl,\n} from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport function slot<T extends Wgsl>(defaultValue?: T): WgslResolvableSlot<T>;\n\nexport function slot<T>(defaultValue?: T): WgslSlot<T>;\n\nexport function slot<T>(defaultValue?: T): WgslSlot<T> {\n return new WgslSlotImpl(defaultValue);\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslSlotImpl<T> implements WgslResolvable, WgslSlot<T> {\n readonly __brand = 'WgslSlot';\n public label?: string | undefined;\n\n constructor(public defaultValue: T | undefined = undefined) {}\n\n public $name(label: string) {\n this.label = label;\n return this;\n }\n\n areEqual(a: T, b: T): boolean {\n return Object.is(a, b);\n }\n\n resolve(ctx: ResolutionCtx): string {\n const value = ctx.unwrap(this);\n\n if (!isWgsl(value)) {\n throw new Error(\n `Cannot inject value of type ${typeof value} of slot '${this.label ?? '<unnamed>'}' in code.`,\n );\n }\n\n return ctx.resolve(value);\n }\n\n toString(): string {\n return `slot:${this.label ?? '<unnamed>'}`;\n }\n}\n","import type { AnyWgslData, ResolutionCtx, Wgsl, WgslResolvable } from './types';\nimport { code } from './wgslCode';\nimport { WgslIdentifier } from './wgslIdentifier';\n\n// ----------\n// Public API\n// ----------\n\nexport type VariableScope = 'private';\n\nexport interface WgslVar<TDataType extends AnyWgslData> extends WgslResolvable {\n $name(label: string): WgslVar<TDataType>;\n}\n\n/**\n * Creates a variable, with an optional initial value.\n */\nexport const variable = <TDataType extends AnyWgslData>(\n dataType: TDataType,\n initialValue?: Wgsl,\n): WgslVar<TDataType> => new WgslVarImpl(dataType, initialValue, 'private');\n\n// --------------\n// Implementation\n// --------------\n\nclass WgslVarImpl<TDataType extends AnyWgslData> implements WgslVar<TDataType> {\n public identifier = new WgslIdentifier();\n\n constructor(\n private readonly _dataType: TDataType,\n private readonly _initialValue: Wgsl | undefined,\n public readonly scope: VariableScope,\n ) {}\n\n $name(label: string) {\n this.identifier.$name(label);\n return this;\n }\n\n resolve(ctx: ResolutionCtx): string {\n if (this._initialValue) {\n ctx.addDeclaration(\n code`var<${this.scope}> ${this.identifier}: ${this._dataType} = ${this._initialValue};`,\n );\n } else {\n ctx.addDeclaration(\n code`var<${this.scope}> ${this.identifier}: ${this._dataType};`,\n );\n }\n\n return ctx.resolve(this.identifier);\n }\n}\n","import { buffer } from './wgslBuffer';\nimport { code } from './wgslCode';\nimport { constant } from './wgslConstant';\nimport { fn } from './wgslFunction';\nimport { fn as fun } from './wgslFunctionExperimental';\nimport { plum, plumFromEvent } from './wgslPlum';\nimport { slot } from './wgslSlot';\nimport { variable } from './wgslVariable';\n\nexport default Object.assign(code, {\n code,\n fn,\n fun,\n buffer,\n plum,\n plumFromEvent,\n slot,\n constant,\n var: variable,\n});\n"]}
package/dist/index.d.cts DELETED
@@ -1,145 +0,0 @@
1
- import { W as WgslSlot, a as WgslResolvable, A as AnyWgslData, B as BufferUsage, b as WgslBindable, c as WgslAllocatable, d as WgslPlum, e as Wgsl, E as Eventual, I as InlineResolve, f as WgslFnArgument, R as ResolutionCtx, g as WgslValue, h as WgslIdentifier, i as WgslResolvableSlot, p as plum, j as plumFromEvent } from './types-Dgp6OHLq.cjs';
2
- export { s as AnyWgslPointer, o as EventualGetter, S as SlotValuePair, q as WgslData, r as WgslPointer, k as WgslSettable, t as isPointer, l as isResolvable, n as isSlot, m as isWgsl } from './types-Dgp6OHLq.cjs';
3
- import { T as TypeGpuRuntime, c as code } from './typegpuRuntime-Dg50sa5T.cjs';
4
- export { e as ComputePipelineExecutor, d as ComputePipelineExecutorOptions, C as ComputePipelineOptions, b as RenderPipelineExecutor, a as RenderPipelineExecutorOptions, R as RenderPipelineOptions, W as WgslCode } from './typegpuRuntime-Dg50sa5T.cjs';
5
- import { Parsed } from 'typed-binary';
6
- import './struct-CRg8uhjj.cjs';
7
-
8
- /**
9
- * @category Errors
10
- */
11
- declare class MissingSlotValueError extends Error {
12
- readonly slot: WgslSlot<unknown>;
13
- constructor(slot: WgslSlot<unknown>);
14
- }
15
- /**
16
- * @category Errors
17
- */
18
- declare class RecursiveDataTypeError extends Error {
19
- constructor();
20
- }
21
-
22
- declare abstract class Callable<TArgs extends [...any[]], TReturn> extends Function {
23
- _bound: Callable<TArgs, TReturn>;
24
- constructor();
25
- abstract _call(...args: TArgs): TReturn;
26
- }
27
- type ICallable<TArgs extends [...any[]], TReturn> = (...args: TArgs) => TReturn;
28
- type AsCallable<T, TArgs extends [...any[]], TReturn> = T & ICallable<TArgs, TReturn>;
29
-
30
- interface NameRegistry {
31
- nameFor(item: WgslResolvable): string;
32
- }
33
- declare class RandomNameRegistry implements NameRegistry {
34
- private lastUniqueId;
35
- private names;
36
- nameFor(item: WgslResolvable): string;
37
- }
38
- declare class StrictNameRegistry implements NameRegistry {
39
- /**
40
- * Allows to provide a good fallback for instances of the
41
- * same function that are bound to different slot values.
42
- */
43
- private readonly _usedNames;
44
- private readonly _assignedNames;
45
- nameFor(item: WgslResolvable): string;
46
- }
47
-
48
- type Program = {
49
- readonly bindGroupLayout: GPUBindGroupLayout;
50
- readonly bindGroup: GPUBindGroup;
51
- readonly code: string;
52
- };
53
- type BuildOptions = {
54
- shaderStage: number;
55
- bindingGroup: number;
56
- nameRegistry?: NameRegistry;
57
- };
58
- declare class ProgramBuilder {
59
- private runtime;
60
- private root;
61
- constructor(runtime: TypeGpuRuntime, root: WgslResolvable);
62
- build(options: BuildOptions): Program;
63
- }
64
-
65
- interface WgslVar<TDataType extends AnyWgslData> extends WgslResolvable {
66
- $name(label: string): WgslVar<TDataType>;
67
- }
68
-
69
- interface WgslBufferUsage<TData extends AnyWgslData, TUsage extends BufferUsage> extends WgslBindable<TData, TUsage> {
70
- $name(label: string): WgslBufferUsage<TData, TUsage>;
71
- }
72
-
73
- interface WgslBuffer<TData extends AnyWgslData, TAllows extends BufferUsage = never> extends WgslAllocatable<TData> {
74
- $name(label: string): WgslBuffer<TData, TAllows>;
75
- $allowUniform(): WgslBuffer<TData, TAllows | 'uniform'>;
76
- $allowReadonlyStorage(): WgslBuffer<TData, TAllows | 'readonly_storage'>;
77
- $allowMutableStorage(): WgslBuffer<TData, TAllows | 'mutable_storage'>;
78
- $addFlags(flags: GPUBufferUsageFlags): WgslBuffer<TData, TAllows>;
79
- asUniform(): 'uniform' extends TAllows ? WgslBufferUsage<TData, 'uniform'> : null;
80
- asStorage(): 'mutable_storage' extends TAllows ? WgslBufferUsage<TData, 'mutable_storage'> : null;
81
- asReadonlyStorage(): 'readonly_storage' extends TAllows ? WgslBufferUsage<TData, 'readonly_storage'> : null;
82
- }
83
- declare function buffer<TData extends AnyWgslData, TUsage extends BufferUsage = never>(typeSchema: TData, initial?: Parsed<TData> | WgslPlum<Parsed<TData>> | undefined): WgslBuffer<TData, TUsage>;
84
-
85
- interface WgslConst extends WgslResolvable {
86
- $name(label: string): WgslConst;
87
- }
88
- /**
89
- * Creates a constant is computed at shader initialization according
90
- * to the passed in expression.
91
- */
92
- declare function constant(expr: Wgsl): WgslConst;
93
-
94
- interface WgslFn$1 extends WgslResolvable {
95
- $name(label: string): WgslFn$1;
96
- with<T>(slot: WgslSlot<T>, value: Eventual<T>): BoundWgslFn;
97
- }
98
- type BoundWgslFn = Omit<WgslFn$1, '$name'>;
99
- declare function fn$1(label?: string): (strings: TemplateStringsArray, ...params: (Wgsl | InlineResolve)[]) => WgslFn$1;
100
-
101
- interface WgslFn<TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [], TReturn extends AnyWgslData | undefined = undefined> extends WgslResolvable, Callable<SegmentsFromTypes<TArgTypes>, WgslFunctionCall<TArgTypes, TReturn>> {
102
- }
103
- declare function fn<TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [], TReturn extends AnyWgslData | undefined = undefined>(argTypes: TArgTypes, returnType?: TReturn): (bodyProducer: (...args: ValuesFromTypes<TArgTypes>) => Wgsl) => AsCallable<WgslFnImpl<TArgTypes, TReturn>, SegmentsFromTypes<TArgTypes>, WgslFunctionCall<TArgTypes>>;
104
- type ValuesFromTypes<TArgTypes extends WgslFnArgument[]> = {
105
- [K in keyof TArgTypes]: WgslValue<TArgTypes[K]> & WgslIdentifier;
106
- };
107
- type PairsFromTypes<TArgTypes extends WgslFnArgument[]> = {
108
- [K in keyof TArgTypes]: readonly [WgslIdentifier, TArgTypes[K]];
109
- };
110
- type SegmentsFromTypes<TArgTypes extends WgslFnArgument[]> = {
111
- [K in keyof TArgTypes]: Wgsl;
112
- };
113
- declare class WgslFunctionCall<TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [], TReturn extends AnyWgslData | undefined = undefined> implements WgslResolvable {
114
- private usedFn;
115
- private readonly args;
116
- constructor(usedFn: WgslFn<TArgTypes, TReturn>, args: SegmentsFromTypes<TArgTypes>);
117
- resolve(ctx: ResolutionCtx): string;
118
- }
119
- declare class WgslFnImpl<TArgTypes extends [WgslFnArgument, ...WgslFnArgument[]] | [], TReturn extends AnyWgslData | undefined = undefined> extends Callable<SegmentsFromTypes<TArgTypes>, WgslFunctionCall<TArgTypes, TReturn>> implements WgslFn<TArgTypes, TReturn> {
120
- private argPairs;
121
- private returnType;
122
- private readonly body;
123
- private identifier;
124
- constructor(argPairs: PairsFromTypes<TArgTypes>, returnType: TReturn | undefined, body: Wgsl);
125
- $name(label: string): this;
126
- resolve(ctx: ResolutionCtx): string;
127
- _call(...args: SegmentsFromTypes<TArgTypes>): WgslFunctionCall<TArgTypes, TReturn>;
128
- }
129
-
130
- declare function slot<T extends Wgsl>(defaultValue?: T): WgslResolvableSlot<T>;
131
- declare function slot<T>(defaultValue?: T): WgslSlot<T>;
132
-
133
- declare const _default: typeof code & {
134
- code: typeof code;
135
- fn: typeof fn$1;
136
- fun: typeof fn;
137
- buffer: typeof buffer;
138
- plum: typeof plum;
139
- plumFromEvent: typeof plumFromEvent;
140
- slot: typeof slot;
141
- constant: typeof constant;
142
- var: <TDataType extends AnyWgslData>(dataType: TDataType, initialValue?: Wgsl) => WgslVar<TDataType>;
143
- };
144
-
145
- export { AnyWgslData, type AsCallable, BufferUsage, Eventual, type ICallable, InlineResolve, MissingSlotValueError, type Program, ProgramBuilder, RandomNameRegistry, RecursiveDataTypeError, ResolutionCtx, StrictNameRegistry, TypeGpuRuntime, Wgsl, WgslAllocatable, WgslBindable, type WgslBuffer, type WgslConst, type WgslFn$1 as WgslFn, WgslFnArgument, type WgslFn as WgslFnExperimental, WgslPlum, WgslResolvable, WgslResolvableSlot, WgslSlot, WgslValue, type WgslVar, _default as default, _default as wgsl };