typegpu 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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"