@simulatte/webgpu 0.2.4 → 0.3.1

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.
Files changed (36) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +263 -71
  3. package/api-contract.md +70 -139
  4. package/assets/package-layers.svg +63 -0
  5. package/examples/direct-webgpu/compute-dispatch.js +66 -0
  6. package/examples/direct-webgpu/explicit-bind-group.js +85 -0
  7. package/examples/direct-webgpu/request-device.js +10 -0
  8. package/examples/doe-api/buffers-readback.js +9 -0
  9. package/examples/doe-api/compile-and-dispatch.js +30 -0
  10. package/examples/doe-api/compute-dispatch.js +25 -0
  11. package/examples/doe-routines/compute-once-like-input.js +36 -0
  12. package/examples/doe-routines/compute-once-matmul.js +53 -0
  13. package/examples/doe-routines/compute-once-multiple-inputs.js +27 -0
  14. package/examples/doe-routines/compute-once.js +23 -0
  15. package/headless-webgpu-comparison.md +2 -2
  16. package/layering-plan.md +1 -1
  17. package/native/doe_napi.c +102 -12
  18. package/package.json +2 -1
  19. package/prebuilds/darwin-arm64/doe_napi.node +0 -0
  20. package/prebuilds/darwin-arm64/libwebgpu_doe.dylib +0 -0
  21. package/prebuilds/darwin-arm64/metadata.json +6 -6
  22. package/prebuilds/linux-x64/doe_napi.node +0 -0
  23. package/prebuilds/linux-x64/libwebgpu_doe.so +0 -0
  24. package/prebuilds/linux-x64/metadata.json +5 -5
  25. package/scripts/generate-readme-assets.js +79 -6
  26. package/scripts/prebuild.js +23 -19
  27. package/src/auto_bind_group_layout.js +32 -0
  28. package/src/bun-ffi.js +93 -12
  29. package/src/bun.js +23 -2
  30. package/src/compute.d.ts +2 -1
  31. package/src/compute.js +671 -33
  32. package/src/doe.d.ts +127 -27
  33. package/src/doe.js +480 -114
  34. package/src/full.d.ts +8 -1
  35. package/src/full.js +28 -3
  36. package/src/index.js +1013 -38
package/src/doe.d.ts CHANGED
@@ -2,15 +2,12 @@ export type DoeBufferUsage =
2
2
  | "upload"
3
3
  | "readback"
4
4
  | "uniform"
5
- | "storage-read"
6
- | "storage-readwrite";
5
+ | "storageRead"
6
+ | "storageReadWrite";
7
7
 
8
- export type DoeWorkgroups = number | [number, number, number];
8
+ export type DoeWorkgroups = number | [number, number] | [number, number, number];
9
9
 
10
- export type DoeBindingAccess =
11
- | "uniform"
12
- | "storage-read"
13
- | "storage-readwrite";
10
+ export type DoeBindingAccess = "uniform" | "storageRead" | "storageReadWrite";
14
11
 
