@aardworx/wombat.rendering 0.9.20 → 0.9.21

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.
@@ -18,6 +18,10 @@ export declare class GpuDerivedModesScene {
18
18
  /** Last-known declared (for kernel uniform). Common case: all RO
19
19
  * rules share the same declared (= the SG scope's value). */
20
20
  private declared;
21
+ /** True while the staging buffer's mapAsync is in flight. We must
22
+ * not enqueue a new copyBufferToBuffer into it until it's been
23
+ * unmapped (mapAsync resolved + unmap called). */
24
+ private readbackInFlight;
21
25
  /** Per-RO last-known output. CPU mirror, populated by finish(). */
22
26
  readonly lastOutput: Uint32Array;
23
27
  constructor(device: GPUDevice);
@@ -1 +1 @@
1
- {"version":3,"file":"gpuDispatcher.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/gpuDispatcher.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAc1D,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAS;IAGtB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,MAAM,CAAuC;IACrD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAK;IACrB,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAA0B;IAC1C;kEAC8D;IAC9D,OAAO,CAAC,QAAQ,CAA4B;IAE5C,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;gBAErB,MAAM,EAAE,SAAS;IAK7B,IAAI,UAAU,IAAI,MAAM,CAA2B;IAEnD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOtE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOlC,SAAS,IAAI,IAAI;IACjB,YAAY,IAAI,OAAO;IAEvB,OAAO,CAAC,eAAe;IAmDvB,oEAAoE;IACpE,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM;IAa7E;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"gpuDispatcher.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/gpuDispatcher.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAc1D,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAS;IAGtB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,MAAM,CAAuC;IACrD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAK;IACrB,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAA0B;IAC1C;kEAC8D;IAC9D,OAAO,CAAC,QAAQ,CAA4B;IAC5C;;uDAEmD;IACnD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;gBAErB,MAAM,EAAE,SAAS;IAK7B,IAAI,UAAU,IAAI,MAAM,CAA2B;IAEnD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOtE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOlC,SAAS,IAAI,IAAI;IACjB,YAAY,IAAI,OAAO;IAEvB,OAAO,CAAC,eAAe;IAmDvB,oEAAoE;IACpE,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG,MAAM;IAqB7E;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3C,OAAO,IAAI,IAAI;CAMhB"}
@@ -45,6 +45,10 @@ export class GpuDerivedModesScene {
45
45
  /** Last-known declared (for kernel uniform). Common case: all RO
46
46
  * rules share the same declared (= the SG scope's value). */
47
47
  declared = CULL_TO_U32.back;
48
+ /** True while the staging buffer's mapAsync is in flight. We must
49
+ * not enqueue a new copyBufferToBuffer into it until it's been
50
+ * unmapped (mapAsync resolved + unmap called). */
51
+ readbackInFlight = false;
48
52
  /** Per-RO last-known output. CPU mirror, populated by finish(). */
49
53
  lastOutput;
50
54
  constructor(device) {
@@ -136,14 +140,22 @@ export class GpuDerivedModesScene {
136
140
  */
137
141
  dispatch(arenaBuf, numROs, enc) {
138
142
  this.ensureResources(arenaBuf, numROs);
143
+ // If the previous frame's readback hasn't resolved yet, we can
144
+ // still dispatch the compute (writes to outputBuf), but we must
145
+ // skip the staging copy — otherwise WebGPU rejects the submit
146
+ // with "buffer used in submit while mapped". Cheap to skip: the
147
+ // next dispatch will re-copy when staging is unmapped.
139
148
  this.uploadInputs(numROs);
140
149
  const pass = enc.beginComputePass({ label: "gpuDerivedModes/pass" });
141
150
  pass.setPipeline(this.pipeline);
142
151
  pass.setBindGroup(0, this.bindGroup);
143
152
  pass.dispatchWorkgroups(Math.ceil(numROs / WG_SIZE));
144
153
  pass.end();
145
- const bytes = numROs * 4;
146
- enc.copyBufferToBuffer(this.outputBuf, 0, this.stagingBuf, 0, bytes);
154
+ if (!this.readbackInFlight) {
155
+ const bytes = numROs * 4;
156
+ enc.copyBufferToBuffer(this.outputBuf, 0, this.stagingBuf, 0, bytes);
157
+ this.readbackInFlight = true;
158
+ }
147
159
  return numROs;
148
160
  }
149
161
  /**
@@ -154,11 +166,18 @@ export class GpuDerivedModesScene {
154
166
  async finish(numROs) {
155
167
  if (this.stagingBuf === null || numROs === 0)
156
168
  return;
169
+ if (!this.readbackInFlight)
170
+ return; // dispatch skipped the copy; nothing to read
157
171
  const bytes = numROs * 4;
158
- await this.stagingBuf.mapAsync(GPUMapMode.READ, 0, bytes);
159
- const view = new Uint32Array(this.stagingBuf.getMappedRange(0, bytes).slice(0));
160
- this.stagingBuf.unmap();
161
- this.lastOutput.set(view, 0);
172
+ try {
173
+ await this.stagingBuf.mapAsync(GPUMapMode.READ, 0, bytes);
174
+ const view = new Uint32Array(this.stagingBuf.getMappedRange(0, bytes).slice(0));
175
+ this.stagingBuf.unmap();
176
+ this.lastOutput.set(view, 0);
177
+ }
178
+ finally {
179
+ this.readbackInFlight = false;
180
+ }
162
181
  }
163
182
  dispose() {
164
183
  this.inputBuf?.destroy();
@@ -1 +1 @@
1
- {"version":3,"file":"gpuDispatcher.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/gpuDispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gpuDispatcher.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/gpuDispatcher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aardworx/wombat.rendering",
3
- "version": "0.9.20",
3
+ "version": "0.9.21",
4
4
  "description": "WebGPU rendering layer for the Wombat TypeScript stack — RenderObject/RenderTask/runtime + window glue, port of Aardvark.Rendering's lower layers on top of WebGPU and wombat.shader.",
5
5
  "license": "MIT",
6
6
  "author": "krauthaufen",
@@ -58,6 +58,10 @@ export class GpuDerivedModesScene {
58
58
  /** Last-known declared (for kernel uniform). Common case: all RO
59
59
  * rules share the same declared (= the SG scope's value). */
60
60
  private declared: number = CULL_TO_U32.back;
61
+ /** True while the staging buffer's mapAsync is in flight. We must
62
+ * not enqueue a new copyBufferToBuffer into it until it's been
63
+ * unmapped (mapAsync resolved + unmap called). */
64
+ private readbackInFlight = false;
61
65
 
62
66
  /** Per-RO last-known output. CPU mirror, populated by finish(). */
63
67
  readonly lastOutput: Uint32Array;
@@ -156,14 +160,22 @@ export class GpuDerivedModesScene {
156
160
  */
157
161
  dispatch(arenaBuf: GPUBuffer, numROs: number, enc: GPUCommandEncoder): number {
158
162
  this.ensureResources(arenaBuf, numROs);
163
+ // If the previous frame's readback hasn't resolved yet, we can
164
+ // still dispatch the compute (writes to outputBuf), but we must
165
+ // skip the staging copy — otherwise WebGPU rejects the submit
166
+ // with "buffer used in submit while mapped". Cheap to skip: the
167
+ // next dispatch will re-copy when staging is unmapped.
159
168
  this.uploadInputs(numROs);
160
169
  const pass = enc.beginComputePass({ label: "gpuDerivedModes/pass" });
161
170
  pass.setPipeline(this.pipeline!);
162
171
  pass.setBindGroup(0, this.bindGroup!);
163
172
  pass.dispatchWorkgroups(Math.ceil(numROs / WG_SIZE));
164
173
  pass.end();
165
- const bytes = numROs * 4;
166
- enc.copyBufferToBuffer(this.outputBuf!, 0, this.stagingBuf!, 0, bytes);
174
+ if (!this.readbackInFlight) {
175
+ const bytes = numROs * 4;
176
+ enc.copyBufferToBuffer(this.outputBuf!, 0, this.stagingBuf!, 0, bytes);
177
+ this.readbackInFlight = true;
178
+ }
167
179
  return numROs;
168
180
  }
169
181
 
@@ -174,11 +186,16 @@ export class GpuDerivedModesScene {
174
186
  */
175
187
  async finish(numROs: number): Promise<void> {
176
188
  if (this.stagingBuf === null || numROs === 0) return;
189
+ if (!this.readbackInFlight) return; // dispatch skipped the copy; nothing to read
177
190
  const bytes = numROs * 4;
178
- await this.stagingBuf.mapAsync(GPUMapMode.READ, 0, bytes);
179
- const view = new Uint32Array(this.stagingBuf.getMappedRange(0, bytes).slice(0));
180
- this.stagingBuf.unmap();
181
- (this as { lastOutput: Uint32Array }).lastOutput.set(view, 0);
191
+ try {
192
+ await this.stagingBuf.mapAsync(GPUMapMode.READ, 0, bytes);
193
+ const view = new Uint32Array(this.stagingBuf.getMappedRange(0, bytes).slice(0));
194
+ this.stagingBuf.unmap();
195
+ (this as { lastOutput: Uint32Array }).lastOutput.set(view, 0);
196
+ } finally {
197
+ this.readbackInFlight = false;
198
+ }
182
199
  }
183
200
 
184
201
  dispose(): void {