@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.
- package/dist/core/elementType.d.ts +2 -0
- package/dist/core/elementType.d.ts.map +1 -1
- package/dist/core/elementType.js +10 -0
- package/dist/core/elementType.js.map +1 -1
- package/dist/core/provider.d.ts.map +1 -1
- package/dist/core/provider.js +65 -32
- package/dist/core/provider.js.map +1 -1
- package/dist/core/renderObject.d.ts +18 -0
- package/dist/core/renderObject.d.ts.map +1 -1
- package/dist/resources/preparedRenderObject.d.ts.map +1 -1
- package/dist/resources/preparedRenderObject.js +28 -5
- package/dist/resources/preparedRenderObject.js.map +1 -1
- package/dist/resources/uniformBuffer.d.ts.map +1 -1
- package/dist/resources/uniformBuffer.js +3 -1
- package/dist/resources/uniformBuffer.js.map +1 -1
- package/dist/runtime/derivedModes/modeKeyCpu.d.ts +2 -12
- package/dist/runtime/derivedModes/modeKeyCpu.d.ts.map +1 -1
- package/dist/runtime/derivedModes/modeKeyCpu.js +30 -13
- package/dist/runtime/derivedModes/modeKeyCpu.js.map +1 -1
- package/dist/runtime/derivedModes/partitionDispatcher.d.ts +11 -0
- package/dist/runtime/derivedModes/partitionDispatcher.d.ts.map +1 -1
- package/dist/runtime/derivedModes/partitionDispatcher.js +31 -0
- package/dist/runtime/derivedModes/partitionDispatcher.js.map +1 -1
- package/dist/runtime/derivedUniforms/codegen.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/codegen.js +34 -13
- package/dist/runtime/derivedUniforms/codegen.js.map +1 -1
- package/dist/runtime/derivedUniforms/dispatch.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/dispatch.js +6 -0
- package/dist/runtime/derivedUniforms/dispatch.js.map +1 -1
- package/dist/runtime/derivedUniforms/records.d.ts +15 -0
- package/dist/runtime/derivedUniforms/records.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/records.js +81 -14
- package/dist/runtime/derivedUniforms/records.js.map +1 -1
- package/dist/runtime/derivedUniforms/sceneIntegration.d.ts +6 -0
- package/dist/runtime/derivedUniforms/sceneIntegration.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/sceneIntegration.js +18 -4
- package/dist/runtime/derivedUniforms/sceneIntegration.js.map +1 -1
- package/dist/runtime/flattenTree.d.ts.map +1 -1
- package/dist/runtime/flattenTree.js +46 -2
- package/dist/runtime/flattenTree.js.map +1 -1
- package/dist/runtime/heapAdapter.d.ts +3 -1
- package/dist/runtime/heapAdapter.d.ts.map +1 -1
- package/dist/runtime/heapAdapter.js +45 -4
- package/dist/runtime/heapAdapter.js.map +1 -1
- package/dist/runtime/heapDecoder.d.ts.map +1 -1
- package/dist/runtime/heapDecoder.js +8 -3
- package/dist/runtime/heapDecoder.js.map +1 -1
- package/dist/runtime/heapEffect.d.ts +36 -1
- package/dist/runtime/heapEffect.d.ts.map +1 -1
- package/dist/runtime/heapEffect.js +29 -2
- package/dist/runtime/heapEffect.js.map +1 -1
- package/dist/runtime/heapEffectIR.d.ts.map +1 -1
- package/dist/runtime/heapEffectIR.js +51 -11
- package/dist/runtime/heapEffectIR.js.map +1 -1
- package/dist/runtime/heapEligibility.d.ts.map +1 -1
- package/dist/runtime/heapEligibility.js +64 -12
- package/dist/runtime/heapEligibility.js.map +1 -1
- package/dist/runtime/heapIrBuilders.d.ts +8 -0
- package/dist/runtime/heapIrBuilders.d.ts.map +1 -1
- package/dist/runtime/heapIrBuilders.js +47 -2
- package/dist/runtime/heapIrBuilders.js.map +1 -1
- package/dist/runtime/heapScene/chunkedArena.d.ts +20 -28
- package/dist/runtime/heapScene/chunkedArena.d.ts.map +1 -1
- package/dist/runtime/heapScene/chunkedArena.js +28 -91
- package/dist/runtime/heapScene/chunkedArena.js.map +1 -1
- package/dist/runtime/heapScene/freelist.d.ts +1 -1
- package/dist/runtime/heapScene/freelist.js +3 -3
- package/dist/runtime/heapScene/freelist.js.map +1 -1
- package/dist/runtime/heapScene/pools.d.ts +103 -59
- package/dist/runtime/heapScene/pools.d.ts.map +1 -1
- package/dist/runtime/heapScene/pools.js +335 -194
- package/dist/runtime/heapScene/pools.js.map +1 -1
- package/dist/runtime/heapScene.d.ts +125 -1
- package/dist/runtime/heapScene.d.ts.map +1 -1
- package/dist/runtime/heapScene.js +671 -126
- package/dist/runtime/heapScene.js.map +1 -1
- package/dist/runtime/heapShaderFamily.d.ts.map +1 -1
- package/dist/runtime/heapShaderFamily.js +19 -0
- package/dist/runtime/heapShaderFamily.js.map +1 -1
- package/dist/runtime/hybridScene.d.ts +6 -0
- package/dist/runtime/hybridScene.d.ts.map +1 -1
- package/dist/runtime/hybridScene.js +36 -3
- package/dist/runtime/hybridScene.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/renderTask.d.ts +6 -0
- package/dist/runtime/renderTask.d.ts.map +1 -1
- package/dist/runtime/renderTask.js +3 -0
- package/dist/runtime/renderTask.js.map +1 -1
- package/dist/runtime/runtime.d.ts +15 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +3 -0
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts +19 -2
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js +37 -6
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.d.ts +5 -0
- package/dist/runtime/textureAtlas/atlasPool.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.js +25 -3
- package/dist/runtime/textureAtlas/atlasPool.js.map +1 -1
- package/dist/window/loop.d.ts.map +1 -1
- package/dist/window/loop.js +31 -4
- package/dist/window/loop.js.map +1 -1
- package/package.json +3 -3
- package/src/core/elementType.ts +10 -0
- package/src/core/provider.ts +56 -28
- package/src/core/renderObject.ts +18 -0
- package/src/resources/preparedRenderObject.ts +29 -6
- package/src/resources/uniformBuffer.ts +3 -1
- package/src/runtime/derivedModes/modeKeyCpu.ts +26 -11
- package/src/runtime/derivedModes/partitionDispatcher.ts +30 -0
- package/src/runtime/derivedUniforms/codegen.ts +34 -13
- package/src/runtime/derivedUniforms/dispatch.ts +6 -0
- package/src/runtime/derivedUniforms/records.ts +70 -15
- package/src/runtime/derivedUniforms/sceneIntegration.ts +19 -4
- package/src/runtime/flattenTree.ts +47 -2
- package/src/runtime/heapAdapter.ts +43 -5
- package/src/runtime/heapDecoder.ts +8 -3
- package/src/runtime/heapEffect.ts +44 -2
- package/src/runtime/heapEffectIR.ts +54 -11
- package/src/runtime/heapEligibility.ts +39 -12
- package/src/runtime/heapIrBuilders.ts +50 -2
- package/src/runtime/heapScene/chunkedArena.ts +29 -94
- package/src/runtime/heapScene/freelist.ts +3 -3
- package/src/runtime/heapScene/pools.ts +340 -218
- package/src/runtime/heapScene.ts +826 -142
- package/src/runtime/heapShaderFamily.ts +21 -0
- package/src/runtime/hybridScene.ts +43 -3
- package/src/runtime/index.ts +5 -0
- package/src/runtime/renderTask.ts +9 -0
- package/src/runtime/runtime.ts +18 -0
- package/src/runtime/textureAtlas/atlasMipGutterKernel.ts +52 -3
- package/src/runtime/textureAtlas/atlasPool.ts +28 -2
- package/src/window/loop.ts +32 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IDisposable } from "@aardworx/wombat.adaptive";
|
|
2
|
-
import { AttributeArena
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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.
|
|
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
|
-
|
|
191
|
-
|
|
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
|
|
194
|
-
|
|
140
|
+
const remap = this._chunks[i].compact(device, wasteFloorBytes, force);
|
|
141
|
+
if (remap.size > 0)
|
|
142
|
+
out.push({ chunkIdx: i, remap });
|
|
195
143
|
}
|
|
196
|
-
|
|
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
|
|
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":"AAAA,mEAAmE;AACnE,EAAE;AACF,sEAAsE;AACtE,kEAAkE;AAClE,kEAAkE;AAClE,gEAAgE;AAChE,qEAAqE;AACrE,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,oEAAoE;AACpE,6BAA6B;AAG7B,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,
|
|
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
|
-
* `
|
|
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
|
|
2
|
-
//
|
|
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
|
-
* `
|
|
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":"AAAA,
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAqC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pools.d.ts","sourceRoot":"","sources":["../../../src/runtime/heapScene/pools.ts"],"names":[],"mappings":"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"}
|