@aardworx/wombat.rendering 0.19.24 → 0.20.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 (137) hide show
  1. package/dist/core/elementType.d.ts +2 -0
  2. package/dist/core/elementType.d.ts.map +1 -1
  3. package/dist/core/elementType.js +10 -0
  4. package/dist/core/elementType.js.map +1 -1
  5. package/dist/core/provider.d.ts.map +1 -1
  6. package/dist/core/provider.js +65 -32
  7. package/dist/core/provider.js.map +1 -1
  8. package/dist/core/renderObject.d.ts +18 -0
  9. package/dist/core/renderObject.d.ts.map +1 -1
  10. package/dist/resources/preparedRenderObject.d.ts.map +1 -1
  11. package/dist/resources/preparedRenderObject.js +28 -5
  12. package/dist/resources/preparedRenderObject.js.map +1 -1
  13. package/dist/resources/uniformBuffer.d.ts.map +1 -1
  14. package/dist/resources/uniformBuffer.js +3 -1
  15. package/dist/resources/uniformBuffer.js.map +1 -1
  16. package/dist/runtime/derivedModes/modeKeyCpu.d.ts +2 -12
  17. package/dist/runtime/derivedModes/modeKeyCpu.d.ts.map +1 -1
  18. package/dist/runtime/derivedModes/modeKeyCpu.js +30 -13
  19. package/dist/runtime/derivedModes/modeKeyCpu.js.map +1 -1
  20. package/dist/runtime/derivedModes/partitionDispatcher.d.ts +11 -0
  21. package/dist/runtime/derivedModes/partitionDispatcher.d.ts.map +1 -1
  22. package/dist/runtime/derivedModes/partitionDispatcher.js +31 -0
  23. package/dist/runtime/derivedModes/partitionDispatcher.js.map +1 -1
  24. package/dist/runtime/derivedUniforms/codegen.d.ts.map +1 -1
  25. package/dist/runtime/derivedUniforms/codegen.js +34 -13
  26. package/dist/runtime/derivedUniforms/codegen.js.map +1 -1
  27. package/dist/runtime/derivedUniforms/dispatch.d.ts.map +1 -1
  28. package/dist/runtime/derivedUniforms/dispatch.js +6 -0
  29. package/dist/runtime/derivedUniforms/dispatch.js.map +1 -1
  30. package/dist/runtime/derivedUniforms/records.d.ts +15 -0
  31. package/dist/runtime/derivedUniforms/records.d.ts.map +1 -1
  32. package/dist/runtime/derivedUniforms/records.js +81 -14
  33. package/dist/runtime/derivedUniforms/records.js.map +1 -1
  34. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts +6 -0
  35. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts.map +1 -1
  36. package/dist/runtime/derivedUniforms/sceneIntegration.js +18 -4
  37. package/dist/runtime/derivedUniforms/sceneIntegration.js.map +1 -1
  38. package/dist/runtime/flattenTree.d.ts.map +1 -1
  39. package/dist/runtime/flattenTree.js +46 -2
  40. package/dist/runtime/flattenTree.js.map +1 -1
  41. package/dist/runtime/heapAdapter.d.ts +3 -1
  42. package/dist/runtime/heapAdapter.d.ts.map +1 -1
  43. package/dist/runtime/heapAdapter.js +45 -4
  44. package/dist/runtime/heapAdapter.js.map +1 -1
  45. package/dist/runtime/heapDecoder.d.ts.map +1 -1
  46. package/dist/runtime/heapDecoder.js +8 -3
  47. package/dist/runtime/heapDecoder.js.map +1 -1
  48. package/dist/runtime/heapEffect.d.ts +36 -1
  49. package/dist/runtime/heapEffect.d.ts.map +1 -1
  50. package/dist/runtime/heapEffect.js +29 -2
  51. package/dist/runtime/heapEffect.js.map +1 -1
  52. package/dist/runtime/heapEffectIR.d.ts.map +1 -1
  53. package/dist/runtime/heapEffectIR.js +51 -11
  54. package/dist/runtime/heapEffectIR.js.map +1 -1
  55. package/dist/runtime/heapEligibility.d.ts.map +1 -1
  56. package/dist/runtime/heapEligibility.js +64 -12
  57. package/dist/runtime/heapEligibility.js.map +1 -1
  58. package/dist/runtime/heapIrBuilders.d.ts +8 -0
  59. package/dist/runtime/heapIrBuilders.d.ts.map +1 -1
  60. package/dist/runtime/heapIrBuilders.js +47 -2
  61. package/dist/runtime/heapIrBuilders.js.map +1 -1
  62. package/dist/runtime/heapScene/chunkedArena.d.ts +20 -28
  63. package/dist/runtime/heapScene/chunkedArena.d.ts.map +1 -1
  64. package/dist/runtime/heapScene/chunkedArena.js +28 -91
  65. package/dist/runtime/heapScene/chunkedArena.js.map +1 -1
  66. package/dist/runtime/heapScene/freelist.d.ts +1 -1
  67. package/dist/runtime/heapScene/freelist.js +3 -3
  68. package/dist/runtime/heapScene/freelist.js.map +1 -1
  69. package/dist/runtime/heapScene/pools.d.ts +103 -59
  70. package/dist/runtime/heapScene/pools.d.ts.map +1 -1
  71. package/dist/runtime/heapScene/pools.js +335 -194
  72. package/dist/runtime/heapScene/pools.js.map +1 -1
  73. package/dist/runtime/heapScene.d.ts +125 -1
  74. package/dist/runtime/heapScene.d.ts.map +1 -1
  75. package/dist/runtime/heapScene.js +671 -126
  76. package/dist/runtime/heapScene.js.map +1 -1
  77. package/dist/runtime/heapShaderFamily.d.ts.map +1 -1
  78. package/dist/runtime/heapShaderFamily.js +19 -0
  79. package/dist/runtime/heapShaderFamily.js.map +1 -1
  80. package/dist/runtime/hybridScene.d.ts +6 -0
  81. package/dist/runtime/hybridScene.d.ts.map +1 -1
  82. package/dist/runtime/hybridScene.js +36 -3
  83. package/dist/runtime/hybridScene.js.map +1 -1
  84. package/dist/runtime/index.d.ts +1 -1
  85. package/dist/runtime/index.d.ts.map +1 -1
  86. package/dist/runtime/index.js +1 -1
  87. package/dist/runtime/index.js.map +1 -1
  88. package/dist/runtime/renderTask.d.ts +6 -0
  89. package/dist/runtime/renderTask.d.ts.map +1 -1
  90. package/dist/runtime/renderTask.js +3 -0
  91. package/dist/runtime/renderTask.js.map +1 -1
  92. package/dist/runtime/runtime.d.ts +15 -0
  93. package/dist/runtime/runtime.d.ts.map +1 -1
  94. package/dist/runtime/runtime.js +3 -0
  95. package/dist/runtime/runtime.js.map +1 -1
  96. package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts +19 -2
  97. package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts.map +1 -1
  98. package/dist/runtime/textureAtlas/atlasMipGutterKernel.js +37 -6
  99. package/dist/runtime/textureAtlas/atlasMipGutterKernel.js.map +1 -1
  100. package/dist/runtime/textureAtlas/atlasPool.d.ts +5 -0
  101. package/dist/runtime/textureAtlas/atlasPool.d.ts.map +1 -1
  102. package/dist/runtime/textureAtlas/atlasPool.js +25 -3
  103. package/dist/runtime/textureAtlas/atlasPool.js.map +1 -1
  104. package/dist/window/loop.d.ts.map +1 -1
  105. package/dist/window/loop.js +31 -4
  106. package/dist/window/loop.js.map +1 -1
  107. package/package.json +3 -3
  108. package/src/core/elementType.ts +10 -0
  109. package/src/core/provider.ts +56 -28
  110. package/src/core/renderObject.ts +18 -0
  111. package/src/resources/preparedRenderObject.ts +29 -6
  112. package/src/resources/uniformBuffer.ts +3 -1
  113. package/src/runtime/derivedModes/modeKeyCpu.ts +26 -11
  114. package/src/runtime/derivedModes/partitionDispatcher.ts +30 -0
  115. package/src/runtime/derivedUniforms/codegen.ts +34 -13
  116. package/src/runtime/derivedUniforms/dispatch.ts +6 -0
  117. package/src/runtime/derivedUniforms/records.ts +70 -15
  118. package/src/runtime/derivedUniforms/sceneIntegration.ts +19 -4
  119. package/src/runtime/flattenTree.ts +47 -2
  120. package/src/runtime/heapAdapter.ts +43 -5
  121. package/src/runtime/heapDecoder.ts +8 -3
  122. package/src/runtime/heapEffect.ts +44 -2
  123. package/src/runtime/heapEffectIR.ts +54 -11
  124. package/src/runtime/heapEligibility.ts +39 -12
  125. package/src/runtime/heapIrBuilders.ts +50 -2
  126. package/src/runtime/heapScene/chunkedArena.ts +29 -94
  127. package/src/runtime/heapScene/freelist.ts +3 -3
  128. package/src/runtime/heapScene/pools.ts +340 -218
  129. package/src/runtime/heapScene.ts +826 -142
  130. package/src/runtime/heapShaderFamily.ts +21 -0
  131. package/src/runtime/hybridScene.ts +43 -3
  132. package/src/runtime/index.ts +5 -0
  133. package/src/runtime/renderTask.ts +9 -0
  134. package/src/runtime/runtime.ts +18 -0
  135. package/src/runtime/textureAtlas/atlasMipGutterKernel.ts +52 -3
  136. package/src/runtime/textureAtlas/atlasPool.ts +28 -2
  137. package/src/window/loop.ts +32 -4
