@simulatte/webgpu 0.2.3 → 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 +47 -4
- package/README.md +273 -235
- package/api-contract.md +163 -0
- package/assets/fawn-icon-main-256.png +0 -0
- package/assets/package-layers.svg +63 -0
- package/assets/package-surface-cube-snapshot.svg +7 -7
- package/{COMPAT_SCOPE.md → compat-scope.md} +1 -1
- 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 → layering-plan.md} +10 -8
- package/native/doe_napi.c +102 -12
- package/package.json +26 -9
- 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 +81 -8
- 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 +162 -0
- package/src/compute.js +915 -0
- package/src/doe.d.ts +184 -0
- package/src/doe.js +641 -0
- package/src/full.d.ts +119 -0
- package/src/full.js +35 -0
- package/src/index.js +1013 -38
- package/src/node-runtime.js +2 -2
- package/src/node.js +2 -2
- package/{SUPPORT_CONTRACTS.md → support-contracts.md} +27 -41
- package/{ZIG_SOURCE_INVENTORY.md → zig-source-inventory.md} +2 -2
- package/API_CONTRACT.md +0 -182
package/src/doe.d.ts
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
export type DoeBufferUsage =
|
|
2
|
+
| "upload"
|
|
3
|
+
| "readback"
|
|
4
|
+
| "uniform"
|
|
5
|
+
| "storageRead"
|
|
6
|
+
| "storageReadWrite";
|
|
7
|
+
|
|
8
|
+
export type DoeWorkgroups = number | [number, number] | [number, number, number];
|
|
9
|
+
|
|
10
|
+
export type DoeBindingAccess = "uniform" | "storageRead" | "storageReadWrite";
|
|
11
|
+
|
|
12
|
+
export interface DoeCreateBufferOptions {
|
|
13
|
+
size: number;
|
|
14
|
+
usage: DoeBufferUsage | DoeBufferUsage[] | number;
|
|
15
|
+
label?: string;
|
|
16
|
+
mappedAtCreation?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface DoeCreateBufferFromDataOptions {
|
|
20
|
+
usage?: DoeBufferUsage | DoeBufferUsage[] | number;
|
|
21
|
+
label?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface DoeReadBufferOptions {
|
|
25
|
+
size?: number;
|
|
26
|
+
offset?: number;
|
|
27
|
+
label?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface DoeCreateBufferLikeOptions extends Omit<
|
|
31
|
+
DoeCreateBufferOptions,
|
|
32
|
+
"size"
|
|
33
|
+
> {
|
|
34
|
+
size?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface DoeBindingBuffer<TBuffer> {
|
|
38
|
+
buffer: TBuffer;
|
|
39
|
+
access?: DoeBindingAccess;
|
|
40
|
+
}
|
|
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
|
+
|
|
75
|
+
export interface DoeRunComputeOptions<TBuffer> {
|
|
76
|
+
code: string;
|
|
77
|
+
entryPoint?: string;
|
|
78
|
+
bindings?: Array<TBuffer | DoeBindingBuffer<TBuffer>>;
|
|
79
|
+
workgroups: DoeWorkgroups;
|
|
80
|
+
label?: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface DoeKernelDispatchOptions<TBuffer> {
|
|
84
|
+
bindings?: Array<TBuffer | DoeBindingBuffer<TBuffer>>;
|
|
85
|
+
workgroups: DoeWorkgroups;
|
|
86
|
+
label?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface BoundDoeBuffersNamespace<TBuffer> {
|
|
90
|
+
create(options: DoeCreateBufferOptions): TBuffer;
|
|
91
|
+
fromData<T extends ArrayBufferView>(
|
|
92
|
+
data: T | ArrayBuffer,
|
|
93
|
+
options?: DoeCreateBufferFromDataOptions,
|
|
94
|
+
): TBuffer;
|
|
95
|
+
like(
|
|
96
|
+
source: TBuffer | ArrayBufferView | ArrayBuffer,
|
|
97
|
+
options?: DoeCreateBufferLikeOptions,
|
|
98
|
+
): TBuffer;
|
|
99
|
+
read<T extends ArrayBufferView>(
|
|
100
|
+
buffer: TBuffer,
|
|
101
|
+
type: { new (buffer: ArrayBuffer): T },
|
|
102
|
+
options?: DoeReadBufferOptions,
|
|
103
|
+
): Promise<T>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface DoeBuffersNamespace<TDevice, TBuffer> {
|
|
107
|
+
create(device: TDevice, options: DoeCreateBufferOptions): TBuffer;
|
|
108
|
+
fromData<T extends ArrayBufferView>(
|
|
109
|
+
device: TDevice,
|
|
110
|
+
data: T | ArrayBuffer,
|
|
111
|
+
options?: DoeCreateBufferFromDataOptions,
|
|
112
|
+
): TBuffer;
|
|
113
|
+
like(
|
|
114
|
+
device: TDevice,
|
|
115
|
+
source: TBuffer | ArrayBufferView | ArrayBuffer,
|
|
116
|
+
options?: DoeCreateBufferLikeOptions,
|
|
117
|
+
): TBuffer;
|
|
118
|
+
read<T extends ArrayBufferView>(
|
|
119
|
+
device: TDevice,
|
|
120
|
+
buffer: TBuffer,
|
|
121
|
+
type: { new (buffer: ArrayBuffer): T },
|
|
122
|
+
options?: DoeReadBufferOptions,
|
|
123
|
+
): Promise<T>;
|
|
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
|
+
>;
|
|
184
|
+
}
|