@simulatte/webgpu 0.2.4 → 0.3.0
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/CHANGELOG.md +21 -0
- package/README.md +263 -71
- package/api-contract.md +70 -139
- package/assets/package-layers.svg +63 -0
- package/examples/direct-webgpu/compute-dispatch.js +66 -0
- package/examples/direct-webgpu/explicit-bind-group.js +85 -0
- package/examples/direct-webgpu/request-device.js +10 -0
- package/examples/doe-api/buffers-readback.js +9 -0
- package/examples/doe-api/compile-and-dispatch.js +30 -0
- package/examples/doe-api/compute-dispatch.js +25 -0
- package/examples/doe-routines/compute-once-like-input.js +36 -0
- package/examples/doe-routines/compute-once-matmul.js +53 -0
- package/examples/doe-routines/compute-once-multiple-inputs.js +27 -0
- package/examples/doe-routines/compute-once.js +23 -0
- package/headless-webgpu-comparison.md +2 -2
- package/layering-plan.md +1 -1
- package/native/doe_napi.c +102 -12
- package/package.json +2 -1
- package/prebuilds/darwin-arm64/doe_napi.node +0 -0
- package/prebuilds/darwin-arm64/libwebgpu_doe.dylib +0 -0
- package/prebuilds/darwin-arm64/metadata.json +6 -6
- package/prebuilds/linux-x64/doe_napi.node +0 -0
- package/prebuilds/linux-x64/libwebgpu_doe.so +0 -0
- package/prebuilds/linux-x64/metadata.json +5 -5
- package/scripts/generate-readme-assets.js +79 -6
- package/scripts/prebuild.js +23 -19
- package/src/auto_bind_group_layout.js +32 -0
- package/src/bun-ffi.js +93 -12
- package/src/bun.js +23 -2
- package/src/compute.d.ts +2 -1
- package/src/compute.js +671 -33
- package/src/doe.d.ts +127 -27
- package/src/doe.js +480 -114
- package/src/full.d.ts +8 -1
- package/src/full.js +28 -3
- 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
|
-
| "
|
|
6
|
-
| "
|
|
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
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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
|
}
|