@@ -1,5 +1,5 @@
1
1
  import type { IDisposable } from "@aardworx/wombat.adaptive";
2
- import { AttributeArena, IndexAllocator } from "./pools.js";
2
+ import { AttributeArena } from "./pools.js";
3
3
  /** Address inside a chunked arena. */
4
4
  export interface ChunkedRef {
5
5
  readonly chunkIdx: number;
@@ -23,6 +23,12 @@ export declare class ChunkedAttributeArena {
23
23
  get chunkCount(): number;
24
24
  get chunks(): ReadonlyArray<AttributeArena>;
25
25
  chunk(i: number): AttributeArena;
26
+ /** Bump headroom (bytes) of chunk `i` — free space before its cap, used by
27
+ * group placement. Out-of-range → 0. */
28
+ bumpHeadroom(i: number): number;
29
+ /** Open a fresh empty chunk (page) and return its index. Used by group
30
+ * placement when no existing chunk can hold a draw's whole group. */
31
+ openPage(): number;
26
32
  /**
27
33
  * Allocate `dataBytes` of attribute storage. Tries the `hint`
28
34
  * chunk first when given (caller passes the RO's chunk to keep all
@@ -31,9 +37,9 @@ export declare class ChunkedAttributeArena {
31
37
  */
32
38
  alloc(dataBytes: number, hint?: number): ChunkedRef;
33
39
  release(chunkIdx: number, off: number, dataBytes: number): void;
34
- /** Push the dirty CPU shadow of every chunk to its GPU buffer. */
40
+ /** No-op (mirror-less arena writes upload immediately). Kept for API compat. */
35
41
  flush(device: GPUDevice): void;
36
- /** Write into a specific chunk's CPU shadow. */
42
+ /** Write into a specific chunk (immediate GPU upload). */
37
43
  write(chunkIdx: number, dst: number, data: Uint8Array): void;
38
44
  /** Subscribe to "a new chunk was opened" events. Used by the
39
45
  * bucket-rebuild path to widen its per-chunk bookkeeping. */
@@ -45,31 +51,17 @@ export declare class ChunkedAttributeArena {
45
51
  onAnyResize(cb: (chunkIdx: number) => void): IDisposable;
46
52
  /** Total bytes used across all chunks (high-watermark sum). */
47
53
  totalUsedBytes(): number;
48
- destroy(): void;
49
- private openChunk;
50
- }
51
- /** Multi-chunk wrapper around `IndexAllocator`. Element-bump units
52
- * are u32. Same chunk-open / hint / fallback semantics as
53
- * `ChunkedAttributeArena`. */
54
- export declare class ChunkedIndexAllocator {
55
- private readonly device;
56
- private readonly label;
57
- private readonly usage;
58
- private readonly initialChunkBytes;
59
- private readonly maxChunkBytes;
60
- private readonly _chunks;
61
- private readonly onChunkAddedCbs;
62
- constructor(device: GPUDevice, label: string, usage: GPUBufferUsageFlags, initialChunkBytes: number, maxChunkBytes?: number);
63
- get chunkCount(): number;
64
- get chunks(): ReadonlyArray<IndexAllocator>;
65
- chunk(i: number): IndexAllocator;
66
- alloc(elements: number, hint?: number): ChunkedRef;
67
- release(chunkIdx: number, off: number, elements: number): void;
68
- flush(device: GPUDevice): void;
69
- write(chunkIdx: number, dst: number, data: Uint8Array): void;
70
- onChunkAdded(cb: (chunkIdx: number) => void): IDisposable;
71
- onAnyResize(cb: (chunkIdx: number) => void): IDisposable;
72
- totalUsedElements(): number;
54
+ /** Total fragmentation waste across all chunks (diagnostic / trigger). */
55
+ totalWasteBytes(): number;
56
+ /** Waste-triggered compaction across every chunk. Returns one entry per
57
+ * chunk that actually relocated data — `remap` maps OLD→NEW byte offset
58
+ * within that chunk. Empty array when nothing was worth compacting. The
59
+ * caller must have flushed pending arena writes first (the GPU copy reads
60
+ * the live buffers). */
61
+ compact(device: GPUDevice, wasteFloorBytes: number, force?: boolean): Array<{
62
+ chunkIdx: number;
63
+ remap: Map<number, number>;
64
+ }>;
73
65
  destroy(): void;
74
66
  private openChunk;
75
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunkedArena.d.ts","sourceRoot":"","sources":["../../../src/runtime/heapScene/chunkedArena.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunkedArena.d.ts","sourceRoot":"","sources":["../../../src/runtime/heapScene/chunkedArena.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;gBAGtD,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,mBAAmB,EAC1B,iBAAiB,EAAE,MAAM,EACzB,aAAa,GAAE,MAAiC;IAKnE,IAAI,UAAU,IAAI,MAAM,CAAgC;IACxD,IAAI,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAyB;IACpE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc;IAEhC;6CACyC;IACzC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG/B;0EACsE;IACtE,QAAQ,IAAI,MAAM;IAElB;;;;;OAKG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU;IAuBnD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,kFAAkF;IAClF,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAI9B,0DAA0D;IAC1D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAI5D;kEAC8D;IAC9D,YAAY,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAKzD;;;0EAGsE;IACtE,WAAW,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAexD,+DAA+D;IAC/D,cAAc,IAAI,MAAM;IAMxB,0EAA0E;IAC1E,eAAe,IAAI,MAAM;IAMzB;;;;6BAIyB;IACzB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAS3H,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,SAAS;CAUlB"}
@@ -12,7 +12,7 @@
12
12
  // can pass a tiny cap (e.g. 4 MB) to exercise multi-chunk behaviour
13
13
  // without massive workloads.
14
14
  import { GrowBuffer, DEFAULT_MAX_BUFFER_BYTES } from "./growBuffer.js";
15
- import { AttributeArena, IndexAllocator } from "./pools.js";
15
+ import { AttributeArena } from "./pools.js";
16
16
  /**
17
17
  * Multi-chunk wrapper around `AttributeArena`. Each chunk is one
18
18
  * GrowBuffer / Freelist pair, capped at `maxChunkBytes`. Caller
@@ -38,6 +38,14 @@ export class ChunkedAttributeArena {
38
38
  get chunkCount() { return this._chunks.length; }
39
39
  get chunks() { return this._chunks; }
40
40
  chunk(i) { return this._chunks[i]; }
41
+ /** Bump headroom (bytes) of chunk `i` — free space before its cap, used by
42
+ * group placement. Out-of-range → 0. */
43
+ bumpHeadroom(i) {
44
+ return i >= 0 && i < this._chunks.length ? this._chunks[i].bumpHeadroom : 0;
45
+ }
46
+ /** Open a fresh empty chunk (page) and return its index. Used by group
47
+ * placement when no existing chunk can hold a draw's whole group. */
48
+ openPage() { return this.openChunk(); }
41
49
  /**
42
50
  * Allocate `dataBytes` of attribute storage. Tries the `hint`
43
51
  * chunk first when given (caller passes the RO's chunk to keep all
@@ -73,12 +81,12 @@ export class ChunkedAttributeArena {
73
81
  return;
74
82
  c.release(off, dataBytes);
75
83
  }
76
- /** Push the dirty CPU shadow of every chunk to its GPU buffer. */
84
+ /** No-op (mirror-less arena writes upload immediately). Kept for API compat. */
77
85
  flush(device) {
78
86
  for (const c of this._chunks)
79
87
  c.flush(device);
80
88
  }
81
- /** Write into a specific chunk's CPU shadow. */
89
+ /** Write into a specific chunk (immediate GPU upload). */
82
90
  write(chunkIdx, dst, data) {
83
91
  this._chunks[chunkIdx].write(dst, data);
84
92
  }
@@ -114,97 +122,26 @@ export class ChunkedAttributeArena {
114
122
  s += c.usedBytes;
115
123
  return s;
116
124
  }
117
- destroy() {
118
- for (const c of this._chunks)
119
- c.destroy();
120
- this._chunks.length = 0;
121
- }
122
- openChunk() {
123
- const idx = this._chunks.length;
124
- const buf = new GrowBuffer(this.device, `${this.label}/c${idx}`, this.usage, this.initialChunkBytes, this.maxChunkBytes);
125
- this._chunks.push(new AttributeArena(buf));
126
- for (const cb of this.onChunkAddedCbs)
127
- cb(idx);
128
- return idx;
129
- }
130
- }
131
- /** Multi-chunk wrapper around `IndexAllocator`. Element-bump units
132
- * are u32. Same chunk-open / hint / fallback semantics as
133
- * `ChunkedAttributeArena`. */
134
- export class ChunkedIndexAllocator {
135
- device;
136
- label;
137
- usage;
138
- initialChunkBytes;
139
- maxChunkBytes;
140
- _chunks = [];
141
- onChunkAddedCbs = new Set();
142
- constructor(device, label, usage, initialChunkBytes, maxChunkBytes = DEFAULT_MAX_BUFFER_BYTES) {
143
- this.device = device;
144
- this.label = label;
145
- this.usage = usage;
146
- this.initialChunkBytes = initialChunkBytes;
147
- this.maxChunkBytes = maxChunkBytes;
148
- this.openChunk();
149
- }
150
- get chunkCount() { return this._chunks.length; }
151
- get chunks() { return this._chunks; }
152
- chunk(i) { return this._chunks[i]; }
153
- alloc(elements, hint) {
154
- if (hint !== undefined && hint >= 0 && hint < this._chunks.length) {
155
- const off = this._chunks[hint].tryAlloc(elements);
156
- if (off !== undefined)
157
- return { chunkIdx: hint, off };
158
- }
159
- for (let i = this._chunks.length - 1; i >= 0; i--) {
160
- if (i === hint)
161
- continue;
162
- const off = this._chunks[i].tryAlloc(elements);
163
- if (off !== undefined)
164
- return { chunkIdx: i, off };
165
- }
166
- const newIdx = this.openChunk();
167
- const off = this._chunks[newIdx].tryAlloc(elements);
168
- if (off === undefined) {
169
- throw new Error(`ChunkedIndexAllocator '${this.label}': allocation of ${elements} elements exceeds maxChunkBytes/4 ${this.maxChunkBytes / 4}`);
170
- }
171
- return { chunkIdx: newIdx, off };
172
- }
173
- release(chunkIdx, off, elements) {
174
- const c = this._chunks[chunkIdx];
175
- if (c === undefined)
176
- return;
177
- c.release(off, elements);
178
- }
179
- flush(device) {
125
+ /** Total fragmentation waste across all chunks (diagnostic / trigger). */
126
+ totalWasteBytes() {
127
+ let s = 0;
180
128
  for (const c of this._chunks)
181
- c.flush(device);
182
- }
183
- write(chunkIdx, dst, data) {
184
- this._chunks[chunkIdx].write(dst, data);
185
- }
186
- onChunkAdded(cb) {
187
- this.onChunkAddedCbs.add(cb);
188
- return { dispose: () => { this.onChunkAddedCbs.delete(cb); } };
129
+ s += c.wasteBytes;
130
+ return s;
189
131
  }
190
- onAnyResize(cb) {
191
- const disposables = [];
132
+ /** Waste-triggered compaction across every chunk. Returns one entry per
133
+ * chunk that actually relocated data — `remap` maps OLD→NEW byte offset
134
+ * within that chunk. Empty array when nothing was worth compacting. The
135
+ * caller must have flushed pending arena writes first (the GPU copy reads
136
+ * the live buffers). */
137
+ compact(device, wasteFloorBytes, force = false) {
138
+ const out = [];
192
139
  for (let i = 0; i < this._chunks.length; i++) {
193
- const idx = i;
194
- disposables.push(this._chunks[i].onResize(() => cb(idx)));
140
+ const remap = this._chunks[i].compact(device, wasteFloorBytes, force);
141
+ if (remap.size > 0)
142
+ out.push({ chunkIdx: i, remap });
195
143
  }
196
- disposables.push(this.onChunkAdded((idx) => {
197
- disposables.push(this._chunks[idx].onResize(() => cb(idx)));
198
- cb(idx);
199
- }));
200
- return { dispose: () => { for (const d of disposables)
201
- d.dispose(); } };
202
- }
203
- totalUsedElements() {
204
- let s = 0;
205
- for (const c of this._chunks)
206
- s += c.usedElements;
207
- return s;
144
+ return out;
208
145
  }
209
146
  destroy() {
210
147
  for (const c of this._chunks)
@@ -214,7 +151,7 @@ export class ChunkedIndexAllocator {
214
151
  openChunk() {
215
152
  const idx = this._chunks.length;
216
153
  const buf = new GrowBuffer(this.device, `${this.label}/c${idx}`, this.usage, this.initialChunkBytes, this.maxChunkBytes);
217
- this._chunks.push(new IndexAllocator(buf));
154
+ this._chunks.push(new AttributeArena(this.device, buf));
218
155
  for (const cb of this.onChunkAddedCbs)
219
156
  cb(idx);
220
157
  return idx;
@@ -1 +1 @@
1
- {"version":3,"file":"chunkedArena.js","sourceRoot":"","sources":["../../../src/runtime/heapScene/chunkedArena.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunkedArena.js","sourceRoot":"","sources":["../../../src/runtime/heapScene/chunkedArena.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ export declare class Freelist {
29
29
  /**
30
30
  * Take and remove the free block whose end offset is exactly
31
31
  * `endOff`, if any exists. Used by `AttributeArena` /
32
- * `IndexAllocator` to shrink the bump cursor back when releases
32
+ * `AttributeArena` to shrink the bump cursor back when releases
33
33
  * expose a free tail (§5 — cursor-shrink hygiene for long-lived
34
34
  * high-churn scenes).
35
35
  */
@@ -1,5 +1,5 @@
1
- // Freelist — best-fit free-block manager used by AttributeArena and
2
- // IndexAllocator. Replaces the earlier `{off,size}[]` sorted-by-off
1
+ // Freelist — best-fit free-block manager used by AttributeArena.
2
+ // Replaces the earlier `{off,size}[]` sorted-by-off
3
3
  // freelist (whose alloc was O(N) first-fit and release was O(log N)
4
4
  // binary-search-then-coalesce).
5
5
  //
@@ -91,7 +91,7 @@ export class Freelist {
91
91
  /**
92
92
  * Take and remove the free block whose end offset is exactly
93
93
  * `endOff`, if any exists. Used by `AttributeArena` /
94
- * `IndexAllocator` to shrink the bump cursor back when releases
94
+ * `AttributeArena` to shrink the bump cursor back when releases
95
95
  * expose a free tail (§5 — cursor-shrink hygiene for long-lived
96
96
  * high-churn scenes).
97
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"freelist.js","sourceRoot":"","sources":["../../../src/runtime/heapScene/freelist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"freelist.js","sourceRoot":"","sources":["../../../src/runtime/heapScene/freelist.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,22 @@ import type { aval, IDisposable } from "@aardworx/wombat.adaptive";
2
2
  import type { BufferView } from "../../core/bufferView.js";
3
3
  import type { HostBufferSource } from "../../core/buffer.js";
4
4
  import { GrowBuffer } from "./growBuffer.js";
5
- import { ChunkedAttributeArena, ChunkedIndexAllocator } from "./chunkedArena.js";
5
+ import { ChunkedAttributeArena } from "./chunkedArena.js";
6
6
  /** Per-allocation header: (u32 typeId, u32 length). Data follows
7
7
  * the header aligned up to 16 bytes (so positions/normals/etc. line
8
8
  * up for future vec4 reads). */
9
9
  export declare const ALLOC_HEADER_BYTES = 8;
10
10
  export declare const ALLOC_HEADER_PAD_TO = 16;
11
- /** Encoding-tag enum (low 16 bits of typeId). */
11
+ /** Default fragmentation-waste floor (bytes) below which `AttributeArena`
12
+ * declines to compact — relocating a few KB isn't worth a GPU copy +
13
+ * ref re-seat. Matches Aardvark's 4 MiB compaction floor. */
14
+ export declare const COMPACTION_WASTE_FLOOR_BYTES: number;
15
+ /** Encoding-tag enum (low 16 bits of typeId). The generated VS decode
16
+ * branches on this per field (2-arm select; header word 0 shares the
17
+ * cache line with the broadcast length in word 1). */
12
18
  export declare const ENC_V3F_TIGHT = 1;
19
+ export declare const ENC_OCT32 = 2;
20
+ export declare const ENC_C4B = 3;
13
21
  /** Semantic-tag enum (high 16 bits of typeId). Optional metadata —
14
22
  * the shader doesn't branch on this. */
15
23
  export declare const SEM_POSITIONS = 1;
@@ -22,7 +30,10 @@ export declare const SEM_NORMALS = 2;
22
30
  */
23
31
  interface PoolEntry {
24
32
  readonly chunkIdx: number;
25
- readonly ref: number;
33
+ /** Byte offset within the chunk's GPUBuffer. Mutated by
34
+ * `UniformPool.remapRefs` when a waste-triggered arena compaction
35
+ * relocates the allocation. */
36
+ ref: number;
26
37
  readonly dataBytes: number;
27
38
  readonly typeId: number;
28
39
  readonly pack: (val: unknown, dst: Float32Array, off: number) => void;
@@ -37,7 +48,16 @@ interface PoolEntry {
37
48
  * an aval still share the underlying allocation.
38
49
  */
39
50
  export declare class UniformPool {
51
+ /** Value is a single `PoolEntry` (the overwhelmingly common case —
52
+ * one aval, one chunk) or a `Map<chunkIdx, PoolEntry>` once the
53
+ * same aval is allocated in a second chunk. The flat form saves a
54
+ * whole inner `Map` per aval, which at heap scale (several avals
55
+ * per draw) is megabytes of JS heap. */
40
56
  private readonly byAval;
57
+ private getEntry;
58
+ private setEntry;
59
+ private deleteEntry;
60
+ private entriesOf;
41
61
  has(av: aval<unknown>, chunkIdx: number): boolean;
42
62
  /** True when the pool holds at least one entry for `av` in any
43
63
  * chunk. Used by the scene's `inputChanged` dispatch to decide
@@ -48,14 +68,27 @@ export declare class UniformPool {
48
68
  * to prefer co-locating a new RO with its already-allocated
49
69
  * shared inputs (avoids unnecessary duplication). */
50
70
  firstChunkContaining(av: aval<unknown>): number | undefined;
71
+ /**
72
+ * Unkeyed allocation for slots the GPU overwrites every dirty frame
73
+ * (§7 derived-uniform outputs). No aval, no `byAval` entry, no
74
+ * sharing — the caller keeps the ref in its drawHeader cell (which
75
+ * the compaction remap re-seats) and frees it with `releaseRaw`.
76
+ * Avoids a placeholder `AVal.constant` + pool entry per draw.
77
+ */
78
+ allocRaw(arena: ChunkedAttributeArena, chunkIdx: number, dataBytes: number, typeId: number, length: number): number;
79
+ releaseRaw(arena: ChunkedAttributeArena, chunkIdx: number, ref: number, dataBytes: number): void;
51
80
  /**
52
81
  * Acquire (or share) an allocation for `aval` in `chunkIdx`.
53
82
  * Returns the byte offset within that chunk's GPUBuffer. If a
54
83
  * fresh allocation is made, the value is packed + uploaded
55
- * immediately into the chunk's CPU shadow.
84
+ * immediately to the chunk's GPU buffer (mirror-less).
56
85
  */
57
86
  acquire(device: GPUDevice, arena: ChunkedAttributeArena, av: aval<unknown>, chunkIdx: number, value: unknown, dataBytes: number, typeId: number, length: number, pack: (val: unknown, dst: Float32Array, off: number) => void): number;
58
87
  release(arena: ChunkedAttributeArena, av: aval<unknown>, chunkIdx: number): void;
88
+ /** Re-seat every entry's `ref` in `chunkIdx` after a waste-triggered
89
+ * arena compaction relocated allocations. `remap` maps OLD→NEW byte
90
+ * offset. Entries whose ref didn't move are left as-is. O(entries). */
91
+ remapRefs(chunkIdx: number, remap: ReadonlyMap<number, number>): void;
59
92
  /** Re-pack one entry's data region into every chunk that holds
60
93
  * this aval. When an aval is shared across N chunks (each chunk
61
94
  * has its own duplicate alloc), every duplicate needs the
@@ -66,7 +99,7 @@ export declare class UniformPool {
66
99
  totalDataBytes(av: aval<unknown>): number;
67
100
  }
68
101
  /**
69
- * Aval-keyed pool over the `IndexAllocator`. Two draws referencing
102
+ * Aval-keyed pool over the (attribute) arena. Two draws referencing
70
103
  * the same `Uint32Array` (or aval thereof) share an index range —
71
104
  * 19K instanced clones of the same mesh share one allocation, one
72
105
  * upload.
@@ -79,20 +112,34 @@ export declare class UniformPool {
79
112
  */
80
113
  export declare class IndexPool {
81
114
  /** Per-aval, per-chunk bookkeeping. Same aval acquired in two
82
- * chunks gets two entries (accepted §3 duplication). */
115
+ * chunks gets two entries (accepted §3 duplication). Value is a
116
+ * single binding (common case) or a Map<chunkIdx, binding> once
117
+ * the aval spans chunks — same flat-form saving as UniformPool. */
83
118
  private readonly byAval;
119
+ private getBinding;
120
+ private setBinding;
121
+ private deleteBinding;
84
122
  /** Per-chunk constant-aval value-dedup (§5b in-chunk). */
85
123
  private readonly byValueKey;
86
124
  private readonly bufferIds;
87
125
  private nextBufferId;
88
126
  private bufferIdOf;
89
127
  firstChunkContaining(av: aval<Uint32Array>): number | undefined;
90
- acquire(device: GPUDevice, indices: ChunkedIndexAllocator, av: aval<Uint32Array>, chunkIdx: number, arr: Uint32Array): {
128
+ acquire(device: GPUDevice, arena: ChunkedAttributeArena, av: aval<Uint32Array>, chunkIdx: number, arr: Uint32Array): {
91
129
  chunkIdx: number;
92
130
  firstIndex: number;
93
131
  count: number;
94
132
  };
95
- release(indices: ChunkedIndexAllocator, av: aval<Uint32Array>, chunkIdx: number): void;
133
+ /** The allocation's byte header offset (`ref`) of `av`'s entry in `chunkIdx`,
134
+ * or undefined if not allocated there. The heap compaction pass looks the
135
+ * region up in the arena remap by this ref to compute the draw's new
136
+ * `_indexStart`. */
137
+ baseFor(av: aval<Uint32Array>, chunkIdx: number): number | undefined;
138
+ /** Re-seat every entry after a compaction relocated its region. `remap` maps
139
+ * OLD→NEW byte header offset (`ref`); `firstIndex` is recomputed from the
140
+ * new ref. Entries are shared by value-dedup, so each is visited once. */
141
+ remapRefs(chunkIdx: number, remap: ReadonlyMap<number, number>): void;
142
+ release(arena: ChunkedAttributeArena, av: aval<Uint32Array>, chunkIdx: number): void;
96
143
  }
97
144
  /**
98
145
  * Slot-indexed allocator over a GrowBuffer. `slotBytes` is set per-
@@ -125,33 +172,27 @@ export declare class DrawHeap {
125
172
  * onto a sorted free list with coalesce on insert.
126
173
  */
127
174
  export declare class AttributeArena {
175
+ private readonly device;
128
176
  private readonly buf;
129
177
  private cursor;
178
+ /** Sum of `allocBytes` over all live allocations. `cursor - liveBytes`
179
+ * is the fragmentation waste below the high-water mark — what
180
+ * `compact()` reclaims. */
181
+ private liveBytes;
130
182
  private readonly freelist;
131
183
  /** DEBUG: tracks every live allocation by start byte → size. Set
132
184
  * on alloc, cleared on release. Used by `assertNoOverlap()` to
133
185
  * detect allocator returning overlapping ranges. Enabled in
134
186
  * development; cheap (one Map insert/delete per alloc). */
135
187
  private readonly liveAllocs;
136
- /** CPU shadow of the entire GPU buffer; writes go here first then
137
- * flush() emits one writeBuffer per dirty contiguous range. A
138
- * single min..max span would re-upload nearly the whole arena on
139
- * scattered edits — see dirtyRanges.ts. */
140
- private shadow;
141
- private readonly dirty;
142
- constructor(buf: GrowBuffer);
188
+ constructor(device: GPUDevice, buf: GrowBuffer);
143
189
  get buffer(): GPUBuffer;
144
190
  get capacity(): number;
145
191
  get usedBytes(): number;
146
- /** Read 4 u32s from the CPU shadow starting at byte `off`. Used by
147
- * the validator to compare against the GPU's read-back values:
148
- * if CPU shadow is correct but GPU shows garbage → the corruption
149
- * came from a GPU-side write (a compute kernel writing to a wrong
150
- * byte). If both differ from what pool.acquire wrote → CPU-side
151
- * write path is the culprit. */
152
- peekShadowU32(off: number, count: number): Uint32Array;
153
192
  write(dst: number, data: Uint8Array): void;
154
- flush(device: GPUDevice): void;
193
+ /** No-op — kept for call-site compatibility (mirror-less arena uploads
194
+ * in `write`). */
195
+ flush(_device: GPUDevice): void;
155
196
  /**
156
197
  * Allocate space for one attribute. Returns the byte ref (offset
157
198
  * to the header — data lives at ref + 16).
@@ -167,49 +208,52 @@ export declare class AttributeArena {
167
208
  * throws if it overlaps any live allocation (O(live) per alloc —
168
209
  * made scene build O(n²) when always-on, hence opt-in). */
169
210
  private recordAlloc;
211
+ /** Bytes the bump cursor can still grow into before hitting the chunk cap
212
+ * (ignores freelist holes — a conservative lower bound on free space, used
213
+ * by group placement to decide whether a draw's group fits here). */
214
+ get bumpHeadroom(): number;
215
+ /** Live bytes (sum of all live allocations, header+pad included). */
216
+ get liveByteCount(): number;
217
+ /** Fragmentation waste below the high-water mark: free bytes the tail-
218
+ * reclaim couldn't recover because they sit between live allocations. */
219
+ get wasteBytes(): number;
220
+ /**
221
+ * Waste-triggered compaction. Relocates live allocations to the front of
222
+ * the buffer, eliminating the high-water ratchet that exact-size freelist
223
+ * reuse alone can't fix (a drifting allocation-size distribution never
224
+ * reuses its holes and grows toward the high-water forever).
225
+ *
226
+ * The byte move happens GPU-side via `copyBufferToBuffer` through a scratch
227
+ * buffer — no CPU→GPU re-upload — and is mirrored into the CPU shadow so it
228
+ * stays authoritative for future partial writes. Same-buffer copies can't
229
+ * overlap, hence the scratch round-trip.
230
+ *
231
+ * Returns a map of OLD→NEW byte offset for every allocation that moved; the
232
+ * caller must re-seat every cached ref (drawHeader cells, uniform-pool
233
+ * entries, derived-uniform handles, partition master refs). Returns an
234
+ * empty map when it declines to compact (waste below `wasteFloorBytes` or
235
+ * less than half the extent wasted).
236
+ *
237
+ * Precondition: the arena's pending shadow writes must already be flushed
238
+ * to the GPU buffer (the GPU copy reads the live buffer). O(live).
239
+ */
240
+ compact(device: GPUDevice, wasteFloorBytes: number, force?: boolean): Map<number, number>;
170
241
  onResize(cb: () => void): IDisposable;
171
242
  destroy(): void;
172
243
  }
173
244
  /**
174
- * Element-bump allocator over an index GrowBuffer (units = u32). Each
175
- * draw's index range is allocated as one block; on release the block
176
- * is returned to a Freelist and can be reused best-fit.
177
- */
178
- export declare class IndexAllocator {
179
- private readonly buf;
180
- private cursor;
181
- private readonly freelist;
182
- /** DEBUG: live index allocations tracked by start element. */
183
- private readonly liveAllocs;
184
- private shadow;
185
- private readonly dirty;
186
- constructor(buf: GrowBuffer);
187
- get buffer(): GPUBuffer;
188
- get usedElements(): number;
189
- write(dstByteOffset: number, data: Uint8Array): void;
190
- flush(device: GPUDevice): void;
191
- /** Non-throwing alloc — returns `undefined` when the request
192
- * would exceed the underlying GrowBuffer's `maxCapacity` cap.
193
- * Used by `ChunkedIndexAllocator` to probe before spilling. */
194
- tryAlloc(elements: number): number | undefined;
195
- private recordAlloc;
196
- alloc(elements: number): number;
197
- release(off: number, elements: number): void;
198
- onResize(cb: () => void): IDisposable;
199
- destroy(): void;
200
- }
201
- /**
202
- * Global arena state: attribute / uniform data lives in `attrs`
203
- * (multi-typed-view storage); indices live in `indices` (separate
204
- * INDEX-usage buffer). Both are chunked: each chunk owns a separate
205
- * GPUBuffer + Freelist. Refs that downstream code stores are byte
206
- * offsets within a chunk; the chunk identity is carried alongside
207
- * (via bucket.chunkIdx in heapScene) and made implicit at draw
208
- * time by which chunk's bind group is active.
245
+ * Global arena state: ONE chunked arena holds all heap data (per-draw
246
+ * uniforms, attributes, and index arrays) as multi-typed views over the same
247
+ * buffers. Each chunk owns a separate GPUBuffer + Freelist. Refs that
248
+ * downstream code stores are byte offsets within a chunk; the chunk identity
249
+ * is carried alongside (via `bucket.chunkIdx`) and made implicit at draw time
250
+ * by which chunk's bind group is active.
209
251
  */
210
252
  export interface ArenaState {
253
+ /** The single arena holding ALL heap data — per-draw uniforms, vertex /
254
+ * instance attributes, AND index arrays (the heap VS storage-decodes
255
+ * indices, so they need no separate index buffer). */
211
256
  readonly attrs: ChunkedAttributeArena;
212
- readonly indices: ChunkedIndexAllocator;
213
257
  }
214
258
  export declare function buildArenaState(device: GPUDevice, attrBytesHint: number, idxBytesHint: number, label: string, idxExtraUsage?: GPUBufferUsageFlags, maxChunkBytes?: number | undefined): ArenaState;
215
259
  export declare function arenaBytes(arena: ArenaState): number;
@@ -1 +1 @@
1
- {"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/runtime/heapScene/pools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/runtime/heapScene/pools.ts"],"names":[],"mappings":"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"}