@aardworx/wombat.rendering 0.1.0 → 0.2.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.
Files changed (185) hide show
  1. package/dist/commands/clear.d.ts +3 -0
  2. package/dist/commands/clear.d.ts.map +1 -0
  3. package/dist/commands/clear.js +69 -0
  4. package/dist/commands/clear.js.map +1 -0
  5. package/dist/commands/index.d.ts +3 -0
  6. package/dist/commands/index.d.ts.map +1 -0
  7. package/dist/commands/index.js +5 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/render.d.ts +16 -0
  10. package/dist/commands/render.d.ts.map +1 -0
  11. package/dist/commands/render.js +93 -0
  12. package/dist/commands/render.js.map +1 -0
  13. package/dist/core/acquire.d.ts +3 -0
  14. package/dist/core/acquire.d.ts.map +1 -0
  15. package/dist/core/acquire.js +22 -0
  16. package/dist/core/acquire.js.map +1 -0
  17. package/dist/core/adaptiveResource.d.ts +29 -0
  18. package/dist/core/adaptiveResource.d.ts.map +1 -0
  19. package/dist/core/adaptiveResource.js +73 -0
  20. package/dist/core/adaptiveResource.js.map +1 -0
  21. package/dist/core/buffer.d.ts +20 -0
  22. package/dist/core/buffer.d.ts.map +1 -0
  23. package/dist/core/buffer.js +30 -0
  24. package/dist/core/buffer.js.map +1 -0
  25. package/dist/core/bufferView.d.ts +15 -0
  26. package/dist/core/bufferView.d.ts.map +1 -0
  27. package/dist/core/bufferView.js +12 -0
  28. package/dist/core/bufferView.js.map +1 -0
  29. package/dist/core/clear.d.ts +9 -0
  30. package/dist/core/clear.d.ts.map +1 -0
  31. package/dist/core/clear.js +7 -0
  32. package/dist/core/clear.js.map +1 -0
  33. package/dist/core/command.d.ts +45 -0
  34. package/dist/core/command.d.ts.map +1 -0
  35. package/dist/core/command.js +12 -0
  36. package/dist/core/command.js.map +1 -0
  37. package/dist/core/drawCall.d.ts +17 -0
  38. package/dist/core/drawCall.d.ts.map +1 -0
  39. package/dist/core/drawCall.js +5 -0
  40. package/dist/core/drawCall.js.map +1 -0
  41. package/dist/core/framebuffer.d.ts +32 -0
  42. package/dist/core/framebuffer.d.ts.map +1 -0
  43. package/dist/core/framebuffer.js +6 -0
  44. package/dist/core/framebuffer.js.map +1 -0
  45. package/dist/core/framebufferSignature.d.ts +12 -0
  46. package/dist/core/framebufferSignature.d.ts.map +1 -0
  47. package/dist/core/framebufferSignature.js +7 -0
  48. package/dist/core/framebufferSignature.js.map +1 -0
  49. package/dist/core/index.d.ts +21 -0
  50. package/dist/core/index.d.ts.map +1 -0
  51. package/dist/core/index.js +14 -0
  52. package/dist/core/index.js.map +1 -0
  53. package/dist/core/pipelineState.d.ts +126 -0
  54. package/dist/core/pipelineState.d.ts.map +1 -0
  55. package/dist/core/pipelineState.js +88 -0
  56. package/dist/core/pipelineState.js.map +1 -0
  57. package/dist/core/renderContext.d.ts +8 -0
  58. package/dist/core/renderContext.d.ts.map +1 -0
  59. package/dist/core/renderContext.js +39 -0
  60. package/dist/core/renderContext.js.map +1 -0
  61. package/dist/core/renderObject.d.ts +45 -0
  62. package/dist/core/renderObject.d.ts.map +1 -0
  63. package/dist/core/renderObject.js +11 -0
  64. package/dist/core/renderObject.js.map +1 -0
  65. package/dist/core/renderTask.d.ts +12 -0
  66. package/dist/core/renderTask.d.ts.map +1 -0
  67. package/dist/core/renderTask.js +5 -0
  68. package/dist/core/renderTask.js.map +1 -0
  69. package/dist/core/renderTree.d.ts +35 -0
  70. package/dist/core/renderTree.d.ts.map +1 -0
  71. package/dist/core/renderTree.js +17 -0
  72. package/dist/core/renderTree.js.map +1 -0
  73. package/dist/core/sampler.d.ts +12 -0
  74. package/dist/core/sampler.d.ts.map +1 -0
  75. package/dist/core/sampler.js +8 -0
  76. package/dist/core/sampler.js.map +1 -0
  77. package/dist/core/shader.d.ts +3 -0
  78. package/dist/core/shader.d.ts.map +1 -0
  79. package/dist/core/shader.js +6 -0
  80. package/dist/core/shader.js.map +1 -0
  81. package/dist/core/texture.d.ts +34 -0
  82. package/dist/core/texture.d.ts.map +1 -0
  83. package/dist/core/texture.js +29 -0
  84. package/dist/core/texture.js.map +1 -0
  85. package/dist/index.d.ts +6 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +18 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/resources/adaptiveBuffer.d.ts +22 -0
  90. package/dist/resources/adaptiveBuffer.d.ts.map +1 -0
  91. package/dist/resources/adaptiveBuffer.js +99 -0
  92. package/dist/resources/adaptiveBuffer.js.map +1 -0
  93. package/dist/resources/adaptiveSampler.d.ts +4 -0
  94. package/dist/resources/adaptiveSampler.d.ts.map +1 -0
  95. package/dist/resources/adaptiveSampler.js +73 -0
  96. package/dist/resources/adaptiveSampler.js.map +1 -0
  97. package/dist/resources/adaptiveTexture.d.ts +14 -0
  98. package/dist/resources/adaptiveTexture.d.ts.map +1 -0
  99. package/dist/resources/adaptiveTexture.js +265 -0
  100. package/dist/resources/adaptiveTexture.js.map +1 -0
  101. package/dist/resources/framebuffer.d.ts +14 -0
  102. package/dist/resources/framebuffer.d.ts.map +1 -0
  103. package/dist/resources/framebuffer.js +144 -0
  104. package/dist/resources/framebuffer.js.map +1 -0
  105. package/dist/resources/framebufferSignature.d.ts +10 -0
  106. package/dist/resources/framebufferSignature.d.ts.map +1 -0
  107. package/dist/resources/framebufferSignature.js +22 -0
  108. package/dist/resources/framebufferSignature.js.map +1 -0
  109. package/dist/resources/index.d.ts +14 -0
  110. package/dist/resources/index.d.ts.map +1 -0
  111. package/dist/resources/index.js +24 -0
  112. package/dist/resources/index.js.map +1 -0
  113. package/dist/resources/mipGen.d.ts +17 -0
  114. package/dist/resources/mipGen.d.ts.map +1 -0
  115. package/dist/resources/mipGen.js +125 -0
  116. package/dist/resources/mipGen.js.map +1 -0
  117. package/dist/resources/preparedComputeShader.d.ts +104 -0
  118. package/dist/resources/preparedComputeShader.d.ts.map +1 -0
  119. package/dist/resources/preparedComputeShader.js +341 -0
  120. package/dist/resources/preparedComputeShader.js.map +1 -0
  121. package/dist/resources/preparedRenderObject.d.ts +93 -0
  122. package/dist/resources/preparedRenderObject.d.ts.map +1 -0
  123. package/dist/resources/preparedRenderObject.js +541 -0
  124. package/dist/resources/preparedRenderObject.js.map +1 -0
  125. package/dist/resources/renderPipeline.d.ts +27 -0
  126. package/dist/resources/renderPipeline.d.ts.map +1 -0
  127. package/dist/resources/renderPipeline.js +102 -0
  128. package/dist/resources/renderPipeline.js.map +1 -0
  129. package/dist/resources/shaderDiagnostics.d.ts +14 -0
  130. package/dist/resources/shaderDiagnostics.d.ts.map +1 -0
  131. package/dist/resources/shaderDiagnostics.js +40 -0
  132. package/dist/resources/shaderDiagnostics.js.map +1 -0
  133. package/dist/resources/sourceMapDecoder.d.ts +23 -0
  134. package/dist/resources/sourceMapDecoder.d.ts.map +1 -0
  135. package/dist/resources/sourceMapDecoder.js +116 -0
  136. package/dist/resources/sourceMapDecoder.js.map +1 -0
  137. package/dist/resources/uniformBuffer.d.ts +23 -0
  138. package/dist/resources/uniformBuffer.d.ts.map +1 -0
  139. package/dist/resources/uniformBuffer.js +149 -0
  140. package/dist/resources/uniformBuffer.js.map +1 -0
  141. package/dist/resources/webgpuFlags.d.ts +32 -0
  142. package/dist/resources/webgpuFlags.d.ts.map +1 -0
  143. package/dist/resources/webgpuFlags.js +40 -0
  144. package/dist/resources/webgpuFlags.js.map +1 -0
  145. package/dist/runtime/copy.d.ts +3 -0
  146. package/dist/runtime/copy.d.ts.map +1 -0
  147. package/dist/runtime/copy.js +12 -0
  148. package/dist/runtime/copy.js.map +1 -0
  149. package/dist/runtime/index.d.ts +6 -0
  150. package/dist/runtime/index.d.ts.map +1 -0
  151. package/dist/runtime/index.js +7 -0
  152. package/dist/runtime/index.js.map +1 -0
  153. package/dist/runtime/renderTask.d.ts +10 -0
  154. package/dist/runtime/renderTask.d.ts.map +1 -0
  155. package/dist/runtime/renderTask.js +119 -0
  156. package/dist/runtime/renderTask.js.map +1 -0
  157. package/dist/runtime/renderTo.d.ts +40 -0
  158. package/dist/runtime/renderTo.d.ts.map +1 -0
  159. package/dist/runtime/renderTo.js +97 -0
  160. package/dist/runtime/renderTo.js.map +1 -0
  161. package/dist/runtime/runtime.d.ts +48 -0
  162. package/dist/runtime/runtime.d.ts.map +1 -0
  163. package/dist/runtime/runtime.js +100 -0
  164. package/dist/runtime/runtime.js.map +1 -0
  165. package/dist/runtime/scenePass.d.ts +25 -0
  166. package/dist/runtime/scenePass.d.ts.map +1 -0
  167. package/dist/runtime/scenePass.js +255 -0
  168. package/dist/runtime/scenePass.js.map +1 -0
  169. package/dist/window/canvas.d.ts +38 -0
  170. package/dist/window/canvas.d.ts.map +1 -0
  171. package/dist/window/canvas.js +194 -0
  172. package/dist/window/canvas.js.map +1 -0
  173. package/dist/window/index.d.ts +3 -0
  174. package/dist/window/index.d.ts.map +1 -0
  175. package/dist/window/index.js +4 -0
  176. package/dist/window/index.js.map +1 -0
  177. package/dist/window/loop.d.ts +16 -0
  178. package/dist/window/loop.d.ts.map +1 -0
  179. package/dist/window/loop.js +43 -0
  180. package/dist/window/loop.js.map +1 -0
  181. package/package.json +1 -1
  182. package/src/core/index.ts +10 -1
  183. package/src/core/pipelineState.ts +178 -24
  184. package/src/resources/preparedRenderObject.ts +271 -85
  185. package/src/runtime/scenePass.ts +6 -1
