typegpu 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
package/index.d.ts CHANGED
@@ -1,49 +1,20 @@
1
1
  import { Parsed } from 'typed-binary';
2
- import { A as AnyTgpuData, T as TgpuAllocatable, a as TgpuNamable, b as TgpuPlum, v as vecBase, c as vec3f, d as vec3i, e as vec3u } from './types-D2gslu2F.js';
3
- export { g as TexelFormat, f as TgpuData } from './types-D2gslu2F.js';
2
+ import { A as AnyTgpuData, T as TgpuPlum, a as TgpuBuffer, v as vecBase, b as vec3f, c as vec3i, d as vec3u, U as Uniform, S as Storage, V as Vertex } from './tgpuBuffer-BVk2wCHR.js';
3
+ export { e as TgpuData, i as isUsableAsStorage, f as isUsableAsUniform, g as isUsableAsVertex } from './tgpuBuffer-BVk2wCHR.js';
4
4
 
5
- interface Unmanaged {
6
- readonly device: GPUDevice;
7
- readonly buffer: GPUBuffer;
8
- }
9
- interface Uniform {
10
- usableAsUniform: true;
11
- }
12
- declare const Uniform: Uniform;
13
- interface Storage {
14
- usableAsStorage: true;
15
- }
16
- declare const Storage: Storage;
17
- interface Vertex {
18
- usableAsVertex: true;
19
- }
20
- declare const Vertex: Vertex;
21
- type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
22
- interface TgpuBuffer<TData extends AnyTgpuData> extends TgpuAllocatable<TData>, TgpuNamable {
23
- readonly destroyed: boolean;
24
- readonly label: string | undefined;
25
- $usage<T extends (Uniform | Storage | Vertex)[]>(...usages: T): this & UnionToIntersection<T[number]>;
26
- $addFlags(flags: GPUBufferUsageFlags): this;
27
- $device(device: GPUDevice): this & Unmanaged;
28
- destroy(): void;
29
- }
30
- declare function buffer<TData extends AnyTgpuData>(typeSchema: TData, initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined): TgpuBuffer<TData>;
31
- declare function buffer<TData extends AnyTgpuData>(typeSchema: TData, gpuBuffer: GPUBuffer): TgpuBuffer<TData>;
32
- declare function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Uniform;
33
- declare function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Storage;
34
- declare function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(buffer: T): buffer is T & Vertex;
35
-
36
- declare function write<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData> & Unmanaged, data: Parsed<TData>): void;
37
- declare function read<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData> & Unmanaged): Promise<Parsed<TData>>;
5
+ /**
6
+ * @param typeSchema The type of data that this buffer will hold.
7
+ * @param initial The initial value of the buffer. (optional)
8
+ */
9
+ declare function createBuffer<TData extends AnyTgpuData>(typeSchema: TData, initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined): TgpuBuffer<TData>;
10
+ /**
11
+ * @param typeSchema The type of data that this buffer will hold.
12
+ * @param gpuBuffer A vanilla WebGPU buffer.
13
+ */
14
+ declare function createBuffer<TData extends AnyTgpuData>(typeSchema: TData, gpuBuffer: GPUBuffer): TgpuBuffer<TData>;
38
15
 
39
- declare const tgpu_Storage: typeof Storage;
40
- declare const tgpu_Uniform: typeof Uniform;
41
- declare const tgpu_Vertex: typeof Vertex;
42
- declare const tgpu_read: typeof read;
43
- declare const tgpu_write: typeof write;
44
- declare namespace tgpu {
45
- export { tgpu_Storage as Storage, tgpu_Uniform as Uniform, tgpu_Vertex as Vertex, buffer as createBuffer, tgpu_read as read, tgpu_write as write };
46
- }
16
+ declare function write<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData>, data: Parsed<TData>): void;
17
+ declare function read<TData extends AnyTgpuData>(buffer: TgpuBuffer<TData>): Promise<Parsed<TData>>;
47
18
 
48
19
  /**
49
20
  * @category Errors
@@ -53,20 +24,29 @@ declare class RecursiveDataTypeError extends Error {
53
24
  }
54
25
 
55
26
  declare const std: {
56
- add: <T extends vecBase>(lhs: T, rhs: T) => T;
57
- sub: <T extends vecBase>(lhs: T, rhs: T) => T;
27
+ add<T extends vecBase>(lhs: T, rhs: T): T;
28
+ sub<T extends vecBase>(lhs: T, rhs: T): T;
58
29
  mul: <T extends vecBase>(s: number, v: T) => T;
59
- dot: <T extends vecBase>(lhs: T, rhs: T) => number;
30
+ dot<T extends vecBase>(lhs: T, rhs: T): number;
60
31
  normalize: <T extends vecBase>(v: T) => T;
61
- cross: <T extends vec3f | vec3i | vec3u>(a: T, b: T) => T;
62
- fract: (a: number) => number;
63
- length: <T extends vecBase>(vector: T) => number;
64
- sin: (x: number) => number;
65
- cos: (x: number) => number;
32
+ cross<T extends vec3f | vec3i | vec3u>(a: T, b: T): T;
33
+ fract(a: number): number;
34
+ length<T extends vecBase>(vector: T): number;
35
+ sin(radians: number): number;
36
+ cos(radians: number): number;
66
37
  };
67
38
 
68
39
  /**
69
40
  * @module typegpu
70
41
  */
71
42
 