15
12
  export interface DoeCreateBufferOptions {
16
13
  size: number;
@@ -30,11 +27,51 @@ export interface DoeReadBufferOptions {
30
27
  label?: string;
31
28
  }
32
29
 
30
+ export interface DoeCreateBufferLikeOptions extends Omit<
31
+ DoeCreateBufferOptions,
32
+ "size"
33
+ > {
34
+ size?: number;
35
+ }
36
+
33
37
  export interface DoeBindingBuffer<TBuffer> {
34
38
  buffer: TBuffer;
35
39
  access?: DoeBindingAccess;
36
40
  }
37
41
 
42
+ export interface DoeComputeInputDataOptions {
43
+ data: ArrayBufferView | ArrayBuffer;
44
+ usage?: DoeBufferUsage | DoeBufferUsage[];
45
+ access?: DoeBindingAccess;
46
+ label?: string;
47
+ }
48
+
49
+ export type DoeComputeInput<TBuffer> =
50
+ | ArrayBufferView
51
+ | ArrayBuffer
52
+ | TBuffer
53
+ | DoeBindingBuffer<TBuffer>
54
+ | DoeComputeInputDataOptions;
55
+
56
+ export interface DoeComputeOnceOutputOptions<T extends ArrayBufferView> {
57
+ type: { new (buffer: ArrayBuffer): T };
58
+ size?: number;
59
+ likeInput?: number;
60
+ usage?: DoeBufferUsage | DoeBufferUsage[];
61
+ access?: DoeBindingAccess;
62
+ label?: string;
63
+ read?: DoeReadBufferOptions;
64
+ }
65
+
66
+ export interface DoeComputeOnceOptions<TBuffer, T extends ArrayBufferView> {
67
+ code: string;
68
+ entryPoint?: string;
69
+ inputs?: Array<DoeComputeInput<TBuffer>>;
70
+ output: DoeComputeOnceOutputOptions<T>;
71
+ workgroups: DoeWorkgroups;
72
+ label?: string;
73
+ }
74
+
38
75
  export interface DoeRunComputeOptions<TBuffer> {
39
76
  code: string;
40
77
  entryPoint?: string;
@@ -49,36 +86,99 @@ export interface DoeKernelDispatchOptions<TBuffer> {
49
86
  label?: string;
50
87
  }
51
88
 
52
- export interface BoundDoeNamespace<TDevice, TBuffer, TKernel, TRunComputeOptions> {
53
- readonly device: TDevice;
54
- createBuffer(options: DoeCreateBufferOptions): TBuffer;
55
- createBufferFromData<T extends ArrayBufferView>(
89
+ export interface BoundDoeBuffersNamespace<TBuffer> {
90
+ create(options: DoeCreateBufferOptions): TBuffer;
91
+ fromData<T extends ArrayBufferView>(
56
92
  data: T | ArrayBuffer,
57
- options?: DoeCreateBufferFromDataOptions
93
+ options?: DoeCreateBufferFromDataOptions,
94
+ ): TBuffer;
95
+ like(
96
+ source: TBuffer | ArrayBufferView | ArrayBuffer,
97
+ options?: DoeCreateBufferLikeOptions,
58
98
  ): TBuffer;
59
- readBuffer<T extends ArrayBufferView>(
99
+ read<T extends ArrayBufferView>(
60
100
  buffer: TBuffer,
61
- type: { new(buffer: ArrayBuffer): T },
62
- options?: DoeReadBufferOptions
101
+ type: { new (buffer: ArrayBuffer): T },
102
+ options?: DoeReadBufferOptions,
63
103
  ): Promise<T>;
64
- runCompute(options: TRunComputeOptions): Promise<void>;
65
- compileCompute(options: TRunComputeOptions): TKernel;
66
104
  }
67
105
 
68
- export interface DoeNamespace<TDevice, TBuffer, TKernel, TBoundDoe, TRunComputeOptions> {
69
- bind(device: TDevice): TBoundDoe;
70
- createBuffer(device: TDevice, options: DoeCreateBufferOptions): TBuffer;
71
- createBufferFromData<T extends ArrayBufferView>(
106
+ export interface DoeBuffersNamespace<TDevice, TBuffer> {
107
+ create(device: TDevice, options: DoeCreateBufferOptions): TBuffer;
108
+ fromData<T extends ArrayBufferView>(
72
109
  device: TDevice,
73
110
  data: T | ArrayBuffer,
74
- options?: DoeCreateBufferFromDataOptions
111
+ options?: DoeCreateBufferFromDataOptions,
112
+ ): TBuffer;
113
+ like(
114
+ device: TDevice,
115
+ source: TBuffer | ArrayBufferView | ArrayBuffer,
116
+ options?: DoeCreateBufferLikeOptions,
75
117
  ): TBuffer;
76
- readBuffer<T extends ArrayBufferView>(
118
+ read<T extends ArrayBufferView>(
77
119
  device: TDevice,
78
120
  buffer: TBuffer,
79
- type: { new(buffer: ArrayBuffer): T },
80
- options?: DoeReadBufferOptions
121
+ type: { new (buffer: ArrayBuffer): T },
122
+ options?: DoeReadBufferOptions,
81
123
  ): Promise<T>;
82
- runCompute(device: TDevice, options: TRunComputeOptions): Promise<void>;
83
- compileCompute(device: TDevice, options: TRunComputeOptions): TKernel;
124
+ }
125
+
126
+ export interface BoundDoeComputeNamespace<
127
+ TBuffer,
128
+ TKernel,
129
+ TRunComputeOptions,
130
+ > {
131
+ run(options: TRunComputeOptions): Promise<void>;
132
+ compile(options: TRunComputeOptions): TKernel;
133
+ once<T extends ArrayBufferView>(
134
+ options: DoeComputeOnceOptions<TBuffer, T>,
135
+ ): Promise<T>;
136
+ }
137
+
138
+ export interface DoeComputeNamespace<
139
+ TDevice,
140
+ TBuffer,
141
+ TKernel,
142
+ TRunComputeOptions,
143
+ > {
144
+ run(device: TDevice, options: TRunComputeOptions): Promise<void>;
145
+ compile(device: TDevice, options: TRunComputeOptions): TKernel;
146
+ once<T extends ArrayBufferView>(
147
+ device: TDevice,
148
+ options: DoeComputeOnceOptions<TBuffer, T>,
149
+ ): Promise<T>;
150
+ }
151
+
152
+ export interface BoundDoeNamespace<
153
+ TDevice,
154
+ TBuffer,
155
+ TKernel,
156
+ TRunComputeOptions,
157
+ > {
158
+ readonly device: TDevice;
159
+ readonly buffers: BoundDoeBuffersNamespace<TBuffer>;
160
+ readonly compute: BoundDoeComputeNamespace<
161
+ TBuffer,
162
+ TKernel,
163
+ TRunComputeOptions
164
+ >;
165
+ }
166
+
167
+ export interface DoeNamespace<
168
+ TDevice,
169
+ TBuffer,
170
+ TKernel,
171
+ TBoundDoe,
172
+ TRunComputeOptions,
173
+ TRequestDeviceOptions = unknown,
174
+ > {
175
+ requestDevice(options?: TRequestDeviceOptions): Promise<TBoundDoe>;
176
+ bind(device: TDevice): TBoundDoe;
177
+ readonly buffers: DoeBuffersNamespace<TDevice, TBuffer>;
178
+ readonly compute: DoeComputeNamespace<
179
+ TDevice,
180
+ TBuffer,
181
+ TKernel,
182
+ TRunComputeOptions
183
+ >;
84
184
  }