@@ -0,0 +1,341 @@
1
+ // prepareComputeShader — turn a `ComputeShader` (single compute
2
+ // stage, peer of `Effect`) into an imperative dispatch surface.
3
+ //
4
+ // Mirrors Aardvark.GPGPU's `IComputeShader` + mutable
5
+ // `IComputeInputBinding` pattern: callers build a binding by name,
6
+ // `set` values/buffers/textures/samplers into it imperatively, then
7
+ // `dispatch` to encode + submit (or hand an encoder for batching).
8
+ //
9
+ // Unlike `prepareRenderObject`, none of the inputs are `aval<T>`. The
10
+ // binding owns its own mutable state; uniform writes are byte-poked
11
+ // into a staging `ArrayBuffer` and uploaded on dispatch.
12
+ //
13
+ // Supported binding kinds (from the program interface):
14
+ // - One uniform block per group: `setUniform(name, value)`.
15
+ // - Storage buffers: `setBuffer(name, GPUBuffer)`.
16
+ // - Sampled textures: `setTexture(name, GPUTextureView | GPUTexture)`.
17
+ // - Samplers: `setSampler(name, GPUSampler)`.
18
+ //
19
+ // Storage textures aren't covered here yet — separate gap.
20
+ import {} from "../core/index.js";
21
+ import { ShaderStage } from "./webgpuFlags.js";
22
+ import { installShaderDiagnostics } from "./shaderDiagnostics.js";
23
+ import { makePackedView, writeField } from "./uniformBuffer.js";
24
+ function storageAccessToGPU(a) {
25
+ switch (a) {
26
+ case "read": return "read-only";
27
+ case "write": return "write-only";
28
+ case "read_write": return "read-write";
29
+ }
30
+ }
31
+ function sampleTypeFor(type) {
32
+ if (type.kind === "Texture") {
33
+ if (type.comparison === true)
34
+ return "depth";
35
+ const s = type.sampled;
36
+ if (s.kind === "Int")
37
+ return s.signed ? "sint" : "uint";
38
+ return "float";
39
+ }
40
+ return "float";
41
+ }
42
+ function buildGroups(device, descs) {
43
+ const out = [];
44
+ for (let g = 0; g < descs.length; g++) {
45
+ const entries = (descs[g] ?? []).slice().sort((a, b) => a.binding - b.binding);
46
+ const layoutEntries = entries.map(e => {
47
+ const visibility = ShaderStage.COMPUTE;
48
+ switch (e.kind) {
49
+ case "ubuf": return { binding: e.binding, visibility, buffer: { type: "uniform" } };
50
+ case "sbuf": return {
51
+ binding: e.binding, visibility,
52
+ buffer: { type: e.access === "read_write" ? "storage" : "read-only-storage" },
53
+ };
54
+ case "tex": return { binding: e.binding, visibility, texture: { sampleType: e.sampleType } };
55
+ case "sampler": return { binding: e.binding, visibility, sampler: { type: "filtering" } };
56
+ case "stex": return { binding: e.binding, visibility, storageTexture: { access: e.access, format: e.format } };
57
+ }
58
+ });
59
+ const layout = device.createBindGroupLayout({ entries: layoutEntries });
60
+ out.push({ group: g, layout, entries });
61
+ }
62
+ return out;
63
+ }
64
+ export class ComputeInputBinding {
65
+ device;
66
+ groups;
67
+ iface;
68
+ label;
69
+ _ubos = new Map(); // ubo name → state
70
+ _ubosByBinding = new Map(); // "g:b" → state
71
+ _buffers = new Map(); // name → buffer
72
+ _textures = new Map(); // name → view
73
+ _samplers = new Map(); // name → sampler
74
+ _storageTextures = new Map(); // name → view (storage)
75
+ /** Names declared by the shader as storage textures (vs sampled). */
76
+ _storageTextureNames;
77
+ /** @internal — built by `PreparedComputeShader`. */
78
+ constructor(device, groups, iface, label) {
79
+ this.device = device;
80
+ this.groups = groups;
81
+ this.iface = iface;
82
+ this.label = label;
83
+ this._storageTextureNames = new Set(iface.samplers.filter(s => s.type.kind === "StorageTexture").map(s => s.name));
84
+ for (const ub of iface.uniformBlocks) {
85
+ const view = makePackedView(ub.size);
86
+ const fields = new Map(ub.fields.map(f => [f.name, { offset: f.offset, type: f.type }]));
87
+ const state = {
88
+ group: ub.group, binding: ub.slot, view, fields,
89
+ buffer: undefined, dirty: true,
90
+ };
91
+ this._ubos.set(ub.name, state);
92
+ this._ubosByBinding.set(`${ub.group}:${ub.slot}`, state);
93
+ }
94
+ }
95
+ /**
96
+ * Write a uniform value by name. Searches all uniform blocks; the
97
+ * first hit wins. Throws if the name isn't a uniform field.
98
+ * Accepted types: `number`, `Float32Array`/`Int32Array`/`Uint32Array`,
99
+ * any wombat.base packed value (`{ _data: TypedArray }`).
100
+ */
101
+ setUniform(name, value) {
102
+ for (const ub of this._ubos.values()) {
103
+ const f = ub.fields.get(name);
104
+ if (f === undefined)
105
+ continue;
106
+ writeField(ub.view, f.offset, value, f.type);
107
+ ub.dirty = true;
108
+ return this;
109
+ }
110
+ throw new Error(`ComputeInputBinding: no uniform field "${name}"`);
111
+ }
112
+ setBuffer(name, buffer) {
113
+ if (!this.iface.storageBuffers.some(s => s.name === name)) {
114
+ throw new Error(`ComputeInputBinding: no storage buffer "${name}"`);
115
+ }
116
+ this._buffers.set(name, buffer);
117
+ return this;
118
+ }
119
+ setTexture(name, source) {
120
+ if (!this.iface.textures.some(t => t.name === name)) {
121
+ throw new Error(`ComputeInputBinding: no texture "${name}"`);
122
+ }
123
+ const view = "createView" in source ? source.createView() : source;
124
+ this._textures.set(name, view);
125
+ return this;
126
+ }
127
+ /**
128
+ * Bind a storage-texture view (write/read/read_write per the
129
+ * shader declaration). `view` should reference a `GPUTexture`
130
+ * created with `STORAGE_BINDING` usage in the format the shader
131
+ * expects.
132
+ */
133
+ setStorageTexture(name, source) {
134
+ if (!this._storageTextureNames.has(name)) {
135
+ throw new Error(`ComputeInputBinding: no storage texture "${name}"`);
136
+ }
137
+ const view = "createView" in source ? source.createView() : source;
138
+ this._storageTextures.set(name, view);
139
+ return this;
140
+ }
141
+ setSampler(name, sampler) {
142
+ if (!this.iface.samplers.some(s => s.name === name)) {
143
+ throw new Error(`ComputeInputBinding: no sampler "${name}"`);
144
+ }
145
+ this._samplers.set(name, sampler);
146
+ return this;
147
+ }
148
+ /** @internal — flush dirty UBOs and build current bind groups. */
149
+ flushAndBuildBindGroups() {
150
+ for (const ub of this._ubos.values()) {
151
+ if (ub.buffer === undefined) {
152
+ ub.buffer = this.device.createBuffer({
153
+ size: ub.view.bytes.byteLength,
154
+ usage: 0x40 | 0x8, // UNIFORM | COPY_DST
155
+ ...(this.label !== undefined ? { label: `${this.label}.ubo` } : {}),
156
+ });
157
+ }
158
+ if (ub.dirty) {
159
+ this.device.queue.writeBuffer(ub.buffer, 0, ub.view.bytes);
160
+ ub.dirty = false;
161
+ }
162
+ }
163
+ const out = [];
164
+ for (const g of this.groups) {
165
+ const entries = g.entries.map(e => {
166
+ switch (e.kind) {
167
+ case "ubuf": {
168
+ const ub = this._ubosByBinding.get(`${g.group}:${e.binding}`);
169
+ if (!ub || ub.buffer === undefined) {
170
+ throw new Error(`ComputeInputBinding.dispatch: UBO at group=${g.group} binding=${e.binding} not initialised`);
171
+ }
172
+ return { binding: e.binding, resource: { buffer: ub.buffer } };
173
+ }
174
+ case "sbuf": {
175
+ const buf = this._buffers.get(e.name);
176
+ if (buf === undefined)
177
+ throw new Error(`ComputeInputBinding.dispatch: missing storage buffer "${e.name}"`);
178
+ return { binding: e.binding, resource: { buffer: buf } };
179
+ }
180
+ case "tex": {
181
+ const view = this._textures.get(e.name);
182
+ if (view === undefined)
183
+ throw new Error(`ComputeInputBinding.dispatch: missing texture "${e.name}"`);
184
+ return { binding: e.binding, resource: view };
185
+ }
186
+ case "sampler": {
187
+ const samp = this._samplers.get(e.name);
188
+ if (samp === undefined)
189
+ throw new Error(`ComputeInputBinding.dispatch: missing sampler "${e.name}"`);
190
+ return { binding: e.binding, resource: samp };
191
+ }
192
+ case "stex": {
193
+ const view = this._storageTextures.get(e.name);
194
+ if (view === undefined)
195
+ throw new Error(`ComputeInputBinding.dispatch: missing storage texture "${e.name}"`);
196
+ return { binding: e.binding, resource: view };
197
+ }
198
+ }
199
+ });
200
+ out.push(this.device.createBindGroup({ layout: g.layout, entries }));
201
+ }
202
+ return out;
203
+ }
204
+ /** Free the binding's owned UBO buffers. Storage buffers / textures / samplers are caller-owned. */
205
+ dispose() {
206
+ for (const ub of this._ubos.values()) {
207
+ if (ub.buffer !== undefined) {
208
+ ub.buffer.destroy();
209
+ ub.buffer = undefined;
210
+ }
211
+ ub.dirty = true;
212
+ }
213
+ }
214
+ }
215
+ export class PreparedComputeShader {
216
+ device;
217
+ pipeline;
218
+ interface_;
219
+ groups;
220
+ label;
221
+ /** @internal */
222
+ constructor(device, pipeline, interface_, groups, label) {
223
+ this.device = device;
224
+ this.pipeline = pipeline;
225
+ this.interface_ = interface_;
226
+ this.groups = groups;
227
+ this.label = label;
228
+ }
229
+ /** Same shape as Aardvark's `IComputeShader.Interface` — useful for tooling. */
230
+ get programInterface() { return this.interface_; }
231
+ /** Allocate a fresh, empty binding. */
232
+ createInputBinding() {
233
+ return new ComputeInputBinding(this.device, this.groups, this.interface_, this.label);
234
+ }
235
+ /**
236
+ * Encode `Bind + SetInput + Dispatch` into the supplied encoder.
237
+ * Use this when batching compute work alongside other GPU commands
238
+ * — caller submits.
239
+ */
240
+ encode(encoder, binding, groups) {
241
+ const bindGroups = binding.flushAndBuildBindGroups();
242
+ const pass = encoder.beginComputePass({
243
+ ...(this.label !== undefined ? { label: this.label } : {}),
244
+ });
245
+ pass.setPipeline(this.pipeline);
246
+ for (let i = 0; i < bindGroups.length; i++)
247
+ pass.setBindGroup(i, bindGroups[i]);
248
+ pass.dispatchWorkgroups(groups.x, groups.y, groups.z);
249
+ pass.end();
250
+ }
251
+ /**
252
+ * One-shot dispatch — builds an encoder, encodes, submits, awaits
253
+ * `queue.onSubmittedWorkDone()`. Aardvark's `IComputeShader.Invoke`
254
+ * shape.
255
+ */
256
+ async dispatch(binding, groups) {
257
+ const encoder = this.device.createCommandEncoder({
258
+ ...(this.label !== undefined ? { label: `${this.label}.dispatch` } : {}),
259
+ });
260
+ this.encode(encoder, binding, groups);
261
+ this.device.queue.submit([encoder.finish()]);
262
+ await this.device.queue.onSubmittedWorkDone();
263
+ }
264
+ }
265
+ const computeCaches = new WeakMap();
266
+ function cacheFor(device) {
267
+ let c = computeCaches.get(device);
268
+ if (c === undefined) {
269
+ c = { pipelines: new Map(), modules: new Map() };
270
+ computeCaches.set(device, c);
271
+ }
272
+ return c;
273
+ }
274
+ // ---------------------------------------------------------------------------
275
+ // prepareComputeShader
276
+ // ---------------------------------------------------------------------------
277
+ export function prepareComputeShader(device, shader, opts = {}) {
278
+ const compiled = shader.compile({ target: "wgsl" });
279
+ const csStage = compiled.stages.find(s => s.stage === "compute");
280
+ if (csStage === undefined) {
281
+ throw new Error("prepareComputeShader: ComputeShader compiled without a compute stage");
282
+ }
283
+ const iface = compiled.interface;
284
+ const maxGroup = Math.max(-1, ...iface.uniformBlocks.map(b => b.group), ...iface.samplers.map(b => b.group), ...iface.textures.map(b => b.group), ...iface.storageBuffers.map(b => b.group));
285
+ const perGroup = [];
286
+ for (let g = 0; g <= maxGroup; g++)
287
+ perGroup.push([]);
288
+ for (const ub of iface.uniformBlocks) {
289
+ perGroup[ub.group].push({ kind: "ubuf", binding: ub.slot, uniformBlock: ub });
290
+ }
291
+ for (const t of iface.textures) {
292
+ perGroup[t.group].push({ kind: "tex", binding: t.slot, name: t.name, sampleType: sampleTypeFor(t.type) });
293
+ }
294
+ for (const s of iface.samplers) {
295
+ if (s.type.kind === "StorageTexture") {
296
+ perGroup[s.group].push({
297
+ kind: "stex", binding: s.slot, name: s.name,
298
+ format: s.type.format,
299
+ access: storageAccessToGPU(s.type.access),
300
+ });
301
+ }
302
+ else {
303
+ perGroup[s.group].push({ kind: "sampler", binding: s.slot, name: s.name });
304
+ }
305
+ }
306
+ for (const sb of iface.storageBuffers) {
307
+ perGroup[sb.group].push({ kind: "sbuf", binding: sb.slot, name: sb.name, access: sb.access });
308
+ }
309
+ const groups = buildGroups(device, perGroup);
310
+ // Compile module + pipeline (cached per device by effect id).
311
+ const cache = cacheFor(device);
312
+ const moduleKey = csStage.source;
313
+ let module = cache.modules.get(moduleKey);
314
+ if (module === undefined) {
315
+ module = device.createShaderModule({
316
+ code: csStage.source,
317
+ ...(opts.label !== undefined ? { label: `${opts.label}.cs` } : {}),
318
+ });
319
+ cache.modules.set(moduleKey, module);
320
+ installShaderDiagnostics(module, csStage.source, {
321
+ ...(opts.label !== undefined ? { label: opts.label } : {}),
322
+ ...(csStage.sourceMap ? { sourceMap: csStage.sourceMap } : {}),
323
+ });
324
+ }
325
+ const pipelineKey = `${shader.id}|${csStage.entryName}|${groups.length}`;
326
+ let pipeline = cache.pipelines.get(pipelineKey);
327
+ if (pipeline === undefined) {
328
+ const pipelineLayout = device.createPipelineLayout({
329
+ bindGroupLayouts: groups.map(g => g.layout),
330
+ ...(opts.label !== undefined ? { label: `${opts.label}.layout` } : {}),
331
+ });
332
+ pipeline = device.createComputePipeline({
333
+ layout: pipelineLayout,
334
+ compute: { module, entryPoint: csStage.entryName },
335
+ ...(opts.label !== undefined ? { label: opts.label } : {}),
336
+ });
337
+ cache.pipelines.set(pipelineKey, pipeline);
338
+ }
339
+ return new PreparedComputeShader(device, pipeline, iface, groups, opts.label);
340
+ }
341
+ //# sourceMappingURL=preparedComputeShader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparedComputeShader.js","sourceRoot":"","sources":["../../src/resources/preparedComputeShader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { AdaptiveResource, type CompiledEffect, type FramebufferSignature, type ProgramInterface, type RenderObject } from "../core/index.js";
2
+ import { type AdaptiveToken, type aval } from "@aardworx/wombat.adaptive";
3
+ interface VertexBindingInfo {
4
+ readonly name: string;
5
+ readonly slot: number;
6
+ readonly format: GPUVertexFormat;
7
+ readonly byteSize: number;
8
+ }
9
+ type EntryDesc = {
10
+ kind: "ubuf";
11
+ binding: number;
12
+ resource: AdaptiveResource<GPUBuffer>;
13
+ } | {
14
+ kind: "sbuf";
15
+ binding: number;
16
+ resource: AdaptiveResource<GPUBuffer>;
17
+ access: "read" | "read_write";
18
+ } | {
19
+ kind: "tex";
20
+ binding: number;
21
+ resource: AdaptiveResource<GPUTexture>;
22
+ sampleType: GPUTextureSampleType;
23
+ } | {
24
+ kind: "sampler";
25
+ binding: number;
26
+ resource: AdaptiveResource<GPUSampler>;
27
+ };
28
+ interface GroupDesc {
29
+ readonly group: number;
30
+ readonly layout: GPUBindGroupLayout;
31
+ readonly entries: readonly EntryDesc[];
32
+ }
33
+ interface PipelineBuildContext {
34
+ readonly device: GPUDevice;
35
+ readonly iface: ProgramInterface;
36
+ readonly signature: FramebufferSignature;
37
+ readonly vertexLayouts: readonly GPUVertexBufferLayout[];
38
+ readonly bindGroupLayouts: readonly GPUBindGroupLayout[];
39
+ readonly vsSource: string;
40
+ readonly fsSource: string;
41
+ readonly vsEntry: string;
42
+ readonly fsEntry: string;
43
+ readonly vsSourceMap: import("@aardworx/wombat.shader/ir").SourceMap | null | undefined;
44
+ readonly fsSourceMap: import("@aardworx/wombat.shader/ir").SourceMap | null | undefined;
45
+ readonly label?: string | undefined;
46
+ readonly effectId?: string | undefined;
47
+ }
48
+ export declare class PreparedRenderObject {
49
+ private readonly device;
50
+ private readonly vertexBindings;
51
+ private readonly vertexBuffers;
52
+ private readonly indexBuffer;
53
+ private readonly indexFormat;
54
+ private readonly indices;
55
+ private readonly drawCall;
56
+ /**
57
+ * Most recently resolved pipeline. Set by `update(token)`. Reading
58
+ * this before `update` was ever called yields a sentinel object
59
+ * suitable only for identity comparison; the actual pipeline is
60
+ * resolved on the first `update`/`record` call.
61
+ */
62
+ pipeline: GPURenderPipeline;
63
+ readonly groups: readonly GroupDesc[];
64
+ private readonly _pipelineCache;
65
+ private _pipelineCtx;
66
+ private _pipelineState;
67
+ private readonly _bindGroupCache;
68
+ constructor(device: GPUDevice, vertexBindings: readonly VertexBindingInfo[], vertexBuffers: ReadonlyMap<string, AdaptiveResource<GPUBuffer>>, indexBuffer: AdaptiveResource<GPUBuffer> | undefined, indexFormat: GPUIndexFormat | undefined, indices: aval<import("../core/index.js").BufferView> | undefined, groups: readonly GroupDesc[], drawCall: aval<import("../core/index.js").DrawCall>, pipelineCtx: PipelineBuildContext, pipelineState: import("../core/index.js").PipelineState);
69
+ /** Internal — exposed for tests. The PipelineState the RO is reading. */
70
+ get pipelineState(): import("../core/index.js").PipelineState;
71
+ acquire(): void;
72
+ release(): void;
73
+ /**
74
+ * Resolve the pipeline for the current values of the
75
+ * pipeline-influencing avals. Updates `this.pipeline` so that the
76
+ * surrounding sort / record path can read it without forcing.
77
+ */
78
+ update(token: AdaptiveToken): void;
79
+ record(pass: GPURenderPassEncoder, token: AdaptiveToken): void;
80
+ }
81
+ export interface PrepareRenderObjectOptions {
82
+ readonly label?: string;
83
+ /**
84
+ * Stable identity of the upstream effect — wombat.shader's
85
+ * `Effect.id`. Threaded into the pipeline cache key so that
86
+ * pipelines compiled from the same effect against the same
87
+ * signature dedupe correctly.
88
+ */
89
+ readonly effectId?: string;
90
+ }
91
+ export declare function prepareRenderObject(device: GPUDevice, obj: RenderObject, effect: CompiledEffect, signature: FramebufferSignature, opts?: PrepareRenderObjectOptions): PreparedRenderObject;
92
+ export {};
93
+ //# sourceMappingURL=preparedRenderObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparedRenderObject.d.ts","sourceRoot":"","sources":["../../src/resources/preparedRenderObject.ts"],"names":[],"mappings":"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"}