72
- export { AnyTgpuData, RecursiveDataTypeError, type TgpuBuffer, type Unmanaged, tgpu as default, isUsableAsStorage, isUsableAsUniform, isUsableAsVertex, std, tgpu };
43
+ declare const tgpu: {
44
+ Uniform: Uniform;
45
+ Storage: Storage;
46
+ Vertex: Vertex;
47
+ createBuffer: typeof createBuffer;
48
+ read: typeof read;
49
+ write: typeof write;
50
+ };
51
+
52
+ export { AnyTgpuData, RecursiveDataTypeError, TgpuBuffer, tgpu as default, std, tgpu };
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as M,b as a,e as b,f as V,g as E,j as y,k as p,l as T,m as u,n as i,o as s,p as g,q as m,r as l}from"./chunk-34O2K2PT.js";var z={};M(z,{Storage:()=>B,Uniform:()=>D,Vertex:()=>w,createBuffer:()=>_,read:()=>R,write:()=>G});import{BufferWriter as k}from"typed-binary";var D={usableAsUniform:!0},B={usableAsStorage:!0},w={usableAsVertex:!0};function _(e,t){return new A(e,t)}function $(e){return!!e.usableAsUniform}function F(e){return!!e.usableAsStorage}function K(e){return!!e.usableAsVertex}var A=class{constructor(t,r){this.dataType=t;this.initialOrBuffer=r;a(this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);a(this,"_device",null);a(this,"_buffer",null);a(this,"_destroyed",!1);a(this,"_label");a(this,"initial");a(this,"usableAsUniform",!1);a(this,"usableAsStorage",!1);a(this,"usableAsVertex",!1);b(r)?this._buffer=r:this.initial=r}get label(){return this._label}get buffer(){if(!this._device)throw new Error("To use this property, make the buffer unmanaged by passing a GPUDevice to $device");if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let t=new k(this._buffer.getMappedRange());this.dataType.write(t,this.initial),this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer has not been assigned a device. Use .$device(device) to assign a device");return this._device}get destroyed(){return this._destroyed}$name(t){return this._label=t,this}$usage(...t){for(let r of t)this.flags|=r===D?GPUBufferUsage.UNIFORM:0,this.flags|=r===B?GPUBufferUsage.STORAGE:0,this.flags|=r===w?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r===D,this.usableAsStorage=this.usableAsStorage||r===B,this.usableAsVertex=this.usableAsVertex||r===w;return this}$addFlags(t){return this.flags|=t,this}$device(t){return this._device=t,this}destroy(){var t;this._destroyed||(this._destroyed=!0,(t=this._buffer)==null||t.destroy())}toString(){var t;return`buffer:${(t=this._label)!=null?t:"<unnamed>"}`}};import{BufferReader as P,BufferWriter as S}from"typed-binary";function G(e,t){let r=e.buffer,c=e.device;if(r.mapState==="mapped"){let x=r.getMappedRange();e.dataType.write(new S(x),t);return}let v=V(e.dataType.size,e.dataType.byteAlignment),U=new ArrayBuffer(v);e.dataType.write(new S(U),t),c.queue.writeBuffer(r,0,U,0,v)}async function R(e){let t=e.buffer,r=e.device;if(t.mapState==="mapped"){let x=t.getMappedRange();return e.dataType.read(new P(x))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let x=t.getMappedRange(),h=e.dataType.read(new P(x));return t.unmap(),h}let c=r.createBuffer({size:e.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),v=r.createCommandEncoder();v.copyBufferToBuffer(t,0,c,0,e.dataType.size),r.queue.submit([v.finish()]),await r.queue.onSubmittedWorkDone(),await c.mapAsync(GPUMapMode.READ,0,e.dataType.size);let U=e.dataType.read(new P(c.getMappedRange()));return c.unmap(),c.destroy(),U}var f=e=>Math.sqrt(e.x**2+e.y**2),o=e=>Math.sqrt(e.x**2+e.y**2+e.z**2),d=e=>Math.sqrt(e.x**2+e.y**2+e.z**2+e.w**2),n={length:{vec2f:f,vec2i:f,vec2u:f,vec3f:o,vec3i:o,vec3u:o,vec4f:d,vec4i:d,vec4u:d},add:{vec2f:(e,t)=>y(e.x+t.x,e.y+t.y),vec2i:(e,t)=>p(e.x+t.x,e.y+t.y),vec2u:(e,t)=>T(e.x+t.x,e.y+t.y),vec3f:(e,t)=>u(e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>i(e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>s(e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>g(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>m(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>l(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>y(e.x-t.x,e.y-t.y),vec2i:(e,t)=>p(e.x-t.x,e.y-t.y),vec2u:(e,t)=>T(e.x-t.x,e.y-t.y),vec3f:(e,t)=>u(e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>i(e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>s(e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>g(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>m(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>l(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>y(e*t.x,e*t.y),vec2i:(e,t)=>p(e*t.x,e*t.y),vec2u:(e,t)=>T(e*t.x,e*t.y),vec3f:(e,t)=>u(e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>i(e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>s(e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>g(e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>m(e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>l(e*t.x,e*t.y,e*t.z,e*t.w)},dot:{vec2f:(e,t)=>e.x*t.x+e.y*t.y,vec2i:(e,t)=>e.x*t.x+e.y*t.y,vec2u:(e,t)=>e.x*t.x+e.y*t.y,vec3f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec4f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},normalize:{vec2f:e=>{let t=f(e);return y(e.x/t,e.y/t)},vec2i:e=>{let t=f(e);return p(e.x/t,e.y/t)},vec2u:e=>{let t=f(e);return T(e.x/t,e.y/t)},vec3f:e=>{let t=o(e);return u(e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=o(e);return i(e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=o(e);return s(e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=d(e);return g(e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=d(e);return m(e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=d(e);return l(e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>u(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3i:(e,t)=>i(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3u:(e,t)=>s(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}};var q={add:(e,t)=>n.add[e.kind](e,t),sub:(e,t)=>n.sub[e.kind](e,t),mul:(e,t)=>n.mul[t.kind](e,t),dot:(e,t)=>n.dot[e.kind](e,t),normalize:e=>n.normalize[e.kind](e),cross:(e,t)=>n.cross[e.kind](e,t),fract:e=>e-Math.floor(e),length:e=>n.length[e.kind](e),sin:Math.sin,cos:Math.cos};var ee=z;export{E as RecursiveDataTypeError,ee as default,F as isUsableAsStorage,$ as isUsableAsUniform,K as isUsableAsVertex,q as std,z as tgpu};
1
+ import{a as n,f as _,g as $,h as x,i as v,j as l,k as o,l as p,m as d,n as g,o as P,p as w}from"./chunk-2FWG5LPQ.js";import{BufferReader as B,BufferWriter as U}from"typed-binary";var N=Symbol("This plum's value is sourced from outside the runtime.");function V(e){return e.__brand==="TgpuPlum"}var b={usableAsUniform:!0},D={usableAsStorage:!0},z={usableAsVertex:!0};function k(e,t,r){return new h(e,t,r)}function G(e){return e.resourceType==="buffer"}function M(e){return!!e.usableAsUniform}function C(e){return!!e.usableAsStorage}function I(e){return!!e.usableAsVertex}var h=class{constructor(t,r,u){this._group=t;this.dataType=r;this.initialOrBuffer=u;n(this,"resourceType","buffer");n(this,"flags",GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC);n(this,"_device",null);n(this,"_buffer",null);n(this,"_destroyed",!1);n(this,"_subscription",null);n(this,"_label");n(this,"initial");n(this,"usableAsUniform",!1);n(this,"usableAsStorage",!1);n(this,"usableAsVertex",!1);_(u)?this._buffer=u:this.initial=u}get label(){return this._label}get buffer(){if(!this._device)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");if(this._destroyed)throw new Error("This buffer has been destroyed");if(!this._buffer&&(this._buffer=this._device.createBuffer({size:this.dataType.size,usage:this.flags,mappedAtCreation:!!this.initial}),this.initial)){let t=new U(this._buffer.getMappedRange());if(V(this.initial)){let r=this._group;if(!r)throw new Error("Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.");let u=this.initial;this.dataType.write(t,r.readPlum(u)),this._subscription=r.onPlumChange(u,()=>{this.write(r.readPlum(u))})}else this.dataType.write(t,this.initial);this._buffer.unmap()}return this._buffer}get device(){if(!this._device)throw new Error("This buffer has not been assigned a device. Use .$device(device) to assign a device");return this._device}get destroyed(){return this._destroyed}$name(t){return this._label=t,this}$usage(...t){for(let r of t)this.flags|=r===b?GPUBufferUsage.UNIFORM:0,this.flags|=r===D?GPUBufferUsage.STORAGE:0,this.flags|=r===z?GPUBufferUsage.VERTEX:0,this.usableAsUniform=this.usableAsUniform||r===b,this.usableAsStorage=this.usableAsStorage||r===D,this.usableAsVertex=this.usableAsVertex||r===z;return this}$addFlags(t){return this.flags|=t,this}$device(t){return this._device=t,this}write(t){let r=this.buffer,u=this.device;if(r.mapState==="mapped"){let i=r.getMappedRange();if(G(t))throw new Error("Cannot copy to a mapped buffer.");this.dataType.write(new U(i),t);return}let c=this.dataType.size;if(G(t)){let i=t.buffer;if(this._group)this._group.commandEncoder.copyBufferToBuffer(i,0,r,0,c);else{let f=u.createCommandEncoder();f.copyBufferToBuffer(i,0,r,0,c),u.queue.submit([f.finish()])}}else{this._group&&this._group.flush();let i=new ArrayBuffer(c);this.dataType.write(new U(i),t),u.queue.writeBuffer(r,0,i,0,c)}}async read(){this._group&&this._group.flush();let t=this.buffer,r=this.device;if(t.mapState==="mapped"){let f=t.getMappedRange();return this.dataType.read(new B(f))}if(t.usage&GPUBufferUsage.MAP_READ){await t.mapAsync(GPUMapMode.READ);let f=t.getMappedRange(),A=this.dataType.read(new B(f));return t.unmap(),A}let u=r.createBuffer({size:this.dataType.size,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),c=r.createCommandEncoder();c.copyBufferToBuffer(t,0,u,0,this.dataType.size),r.queue.submit([c.finish()]),await r.queue.onSubmittedWorkDone(),await u.mapAsync(GPUMapMode.READ,0,this.dataType.size);let i=this.dataType.read(new B(u.getMappedRange()));return u.unmap(),u.destroy(),i}destroy(){var t;this._destroyed||(this._destroyed=!0,this._subscription&&this._subscription(),(t=this._buffer)==null||t.destroy())}toString(){var t;return`buffer:${(t=this._label)!=null?t:"<unnamed>"}`}};function S(e,t){return k(void 0,e,t)}function E(e,t){e.write(t)}async function R(e){return e.read()}var T=e=>Math.sqrt(e.x**2+e.y**2),y=e=>Math.sqrt(e.x**2+e.y**2+e.z**2),m=e=>Math.sqrt(e.x**2+e.y**2+e.z**2+e.w**2),s={length:{vec2f:T,vec2i:T,vec2u:T,vec3f:y,vec3i:y,vec3u:y,vec4f:m,vec4i:m,vec4u:m},add:{vec2f:(e,t)=>x(e.x+t.x,e.y+t.y),vec2i:(e,t)=>v(e.x+t.x,e.y+t.y),vec2u:(e,t)=>l(e.x+t.x,e.y+t.y),vec3f:(e,t)=>o(e.x+t.x,e.y+t.y,e.z+t.z),vec3i:(e,t)=>p(e.x+t.x,e.y+t.y,e.z+t.z),vec3u:(e,t)=>d(e.x+t.x,e.y+t.y,e.z+t.z),vec4f:(e,t)=>g(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4i:(e,t)=>P(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w),vec4u:(e,t)=>w(e.x+t.x,e.y+t.y,e.z+t.z,e.w+t.w)},sub:{vec2f:(e,t)=>x(e.x-t.x,e.y-t.y),vec2i:(e,t)=>v(e.x-t.x,e.y-t.y),vec2u:(e,t)=>l(e.x-t.x,e.y-t.y),vec3f:(e,t)=>o(e.x-t.x,e.y-t.y,e.z-t.z),vec3i:(e,t)=>p(e.x-t.x,e.y-t.y,e.z-t.z),vec3u:(e,t)=>d(e.x-t.x,e.y-t.y,e.z-t.z),vec4f:(e,t)=>g(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4i:(e,t)=>P(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w),vec4u:(e,t)=>w(e.x-t.x,e.y-t.y,e.z-t.z,e.w-t.w)},mul:{vec2f:(e,t)=>x(e*t.x,e*t.y),vec2i:(e,t)=>v(e*t.x,e*t.y),vec2u:(e,t)=>l(e*t.x,e*t.y),vec3f:(e,t)=>o(e*t.x,e*t.y,e*t.z),vec3i:(e,t)=>p(e*t.x,e*t.y,e*t.z),vec3u:(e,t)=>d(e*t.x,e*t.y,e*t.z),vec4f:(e,t)=>g(e*t.x,e*t.y,e*t.z,e*t.w),vec4i:(e,t)=>P(e*t.x,e*t.y,e*t.z,e*t.w),vec4u:(e,t)=>w(e*t.x,e*t.y,e*t.z,e*t.w)},dot:{vec2f:(e,t)=>e.x*t.x+e.y*t.y,vec2i:(e,t)=>e.x*t.x+e.y*t.y,vec2u:(e,t)=>e.x*t.x+e.y*t.y,vec3f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec3u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z,vec4f:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4i:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w,vec4u:(e,t)=>e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w},normalize:{vec2f:e=>{let t=T(e);return x(e.x/t,e.y/t)},vec2i:e=>{let t=T(e);return v(e.x/t,e.y/t)},vec2u:e=>{let t=T(e);return l(e.x/t,e.y/t)},vec3f:e=>{let t=y(e);return o(e.x/t,e.y/t,e.z/t)},vec3i:e=>{let t=y(e);return p(e.x/t,e.y/t,e.z/t)},vec3u:e=>{let t=y(e);return d(e.x/t,e.y/t,e.z/t)},vec4f:e=>{let t=m(e);return g(e.x/t,e.y/t,e.z/t,e.w/t)},vec4i:e=>{let t=m(e);return P(e.x/t,e.y/t,e.z/t,e.w/t)},vec4u:e=>{let t=m(e);return w(e.x/t,e.y/t,e.z/t,e.w/t)}},cross:{vec3f:(e,t)=>o(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3i:(e,t)=>p(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x),vec3u:(e,t)=>d(e.y*t.z-e.z*t.y,e.z*t.x-e.x*t.z,e.x*t.y-e.y*t.x)}};var q=0;var a=()=>q>0;var K={add(e,t){return a()?`(${e} + ${t})`:s.add[e.kind](e,t)},sub(e,t){return a()?`(${e} - ${t})`:s.sub[e.kind](e,t)},mul:(e,t)=>a()?`(${e} * ${t})`:s.mul[t.kind](e,t),dot(e,t){return a()?`dot(${e}, ${t})`:s.dot[e.kind](e,t)},normalize:e=>a()?`normalize(${e})`:s.normalize[e.kind](e),cross(e,t){return a()?`cross(${e}, ${t})`:s.cross[e.kind](e,t)},fract(e){return a()?`fract(${e})`:e-Math.floor(e)},length(e){return a()?`length(${e})`:s.length[e.kind](e)},sin(e){return a()?`sin(${e})`:Math.sin(e)},cos(e){return a()?`cos(${e})`:Math.cos(e)}};var F={Uniform:b,Storage:D,Vertex:z,createBuffer:S,read:R,write:E},ce=F;export{$ as RecursiveDataTypeError,ce as default,C as isUsableAsStorage,M as isUsableAsUniform,I as isUsableAsVertex,K as std,F as tgpu};
2
2
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tgpu.ts","../src/wgslBuffer.ts","../src/tgpuBufferUtils.ts","../src/data/vectorOps.ts","../src/std.ts","../src/index.ts"],"sourcesContent":["export {\n buffer as createBuffer,\n Uniform,\n Storage,\n Vertex,\n} from './wgslBuffer';\nexport { read, write } from './tgpuBufferUtils';\n","import { BufferWriter, type Parsed } from 'typed-binary';\nimport {\n type AnyTgpuData,\n type TgpuAllocatable,\n type TgpuNamable,\n isGPUBuffer,\n} from './types';\nimport type { TgpuPlum } from './wgslPlum';\n\n// ----------\n// Public API\n// ----------\n\nexport interface Unmanaged {\n readonly device: GPUDevice;\n readonly buffer: GPUBuffer;\n}\n\nexport interface Uniform {\n usableAsUniform: true;\n}\n\nexport interface Storage {\n usableAsStorage: true;\n}\n\nexport interface Vertex {\n usableAsVertex: true;\n}\n\nexport const Uniform = { usableAsUniform: true } as Uniform;\nexport const Storage = { usableAsStorage: true } as Storage;\nexport const Vertex = { usableAsVertex: true } as Vertex;\n\ntype UnionToIntersection<U> =\n // biome-ignore lint/suspicious/noExplicitAny: <had to be done>\n (U extends any ? (x: U) => void : never) extends (x: infer I) => void\n ? I\n : never;\n\nexport interface TgpuBuffer<TData extends AnyTgpuData>\n extends TgpuAllocatable<TData>,\n TgpuNamable {\n readonly destroyed: boolean;\n readonly label: string | undefined;\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]>;\n $addFlags(flags: GPUBufferUsageFlags): this;\n $device(device: GPUDevice): this & Unmanaged;\n\n destroy(): void;\n}\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined,\n): TgpuBuffer<TData>;\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n gpuBuffer: GPUBuffer,\n): TgpuBuffer<TData>;\n\nexport function buffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initialOrBuffer?: Parsed<TData> | TgpuPlum<Parsed<TData>> | GPUBuffer,\n): TgpuBuffer<TData> {\n return new TgpuBufferImpl(typeSchema, initialOrBuffer);\n}\n\nexport function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Uniform {\n return !!(buffer as unknown as Uniform).usableAsUniform;\n}\n\nexport function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Storage {\n return !!(buffer as unknown as Storage).usableAsStorage;\n}\n\nexport function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Vertex {\n return !!(buffer as unknown as Vertex).usableAsVertex;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuBufferImpl<TData extends AnyTgpuData> implements TgpuBuffer<TData> {\n public flags: GPUBufferUsageFlags =\n GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n private _device: GPUDevice | null = null;\n private _buffer: GPUBuffer | null = null;\n private _destroyed = false;\n\n private _label: string | undefined;\n readonly initial: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n\n public usableAsUniform = false;\n public usableAsStorage = false;\n public usableAsVertex = false;\n\n constructor(\n public readonly dataType: TData,\n public readonly initialOrBuffer?:\n | Parsed<TData>\n | TgpuPlum<Parsed<TData>>\n | GPUBuffer\n | undefined,\n ) {\n if (isGPUBuffer(initialOrBuffer)) {\n this._buffer = initialOrBuffer;\n } else {\n this.initial = initialOrBuffer;\n }\n }\n\n get label() {\n return this._label;\n }\n\n get buffer() {\n if (!this._device) {\n throw new Error(\n 'To use this property, make the buffer unmanaged by passing a GPUDevice to $device',\n );\n }\n if (this._destroyed) {\n throw new Error('This buffer has been destroyed');\n }\n if (!this._buffer) {\n this._buffer = this._device.createBuffer({\n size: this.dataType.size,\n usage: this.flags,\n mappedAtCreation: !!this.initial,\n });\n if (this.initial) {\n const writer = new BufferWriter(this._buffer.getMappedRange());\n this.dataType.write(writer, this.initial);\n this._buffer.unmap();\n }\n }\n return this._buffer;\n }\n\n get device() {\n if (!this._device) {\n throw new Error(\n 'This buffer has not been assigned a device. Use .$device(device) to assign a device',\n );\n }\n return this._device;\n }\n\n get destroyed() {\n return this._destroyed;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]> {\n for (const usage of usages) {\n this.flags |= usage === Uniform ? GPUBufferUsage.UNIFORM : 0;\n this.flags |= usage === Storage ? GPUBufferUsage.STORAGE : 0;\n this.flags |= usage === Vertex ? GPUBufferUsage.VERTEX : 0;\n this.usableAsUniform = this.usableAsUniform || usage === Uniform;\n this.usableAsStorage = this.usableAsStorage || usage === Storage;\n this.usableAsVertex = this.usableAsVertex || usage === Vertex;\n }\n return this as this & UnionToIntersection<T[number]>;\n }\n\n // Temporary solution\n $addFlags(flags: GPUBufferUsageFlags) {\n this.flags |= flags;\n return this;\n }\n\n $device(device: GPUDevice) {\n this._device = device;\n return this;\n }\n\n destroy() {\n if (this._destroyed) {\n return;\n }\n this._destroyed = true;\n this._buffer?.destroy();\n }\n\n toString(): string {\n return `buffer:${this._label ?? '<unnamed>'}`;\n }\n}\n","import { BufferReader, BufferWriter, type Parsed } from 'typed-binary';\nimport { roundUp } from './mathUtils';\nimport type { AnyTgpuData } from './types';\nimport type { TgpuBuffer, Unmanaged } from './wgslBuffer';\n\nexport function write<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n data: Parsed<TData>,\n): void {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n buffer.dataType.write(new BufferWriter(mapped), data);\n return;\n }\n\n const size = roundUp(buffer.dataType.size, buffer.dataType.byteAlignment);\n const hostBuffer = new ArrayBuffer(size);\n buffer.dataType.write(new BufferWriter(hostBuffer), data);\n device.queue.writeBuffer(gpuBuffer, 0, hostBuffer, 0, size);\n}\n\nexport async function read<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData> & Unmanaged,\n): Promise<Parsed<TData>> {\n const gpuBuffer = buffer.buffer;\n const device = buffer.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n return res;\n }\n\n if (gpuBuffer.usage & GPUBufferUsage.MAP_READ) {\n await gpuBuffer.mapAsync(GPUMapMode.READ);\n const mapped = gpuBuffer.getMappedRange();\n const res = buffer.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n gpuBuffer.unmap();\n return res;\n }\n\n const stagingBuffer = device.createBuffer({\n size: buffer.dataType.size,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(\n gpuBuffer,\n 0,\n stagingBuffer,\n 0,\n buffer.dataType.size,\n );\n\n device.queue.submit([commandEncoder.finish()]);\n await device.queue.onSubmittedWorkDone();\n await stagingBuffer.mapAsync(GPUMapMode.READ, 0, buffer.dataType.size);\n\n const res = buffer.dataType.read(\n new BufferReader(stagingBuffer.getMappedRange()),\n ) as Parsed<TData>;\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return res;\n}\n","import {\n type VecKind,\n vec2f,\n vec2i,\n vec2u,\n vec3f,\n vec3i,\n vec3u,\n vec4f,\n vec4i,\n vec4u,\n type vecBase,\n} from './vector';\n\nconst lengthVec2 = (v: vec2f | vec2i | vec2u) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: vec3f | vec3i | vec3u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: vec4f | vec4i | vec4u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nexport const VectorOps = {\n length: {\n vec2f: lengthVec2,\n vec2i: lengthVec2,\n vec2u: lengthVec2,\n vec3f: lengthVec3,\n vec3i: lengthVec3,\n vec3u: lengthVec3,\n vec4f: lengthVec4,\n vec4i: lengthVec4,\n vec4u: lengthVec4,\n } as Record<VecKind, (v: vecBase) => number>,\n\n add: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n mul: {\n vec2f: (s: number, v: vec2f) => vec2f(s * v.x, s * v.y),\n vec2i: (s: number, v: vec2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: vec2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: vec3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: vec3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: vec3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: vec4f) => vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: vec4i) => vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: vec4u) => vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n } as Record<VecKind, <T extends vecBase>(s: number, v: T) => T>,\n\n dot: {\n vec2f: (lhs: vec2f, rhs: vec2f) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2i: (lhs: vec2i, rhs: vec2i) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2u: (lhs: vec2u, rhs: vec2u) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec3f: (lhs: vec3f, rhs: vec3f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3i: (lhs: vec3i, rhs: vec3i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3u: (lhs: vec3u, rhs: vec3u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec4f: (lhs: vec4f, rhs: vec4f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4i: (lhs: vec4i, rhs: vec4i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4u: (lhs: vec4u, rhs: vec4u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: vec2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2i: (v: vec2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: vec2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: vec3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: vec3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: vec3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: vec4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: vec4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: vec4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vecBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: vec3f, b: vec3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3i: (a: vec3i, b: vec3i) => {\n return vec3i(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3u: (a: vec3u, b: vec3u) => {\n return vec3u(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3i' | 'vec3u',\n <T extends vec3f | vec3i | vec3u>(a: T, b: T) => T\n >,\n};\n","import type { vec3f, vec3i, vec3u, vecBase } from './data';\nimport { VectorOps } from './data/vectorOps';\n\nexport const std = {\n add: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n sub: <T extends vecBase>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n mul: <T extends vecBase>(s: number, v: T): T => VectorOps.mul[v.kind](s, v),\n dot: <T extends vecBase>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n normalize: <T extends vecBase>(v: T): T => VectorOps.normalize[v.kind](v),\n cross: <T extends vec3f | vec3i | vec3u>(a: T, b: T): T =>\n VectorOps.cross[a.kind](a, b),\n fract: (a: number): number => a - Math.floor(a),\n length: <T extends vecBase>(vector: T): number =>\n VectorOps.length[vector.kind](vector),\n sin: Math.sin,\n cos: Math.cos,\n};\n","/**\n * @module typegpu\n */\n\nexport * as tgpu from './tgpu';\nimport * as tgpu from './tgpu';\nexport default tgpu;\n\nexport { RecursiveDataTypeError } from './errors';\nexport {\n TgpuData,\n AnyTgpuData,\n TexelFormat,\n} from './types';\nexport { std } from './std';\nexport {\n isUsableAsStorage,\n isUsableAsUniform,\n isUsableAsVertex,\n} from './wgslBuffer';\n\nexport type {\n TgpuBuffer,\n Unmanaged,\n} from './wgslBuffer';\n"],"mappings":"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","names":["tgpu_exports","__export","Storage","Uniform","Vertex","buffer","read","write","BufferWriter","Uniform","Storage","Vertex","buffer","typeSchema","initialOrBuffer","TgpuBufferImpl","isUsableAsUniform","isUsableAsStorage","isUsableAsVertex","dataType","__publicField","isGPUBuffer","writer","BufferWriter","label","usages","usage","flags","device","_a","BufferReader","BufferWriter","write","buffer","data","gpuBuffer","device","mapped","BufferWriter","size","roundUp","hostBuffer","read","BufferReader","res","stagingBuffer","commandEncoder","lengthVec2","v","lengthVec3","lengthVec4","VectorOps","a","b","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","s","lhs","rhs","len","std","lhs","rhs","VectorOps","s","v","a","b","vector","src_default","tgpu_exports"]}
1
+ {"version":3,"sources":["../src/tgpuBuffer.ts","../src/tgpuPlumTypes.ts","../src/legacyBufferApi.ts","../src/tgpuBufferUtils.ts","../src/data/vectorOps.ts","../src/gpuMode.ts","../src/std.ts","../src/index.ts"],"sourcesContent":["import { BufferReader, BufferWriter, type Parsed } from 'typed-binary';\nimport type { TgpuNamable } from './namable';\nimport { type TgpuPlum, type Unsubscribe, isPlum } from './tgpuPlumTypes';\nimport type { TgpuRuntime } from './tgpuRuntime';\nimport { type AnyTgpuData, isGPUBuffer } from './types';\n\n// ----------\n// Public API\n// ----------\n\nexport interface Uniform {\n usableAsUniform: true;\n}\n\nexport interface Storage {\n usableAsStorage: true;\n}\n\nexport interface Vertex {\n usableAsVertex: true;\n}\n\nexport const Uniform = { usableAsUniform: true } as Uniform;\nexport const Storage = { usableAsStorage: true } as Storage;\nexport const Vertex = { usableAsVertex: true } as Vertex;\n\ntype UnionToIntersection<U> =\n // biome-ignore lint/suspicious/noExplicitAny: <had to be done>\n (U extends any ? (x: U) => void : never) extends (x: infer I) => void\n ? I\n : never;\n\nexport interface TgpuBuffer<TData extends AnyTgpuData> extends TgpuNamable {\n readonly resourceType: 'buffer';\n readonly dataType: TData;\n readonly initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n readonly label: string | undefined;\n\n readonly buffer: GPUBuffer;\n readonly device: GPUDevice;\n readonly destroyed: boolean;\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]>;\n $addFlags(flags: GPUBufferUsageFlags): this;\n $device(device: GPUDevice): this;\n\n write(data: Parsed<TData> | TgpuBuffer<TData>): void;\n read(): Promise<Parsed<TData>>;\n destroy(): void;\n}\n\nexport function createBufferImpl<TData extends AnyTgpuData>(\n group: TgpuRuntime | undefined,\n typeSchema: TData,\n initialOrBuffer?: Parsed<TData> | TgpuPlum<Parsed<TData>> | GPUBuffer,\n): TgpuBuffer<TData> {\n return new TgpuBufferImpl(group, typeSchema, initialOrBuffer);\n}\n\nexport function isBuffer<T extends TgpuBuffer<AnyTgpuData>>(\n value: T | unknown,\n): value is T {\n return (value as TgpuBuffer<AnyTgpuData>).resourceType === 'buffer';\n}\n\nexport function isUsableAsUniform<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Uniform {\n return !!(buffer as unknown as Uniform).usableAsUniform;\n}\n\nexport function isUsableAsStorage<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Storage {\n return !!(buffer as unknown as Storage).usableAsStorage;\n}\n\nexport function isUsableAsVertex<T extends TgpuBuffer<AnyTgpuData>>(\n buffer: T,\n): buffer is T & Vertex {\n return !!(buffer as unknown as Vertex).usableAsVertex;\n}\n\n// --------------\n// Implementation\n// --------------\n\nclass TgpuBufferImpl<TData extends AnyTgpuData> implements TgpuBuffer<TData> {\n public readonly resourceType = 'buffer';\n public flags: GPUBufferUsageFlags =\n GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\n private _device: GPUDevice | null = null;\n private _buffer: GPUBuffer | null = null;\n private _destroyed = false;\n private _subscription: Unsubscribe | null = null;\n\n private _label: string | undefined;\n readonly initial: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined;\n\n public usableAsUniform = false;\n public usableAsStorage = false;\n public usableAsVertex = false;\n\n constructor(\n private readonly _group: TgpuRuntime | undefined,\n public readonly dataType: TData,\n public readonly initialOrBuffer?:\n | Parsed<TData>\n | TgpuPlum<Parsed<TData>>\n | GPUBuffer\n | undefined,\n ) {\n if (isGPUBuffer(initialOrBuffer)) {\n this._buffer = initialOrBuffer;\n } else {\n this.initial = initialOrBuffer;\n }\n }\n\n get label() {\n return this._label;\n }\n\n get buffer() {\n if (!this._device) {\n throw new Error(\n 'Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.',\n );\n }\n\n if (this._destroyed) {\n throw new Error('This buffer has been destroyed');\n }\n\n if (!this._buffer) {\n this._buffer = this._device.createBuffer({\n size: this.dataType.size,\n usage: this.flags,\n mappedAtCreation: !!this.initial,\n });\n\n if (this.initial) {\n const writer = new BufferWriter(this._buffer.getMappedRange());\n\n if (isPlum(this.initial)) {\n const group = this._group;\n\n if (!group) {\n throw new Error(\n 'Create this buffer using `root.createBuffer` instead of `tgpu.createBuffer`.',\n );\n }\n\n const plum = this.initial;\n\n this.dataType.write(writer, group.readPlum(plum));\n\n this._subscription = group.onPlumChange(plum, () => {\n this.write(group.readPlum(plum));\n });\n } else {\n this.dataType.write(writer, this.initial);\n }\n\n this._buffer.unmap();\n }\n }\n\n return this._buffer;\n }\n\n get device() {\n if (!this._device) {\n throw new Error(\n 'This buffer has not been assigned a device. Use .$device(device) to assign a device',\n );\n }\n return this._device;\n }\n\n get destroyed() {\n return this._destroyed;\n }\n\n $name(label: string) {\n this._label = label;\n return this;\n }\n\n $usage<T extends (Uniform | Storage | Vertex)[]>(\n ...usages: T\n ): this & UnionToIntersection<T[number]> {\n for (const usage of usages) {\n this.flags |= usage === Uniform ? GPUBufferUsage.UNIFORM : 0;\n this.flags |= usage === Storage ? GPUBufferUsage.STORAGE : 0;\n this.flags |= usage === Vertex ? GPUBufferUsage.VERTEX : 0;\n this.usableAsUniform = this.usableAsUniform || usage === Uniform;\n this.usableAsStorage = this.usableAsStorage || usage === Storage;\n this.usableAsVertex = this.usableAsVertex || usage === Vertex;\n }\n return this as this & UnionToIntersection<T[number]>;\n }\n\n // Temporary solution\n $addFlags(flags: GPUBufferUsageFlags) {\n this.flags |= flags;\n return this;\n }\n\n $device(device: GPUDevice) {\n this._device = device;\n return this;\n }\n\n write(dataOrBuffer: Parsed<TData> | TgpuBuffer<TData>): void {\n const gpuBuffer = this.buffer;\n const device = this.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n if (isBuffer(dataOrBuffer)) {\n throw new Error('Cannot copy to a mapped buffer.');\n }\n this.dataType.write(new BufferWriter(mapped), dataOrBuffer);\n return;\n }\n\n const size = this.dataType.size;\n if (isBuffer(dataOrBuffer)) {\n const sourceBuffer = dataOrBuffer.buffer;\n\n if (this._group) {\n const encoder = this._group.commandEncoder;\n encoder.copyBufferToBuffer(sourceBuffer, 0, gpuBuffer, 0, size);\n } else {\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(sourceBuffer, 0, gpuBuffer, 0, size);\n device.queue.submit([commandEncoder.finish()]);\n }\n } else {\n if (this._group) {\n // Flushing any commands yet to be encoded.\n this._group.flush();\n }\n\n const hostBuffer = new ArrayBuffer(size);\n this.dataType.write(new BufferWriter(hostBuffer), dataOrBuffer);\n device.queue.writeBuffer(gpuBuffer, 0, hostBuffer, 0, size);\n }\n }\n\n async read(): Promise<Parsed<TData>> {\n if (this._group) {\n // Flushing any commands yet to be encoded.\n this._group.flush();\n }\n\n const gpuBuffer = this.buffer;\n const device = this.device;\n\n if (gpuBuffer.mapState === 'mapped') {\n const mapped = gpuBuffer.getMappedRange();\n const res = this.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n return res;\n }\n\n if (gpuBuffer.usage & GPUBufferUsage.MAP_READ) {\n await gpuBuffer.mapAsync(GPUMapMode.READ);\n const mapped = gpuBuffer.getMappedRange();\n const res = this.dataType.read(new BufferReader(mapped)) as Parsed<TData>;\n gpuBuffer.unmap();\n return res;\n }\n\n const stagingBuffer = device.createBuffer({\n size: this.dataType.size,\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,\n });\n\n const commandEncoder = device.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(\n gpuBuffer,\n 0,\n stagingBuffer,\n 0,\n this.dataType.size,\n );\n\n device.queue.submit([commandEncoder.finish()]);\n await device.queue.onSubmittedWorkDone();\n await stagingBuffer.mapAsync(GPUMapMode.READ, 0, this.dataType.size);\n\n const res = this.dataType.read(\n new BufferReader(stagingBuffer.getMappedRange()),\n ) as Parsed<TData>;\n\n stagingBuffer.unmap();\n stagingBuffer.destroy();\n\n return res;\n }\n\n destroy() {\n if (this._destroyed) {\n return;\n }\n this._destroyed = true;\n if (this._subscription) {\n this._subscription();\n }\n this._buffer?.destroy();\n }\n\n toString(): string {\n return `buffer:${this._label ?? '<unnamed>'}`;\n }\n}\n","import type { TgpuNamable } from './namable';\n\nexport type Getter = <T>(plum: TgpuPlum<T>) => T;\nexport type Unsubscribe = () => unknown;\nexport type ExtractPlumValue<T> = T extends TgpuPlum<infer TValue>\n ? TValue\n : never;\n\nexport interface TgpuPlum<TValue = unknown> extends TgpuNamable {\n readonly __brand: 'TgpuPlum';\n\n /**\n * Computes the value of this plum. Circumvents the store\n * memoization, so use with care.\n */\n compute(get: Getter): TValue;\n}\n\nexport const TgpuExternalPlumTrait = Symbol(\n `This plum's value is sourced from outside the runtime.`,\n);\n\nexport interface TgpuExternalPlum {\n readonly [TgpuExternalPlumTrait]: true;\n\n readonly version: number;\n subscribe(listener: () => unknown): Unsubscribe;\n}\n\nexport function isExternalPlum(\n value: unknown | TgpuExternalPlum,\n): value is TgpuExternalPlum {\n return (value as TgpuExternalPlum)[TgpuExternalPlumTrait] === true;\n}\n\nexport function isPlum<T>(value: TgpuPlum<T> | unknown): value is TgpuPlum<T> {\n return (value as TgpuPlum).__brand === 'TgpuPlum';\n}\n","import type { Parsed } from 'typed-binary';\nimport { type TgpuBuffer, createBufferImpl } from './tgpuBuffer';\nimport type { TgpuPlum } from './tgpuPlumTypes';\nimport type { AnyTgpuData } from './types';\n\n// * -deprecated Use the `root.createBuffer` API instead, accessible through `await tgpu.init()`.\n\n/**\n * @param typeSchema The type of data that this buffer will hold.\n * @param initial The initial value of the buffer. (optional)\n */\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initial?: Parsed<TData> | TgpuPlum<Parsed<TData>> | undefined,\n): TgpuBuffer<TData>;\n\n/**\n * @param typeSchema The type of data that this buffer will hold.\n * @param gpuBuffer A vanilla WebGPU buffer.\n */\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n gpuBuffer: GPUBuffer,\n): TgpuBuffer<TData>;\n\nexport function createBuffer<TData extends AnyTgpuData>(\n typeSchema: TData,\n initialOrBuffer?: Parsed<TData> | TgpuPlum<Parsed<TData>> | GPUBuffer,\n): TgpuBuffer<TData> {\n return createBufferImpl(undefined, typeSchema, initialOrBuffer);\n}\n","import type { Parsed } from 'typed-binary';\nimport type { TgpuBuffer } from './tgpuBuffer';\nimport type { AnyTgpuData } from './types';\n\nexport function write<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData>,\n data: Parsed<TData>,\n): void {\n buffer.write(data);\n}\n\nexport async function read<TData extends AnyTgpuData>(\n buffer: TgpuBuffer<TData>,\n): Promise<Parsed<TData>> {\n return buffer.read();\n}\n","import {\n type VecKind,\n vec2f,\n vec2i,\n vec2u,\n vec3f,\n vec3i,\n vec3u,\n vec4f,\n vec4i,\n vec4u,\n type vecBase,\n} from './vector';\n\nconst lengthVec2 = (v: vec2f | vec2i | vec2u) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: vec3f | vec3i | vec3u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: vec4f | vec4i | vec4u) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nexport const VectorOps = {\n length: {\n vec2f: lengthVec2,\n vec2i: lengthVec2,\n vec2u: lengthVec2,\n vec3f: lengthVec3,\n vec3i: lengthVec3,\n vec3u: lengthVec3,\n vec4f: lengthVec4,\n vec4i: lengthVec4,\n vec4u: lengthVec4,\n } as Record<VecKind, (v: vecBase) => number>,\n\n add: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: vec2f, b: vec2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2i: (a: vec2i, b: vec2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: vec2u, b: vec2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: vec3f, b: vec3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: vec3i, b: vec3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: vec3u, b: vec3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: vec4f, b: vec4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: vec4i, b: vec4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: vec4u, b: vec4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => T>,\n\n mul: {\n vec2f: (s: number, v: vec2f) => vec2f(s * v.x, s * v.y),\n vec2i: (s: number, v: vec2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: vec2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: vec3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: vec3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: vec3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: vec4f) => vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: vec4i) => vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: vec4u) => vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n } as Record<VecKind, <T extends vecBase>(s: number, v: T) => T>,\n\n dot: {\n vec2f: (lhs: vec2f, rhs: vec2f) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2i: (lhs: vec2i, rhs: vec2i) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec2u: (lhs: vec2u, rhs: vec2u) => lhs.x * rhs.x + lhs.y * rhs.y,\n vec3f: (lhs: vec3f, rhs: vec3f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3i: (lhs: vec3i, rhs: vec3i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec3u: (lhs: vec3u, rhs: vec3u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z,\n vec4f: (lhs: vec4f, rhs: vec4f) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4i: (lhs: vec4i, rhs: vec4i) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n vec4u: (lhs: vec4u, rhs: vec4u) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w,\n } as Record<VecKind, <T extends vecBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: vec2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2i: (v: vec2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: vec2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: vec3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: vec3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: vec3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: vec4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: vec4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: vec4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vecBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: vec3f, b: vec3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3i: (a: vec3i, b: vec3i) => {\n return vec3i(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3u: (a: vec3u, b: vec3u) => {\n return vec3u(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3i' | 'vec3u',\n <T extends vec3f | vec3i | vec3u>(a: T, b: T) => T\n >,\n};\n","let gpuDepth = 0;\n\nexport function onGPU<T>(callback: () => T): T {\n gpuDepth++;\n try {\n return callback();\n } finally {\n gpuDepth--;\n }\n}\n\nexport const inGPUMode = () => gpuDepth > 0;\n","import type { vec3f, vec3i, vec3u, vecBase } from './data';\nimport { VectorOps } from './data/vectorOps';\nimport { inGPUMode } from './gpuMode';\n\nexport const std = {\n add<T extends vecBase>(lhs: T, rhs: T): T {\n if (inGPUMode()) {\n return `(${lhs} + ${rhs})` as unknown as T;\n }\n return VectorOps.add[lhs.kind](lhs, rhs);\n },\n sub<T extends vecBase>(lhs: T, rhs: T): T {\n if (inGPUMode()) {\n return `(${lhs} - ${rhs})` as unknown as T;\n }\n return VectorOps.sub[lhs.kind](lhs, rhs);\n },\n mul: <T extends vecBase>(s: number, v: T): T => {\n if (inGPUMode()) {\n return `(${s} * ${v})` as unknown as T;\n }\n return VectorOps.mul[v.kind](s, v);\n },\n dot<T extends vecBase>(lhs: T, rhs: T): number {\n if (inGPUMode()) {\n return `dot(${lhs}, ${rhs})` as unknown as number;\n }\n return VectorOps.dot[lhs.kind](lhs, rhs);\n },\n normalize: <T extends vecBase>(v: T): T => {\n if (inGPUMode()) {\n return `normalize(${v})` as unknown as T;\n }\n return VectorOps.normalize[v.kind](v);\n },\n cross<T extends vec3f | vec3i | vec3u>(a: T, b: T): T {\n if (inGPUMode()) {\n return `cross(${a}, ${b})` as unknown as T;\n }\n return VectorOps.cross[a.kind](a, b);\n },\n fract(a: number): number {\n if (inGPUMode()) {\n return `fract(${a})` as unknown as number;\n }\n return a - Math.floor(a);\n },\n length<T extends vecBase>(vector: T): number {\n if (inGPUMode()) {\n return `length(${vector})` as unknown as number;\n }\n return VectorOps.length[vector.kind](vector);\n },\n sin(radians: number): number {\n if (inGPUMode()) {\n return `sin(${radians})` as unknown as number;\n }\n return Math.sin(radians);\n },\n cos(radians: number): number {\n if (inGPUMode()) {\n return `cos(${radians})` as unknown as number;\n }\n return Math.cos(radians);\n },\n};\n","/**\n * @module typegpu\n */\n\nimport { createBuffer } from './legacyBufferApi';\nimport { Storage, Uniform, Vertex } from './tgpuBuffer';\nimport { read, write } from './tgpuBufferUtils';\n\nexport const tgpu = {\n Uniform,\n Storage,\n Vertex,\n\n createBuffer,\n\n read,\n write,\n};\nexport default tgpu;\n\nexport { RecursiveDataTypeError } from './errors';\nexport {\n TgpuData,\n AnyTgpuData,\n} from './types';\nexport { std } from './std';\nexport {\n isUsableAsStorage,\n isUsableAsUniform,\n isUsableAsVertex,\n} from './tgpuBuffer';\n\nexport type { TgpuBuffer } from './tgpuBuffer';\n"],"mappings":"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","names":["BufferReader","BufferWriter","TgpuExternalPlumTrait","isPlum","value","Uniform","Storage","Vertex","createBufferImpl","group","typeSchema","initialOrBuffer","TgpuBufferImpl","isBuffer","value","isUsableAsUniform","buffer","isUsableAsStorage","isUsableAsVertex","_group","dataType","__publicField","isGPUBuffer","writer","BufferWriter","isPlum","plum","label","usages","usage","flags","device","dataOrBuffer","gpuBuffer","mapped","size","sourceBuffer","commandEncoder","hostBuffer","BufferReader","res","stagingBuffer","_a","createBuffer","typeSchema","initialOrBuffer","createBufferImpl","write","buffer","data","read","lengthVec2","v","lengthVec3","lengthVec4","VectorOps","a","b","vec2f","vec2i","vec2u","vec3f","vec3i","vec3u","vec4f","vec4i","vec4u","s","lhs","rhs","len","gpuDepth","inGPUMode","gpuDepth","std","lhs","rhs","inGPUMode","VectorOps","s","v","a","b","vector","radians","tgpu","Uniform","Storage","Vertex","createBuffer","read","write","src_default"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typegpu",
3
3
  "private": false,
4
- "version": "0.1.1",
4
+ "version": "0.1.3",
5
5
  "description": "A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -38,6 +38,12 @@
38
38
  "module": "./experimental/index.js",
39
39
  "import": "./experimental/index.js",
40
40
  "default": "./experimental/index.cjs"
41
+ },
42
+ "./smol": {
43
+ "types": "./smol/index.d.ts",
44
+ "module": "./smol/index.js",
45
+ "import": "./smol/index.js",
46
+ "default": "./smol/index.cjs"
41
47
  }
42
48
  },
43
49
  "sideEffects": false,
@@ -61,12 +67,7 @@
61
67
  "bugs": {
62
68
  "url": "https://github.com/software-mansion/TypeGPU/issues"
63
69
  },
64
- "homepage": "https://docs.swmansion.com/TypeGPU",
65
- "devDependencies": {
66
- "@webgpu/types": "^0.1.43",
67
- "typescript": "^5.3.3",
68
- "tsup": "^8.0.2"
69
- },
70
+ "homepage": "https://typegpu.com",
70
71
  "packageManager": "pnpm@8.15.8+sha256.691fe176eea9a8a80df20e4976f3dfb44a04841ceb885638fe2a26174f81e65e",
71
72
  "dependencies": {
72
73
  "typed-binary": "^4.0.1"