@aardworx/wombat.rendering 0.21.23 → 0.22.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/runtime/heapEffect.d.ts +19 -16
- package/dist/runtime/heapEffect.d.ts.map +1 -1
- package/dist/runtime/heapEffect.js +35 -37
- package/dist/runtime/heapEffect.js.map +1 -1
- package/dist/runtime/heapScene.d.ts.map +1 -1
- package/dist/runtime/heapScene.js +23 -31
- package/dist/runtime/heapScene.js.map +1 -1
- package/dist/runtime/runtime.d.ts +3 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +3 -1
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts +2 -2
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js +6 -6
- package/dist/runtime/textureAtlas/atlasMipGutterKernel.js.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.d.ts +30 -8
- package/dist/runtime/textureAtlas/atlasPool.d.ts.map +1 -1
- package/dist/runtime/textureAtlas/atlasPool.js +82 -38
- package/dist/runtime/textureAtlas/atlasPool.js.map +1 -1
- package/package.json +1 -1
- package/src/runtime/heapEffect.ts +35 -37
- package/src/runtime/heapScene.ts +23 -31
- package/src/runtime/runtime.ts +5 -1
- package/src/runtime/textureAtlas/atlasMipGutterKernel.ts +6 -3
- package/src/runtime/textureAtlas/atlasPool.ts +95 -40
|
@@ -52,6 +52,9 @@ export interface RuntimeOptions {
|
|
|
52
52
|
* 8192 — 4× resident-texture capacity for streaming scenes. Must be
|
|
53
53
|
* set at Runtime construction (before shader generation). */
|
|
54
54
|
readonly atlasPageSize?: number;
|
|
55
|
+
/** Max atlas pages (texture-array layers) per format family (default
|
|
56
|
+
* 16). Layers grow on demand; this caps the growth. */
|
|
57
|
+
readonly atlasMaxPages?: number;
|
|
55
58
|
/**
|
|
56
59
|
* Heap arena compaction toggle — threaded into
|
|
57
60
|
* `BuildHeapSceneOptions.enableCompaction`. Streaming apps with steady
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAC7F;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;kEAE8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,oFAAoF;IACpF,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CAC7C;AAeD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAEpC,IAAI,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,KAAK,cAAc,CAAC;IAC7F;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;kEAE8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;4DACwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,oFAAoF;IACpF,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CAC7C;AAeD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAEpC,IAAI,EAAE,cAAc;IAgChC,IAAI,MAAM,IAAI,SAAS,CAA4B;IACnD,IAAI,YAAY,IAAI,OAAO,CAA6B;IAqBxD;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW;IAS/E;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,GAAG,cAAc;IAKlE;;;;;;;OAOG;IACH,UAAU,IAAI,IAAI;CAQnB"}
|
package/dist/runtime/runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { setAtlasPageSize } from "./textureAtlas/atlasPool.js";
|
|
1
|
+
import { setAtlasPageSize, setAtlasMaxPages } from "./textureAtlas/atlasPool.js";
|
|
2
2
|
import { compileRenderTask } from "./renderTask.js";
|
|
3
3
|
import { renderTo } from "./renderTo.js";
|
|
4
4
|
/**
|
|
@@ -26,6 +26,8 @@ export class Runtime {
|
|
|
26
26
|
constructor(opts) {
|
|
27
27
|
if (opts.atlasPageSize !== undefined)
|
|
28
28
|
setAtlasPageSize(opts.atlasPageSize);
|
|
29
|
+
if (opts.atlasMaxPages !== undefined)
|
|
30
|
+
setAtlasMaxPages(opts.atlasMaxPages);
|
|
29
31
|
this.ctx = {
|
|
30
32
|
device: opts.device,
|
|
31
33
|
compileEffect: opts.compileEffect ?? ((e, sig) => e.compile({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ export declare function submitMipGutterBatch(device: GPUDevice, batch: MipGutter
|
|
|
43
43
|
* fallback for `external` sources when the GPU staging path is
|
|
44
44
|
* unavailable. Caller must ensure `page` has COPY_DST usage.
|
|
45
45
|
*/
|
|
46
|
-
export declare function buildMipsAndGutterOnGpu(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcPixels: Uint8Array, srcW: number, srcH: number, mips: readonly MipSlot[], batch?: MipGutterBatch): void;
|
|
46
|
+
export declare function buildMipsAndGutterOnGpu(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcPixels: Uint8Array, srcW: number, srcH: number, mips: readonly MipSlot[], batch?: MipGutterBatch, pageLayer?: number): void;
|
|
47
47
|
/**
|
|
48
48
|
* Build the mip pyramid + gutters on GPU from a **staging texture**
|
|
49
49
|
* and upload the result to a sub-rect of `page`. `srcTex` holds the
|
|
@@ -58,5 +58,5 @@ export declare function buildMipsAndGutterOnGpu(device: GPUDevice, page: GPUText
|
|
|
58
58
|
* submission completes (`device.queue.onSubmittedWorkDone()`); this
|
|
59
59
|
* function only reads it. `srcTex` must have TEXTURE_BINDING usage.
|
|
60
60
|
*/
|
|
61
|
-
export declare function buildMipsAndGutterFromTexture(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcTex: GPUTexture, srcW: number, srcH: number, mips: readonly MipSlot[], batch?: MipGutterBatch): void;
|
|
61
|
+
export declare function buildMipsAndGutterFromTexture(device: GPUDevice, page: GPUTexture, subRectX: number, subRectY: number, boundsW: number, boundsH: number, srcTex: GPUTexture, srcW: number, srcH: number, mips: readonly MipSlot[], batch?: MipGutterBatch, pageLayer?: number): void;
|
|
62
62
|
//# sourceMappingURL=atlasMipGutterKernel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasMipGutterKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"AA+KA;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;IACrC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAKrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAanF;
|
|
1
|
+
{"version":3,"file":"atlasMipGutterKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"AA+KA;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;IACrC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,cAAc,CAKrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAanF;AA4JD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,CAAC,EAAE,cAAc,EACtB,SAAS,SAAI,GACZ,IAAI,CAoCN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAC1B,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,CAAC,EAAE,cAAc,EACtB,SAAS,SAAI,GACZ,IAAI,CAYN"}
|
|
@@ -196,7 +196,7 @@ export function submitMipGutterBatch(device, batch) {
|
|
|
196
196
|
* `mappedAtCreation` and fill it before we run; the `texture` path
|
|
197
197
|
* passes a plain (already-created) buffer.
|
|
198
198
|
*/
|
|
199
|
-
function runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, mip0Src, batch) {
|
|
199
|
+
function runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, mip0Src, batch, pageLayer = 0) {
|
|
200
200
|
const k = getKernel(device);
|
|
201
201
|
const bufStrideU32 = rowBytes / 4;
|
|
202
202
|
const mip0 = mips[0];
|
|
@@ -278,7 +278,7 @@ function runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowByt
|
|
|
278
278
|
pass.end();
|
|
279
279
|
}
|
|
280
280
|
// Final upload: buffer → page.
|
|
281
|
-
enc.copyBufferToTexture({ buffer: scratch, bytesPerRow: rowBytes, rowsPerImage: boundsH }, { texture: page, origin: { x: subRectX, y: subRectY, z:
|
|
281
|
+
enc.copyBufferToTexture({ buffer: scratch, bytesPerRow: rowBytes, rowsPerImage: boundsH }, { texture: page, origin: { x: subRectX, y: subRectY, z: pageLayer } }, { width: boundsW, height: boundsH, depthOrArrayLayers: 1 });
|
|
282
282
|
if (batch !== undefined) {
|
|
283
283
|
batch.jobs++;
|
|
284
284
|
batch.trash.push(scratch, ...ubos);
|
|
@@ -310,7 +310,7 @@ function scratchGeom(boundsW, boundsH) {
|
|
|
310
310
|
* fallback for `external` sources when the GPU staging path is
|
|
311
311
|
* unavailable. Caller must ensure `page` has COPY_DST usage.
|
|
312
312
|
*/
|
|
313
|
-
export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, boundsW, boundsH, srcPixels, srcW, srcH, mips, batch) {
|
|
313
|
+
export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, boundsW, boundsH, srcPixels, srcW, srcH, mips, batch, pageLayer = 0) {
|
|
314
314
|
if (mips.length === 0)
|
|
315
315
|
return;
|
|
316
316
|
const { rowBytes, bufSize } = scratchGeom(boundsW, boundsH);
|
|
@@ -340,7 +340,7 @@ export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, bounds
|
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
scratch.unmap();
|
|
343
|
-
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "prefilled" }, batch);
|
|
343
|
+
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "prefilled" }, batch, pageLayer);
|
|
344
344
|
}
|
|
345
345
|
/**
|
|
346
346
|
* Build the mip pyramid + gutters on GPU from a **staging texture**
|
|
@@ -356,7 +356,7 @@ export function buildMipsAndGutterOnGpu(device, page, subRectX, subRectY, bounds
|
|
|
356
356
|
* submission completes (`device.queue.onSubmittedWorkDone()`); this
|
|
357
357
|
* function only reads it. `srcTex` must have TEXTURE_BINDING usage.
|
|
358
358
|
*/
|
|
359
|
-
export function buildMipsAndGutterFromTexture(device, page, subRectX, subRectY, boundsW, boundsH, srcTex, srcW, srcH, mips, batch) {
|
|
359
|
+
export function buildMipsAndGutterFromTexture(device, page, subRectX, subRectY, boundsW, boundsH, srcTex, srcW, srcH, mips, batch, pageLayer = 0) {
|
|
360
360
|
if (mips.length === 0)
|
|
361
361
|
return;
|
|
362
362
|
const { rowBytes, bufSize } = scratchGeom(boundsW, boundsH);
|
|
@@ -365,6 +365,6 @@ export function buildMipsAndGutterFromTexture(device, page, subRectX, subRectY,
|
|
|
365
365
|
size: bufSize,
|
|
366
366
|
usage: 0x80 /* STORAGE */ | 0x04 /* COPY_SRC */ | 0x08 /* COPY_DST */,
|
|
367
367
|
});
|
|
368
|
-
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "texture", tex: srcTex }, batch);
|
|
368
|
+
runMipGutter(device, page, subRectX, subRectY, boundsW, boundsH, rowBytes, scratch, srcW, srcH, mips, { kind: "texture", tex: srcTex }, batch, pageLayer);
|
|
369
369
|
}
|
|
370
370
|
//# sourceMappingURL=atlasMipGutterKernel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasMipGutterKernel.js","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atlasMipGutterKernel.js","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,12 @@ export declare const ATLAS_MAX_DIM = 1024;
|
|
|
10
10
|
* `switch pageRef` runs an N-way ladder; the BGL declares N consecutive
|
|
11
11
|
* texture slots per format. Allocations beyond this throw.
|
|
12
12
|
*/
|
|
13
|
-
export declare const ATLAS_MAX_PAGES_PER_FORMAT =
|
|
13
|
+
export declare const ATLAS_MAX_PAGES_PER_FORMAT = 16;
|
|
14
|
+
/** Runtime-configurable layer cap (RuntimeOptions.atlasMaxPages).
|
|
15
|
+
* Routed through globalThis like the page size — bundlers can
|
|
16
|
+
* duplicate this module across entry points. */
|
|
17
|
+
export declare function atlasMaxPagesNow(): number;
|
|
18
|
+
export declare function setAtlasMaxPages(n: number): void;
|
|
14
19
|
/** Page edge in texels. Default suits small-memory devices; desktops
|
|
15
20
|
* pass RuntimeOptions.atlasPageSize = 8192 (must be set BEFORE any
|
|
16
21
|
* page allocation or shader generation). */
|
|
@@ -23,17 +28,19 @@ export declare const atlasFormatIndex: (f: AtlasPageFormat) => number;
|
|
|
23
28
|
export interface AtlasPage {
|
|
24
29
|
readonly format: AtlasPageFormat;
|
|
25
30
|
/**
|
|
26
|
-
* The
|
|
27
|
-
*
|
|
31
|
+
* The format family's shared `texture_2d_array` — this page is layer
|
|
32
|
+
* `pageId` of it. NOT stable across growth: adding pages past the
|
|
33
|
+
* current layer count reallocates the array (existing layers are
|
|
34
|
+
* GPU-copied across and `onPageAdded` fires so bind groups rebuild).
|
|
35
|
+
* Always read through this getter, never cache the GPUTexture.
|
|
28
36
|
*/
|
|
29
37
|
readonly texture: GPUTexture;
|
|
30
38
|
/** Immutable packer state — `tryAdd`/`remove` produce new instances. */
|
|
31
39
|
packing: TexturePacking<number>;
|
|
32
40
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* `atlasSrgb<i>` declaration.
|
|
41
|
+
* Layer index in the format's array texture (0..N-1). Same value
|
|
42
|
+
* flows into the drawHeader `pageRef` field; the shader indexes the
|
|
43
|
+
* array with it at runtime.
|
|
37
44
|
*/
|
|
38
45
|
readonly pageId: number;
|
|
39
46
|
}
|
|
@@ -110,6 +117,8 @@ export declare class AtlasPool {
|
|
|
110
117
|
private readonly device;
|
|
111
118
|
private readonly pagesByFormat;
|
|
112
119
|
private readonly pageAddedListeners;
|
|
120
|
+
/** Per-format shared array texture (pages = layers). */
|
|
121
|
+
private readonly storesByFormat;
|
|
113
122
|
/**
|
|
114
123
|
* Keyed by `aval<ITexture>` under the aval equality protocol: a
|
|
115
124
|
* `HashTable` (not a JS `Map`) so two distinct `AVal.constant(tex)`
|
|
@@ -184,7 +193,20 @@ export declare class AtlasPool {
|
|
|
184
193
|
*
|
|
185
194
|
* Disabled in node mock-GPU mode (which lacks queue.onSubmittedWorkDone). */
|
|
186
195
|
private canUseGpuKernel;
|
|
196
|
+
/**
|
|
197
|
+
* Ensure the format's array texture has at least `layers` layers.
|
|
198
|
+
* Growth allocates a fresh array (pow2 steps up to 8, then +2, capped
|
|
199
|
+
* at `atlasMaxPagesNow()`), copies every existing layer across in one
|
|
200
|
+
* `copyTextureToTexture`, and destroys the old texture (safe right
|
|
201
|
+
* after submit — already-submitted work completes before destruction).
|
|
202
|
+
* Callers fire `onPageAdded` afterwards, which rebuilds bind groups —
|
|
203
|
+
* so the stale-texture window never reaches a render pass.
|
|
204
|
+
*/
|
|
205
|
+
private ensureLayers;
|
|
187
206
|
private allocatePage;
|
|
207
|
+
/** The format family's current array texture (undefined before the
|
|
208
|
+
* first page). Bind-group building reads this — pages are layers. */
|
|
209
|
+
textureFor(format: AtlasPageFormat): GPUTexture | undefined;
|
|
188
210
|
/**
|
|
189
211
|
* Tier-S eligibility: dimension threshold + supported format. If
|
|
190
212
|
* this returns null, the caller should route the texture down the
|
|
@@ -254,7 +276,7 @@ export declare class AtlasPool {
|
|
|
254
276
|
* happens lazily on packer pressure during a subsequent `acquire`.
|
|
255
277
|
*/
|
|
256
278
|
evictIdle(): number;
|
|
257
|
-
/** Destroy
|
|
279
|
+
/** Destroy the per-format array textures. The pool becomes unusable. */
|
|
258
280
|
dispose(): void;
|
|
259
281
|
private uploadBatch;
|
|
260
282
|
/** Open (or keep) a shared upload batch. Pair with `flushUploadBatch`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlasPool.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasPool.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,GAAG,EAAO,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,IAAI,EAAa,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM7C,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,0CAA0C;AAC1C,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC;;;;GAIG;AAQH,eAAO,MAAM,0BAA0B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"atlasPool.d.ts","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,14 +40,23 @@ export const ATLAS_MAX_DIM = 1024;
|
|
|
40
40
|
* `switch pageRef` runs an N-way ladder; the BGL declares N consecutive
|
|
41
41
|
* texture slots per format. Allocations beyond this throw.
|
|
42
42
|
*/
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// (
|
|
49
|
-
//
|
|
50
|
-
export const ATLAS_MAX_PAGES_PER_FORMAT =
|
|
43
|
+
// Pages are LAYERS of one `texture_2d_array` per format: the shader
|
|
44
|
+
// indexes `pageRef` at runtime, so the count is no longer pinned to a
|
|
45
|
+
// binding ladder. Layers grow on demand (new array texture + GPU-side
|
|
46
|
+
// layer copy + bind-group rebuild via onPageAdded); this cap only
|
|
47
|
+
// bounds the growth so a runaway streaming scene can't eat unbounded
|
|
48
|
+
// VRAM (16 × 4096² × rgba8 ≈ 1 GB per format family, lazily reached).
|
|
49
|
+
// Configurable via RuntimeOptions.atlasMaxPages.
|
|
50
|
+
export const ATLAS_MAX_PAGES_PER_FORMAT = 16;
|
|
51
|
+
/** Runtime-configurable layer cap (RuntimeOptions.atlasMaxPages).
|
|
52
|
+
* Routed through globalThis like the page size — bundlers can
|
|
53
|
+
* duplicate this module across entry points. */
|
|
54
|
+
export function atlasMaxPagesNow() {
|
|
55
|
+
return (globalThis.__wombatAtlasMaxPages ?? ATLAS_MAX_PAGES_PER_FORMAT);
|
|
56
|
+
}
|
|
57
|
+
export function setAtlasMaxPages(n) {
|
|
58
|
+
globalThis.__wombatAtlasMaxPages = n;
|
|
59
|
+
}
|
|
51
60
|
/** Page edge in texels. Default suits small-memory devices; desktops
|
|
52
61
|
* pass RuntimeOptions.atlasPageSize = 8192 (must be set BEFORE any
|
|
53
62
|
* page allocation or shader generation). */
|
|
@@ -152,6 +161,8 @@ export class AtlasPool {
|
|
|
152
161
|
device;
|
|
153
162
|
pagesByFormat = new Map();
|
|
154
163
|
pageAddedListeners = new Map();
|
|
164
|
+
/** Per-format shared array texture (pages = layers). */
|
|
165
|
+
storesByFormat = new Map();
|
|
155
166
|
/**
|
|
156
167
|
* Keyed by `aval<ITexture>` under the aval equality protocol: a
|
|
157
168
|
* `HashTable` (not a JS `Map`) so two distinct `AVal.constant(tex)`
|
|
@@ -202,7 +213,7 @@ export class AtlasPool {
|
|
|
202
213
|
/** True while every page of `format` is packed with live (referenced) entries. */
|
|
203
214
|
isFull(format) {
|
|
204
215
|
const pages = this.pagesByFormat.get(format);
|
|
205
|
-
if (pages === undefined || pages.length <
|
|
216
|
+
if (pages === undefined || pages.length < atlasMaxPagesNow())
|
|
206
217
|
return false;
|
|
207
218
|
for (const e of this.lru.values())
|
|
208
219
|
if (e.format === format)
|
|
@@ -252,19 +263,34 @@ export class AtlasPool {
|
|
|
252
263
|
canUseGpuKernel(_page) {
|
|
253
264
|
return typeof this.device.queue.onSubmittedWorkDone === "function";
|
|
254
265
|
}
|
|
255
|
-
|
|
266
|
+
/**
|
|
267
|
+
* Ensure the format's array texture has at least `layers` layers.
|
|
268
|
+
* Growth allocates a fresh array (pow2 steps up to 8, then +2, capped
|
|
269
|
+
* at `atlasMaxPagesNow()`), copies every existing layer across in one
|
|
270
|
+
* `copyTextureToTexture`, and destroys the old texture (safe right
|
|
271
|
+
* after submit — already-submitted work completes before destruction).
|
|
272
|
+
* Callers fire `onPageAdded` afterwards, which rebuilds bind groups —
|
|
273
|
+
* so the stale-texture window never reaches a render pass.
|
|
274
|
+
*/
|
|
275
|
+
ensureLayers(format, layers) {
|
|
276
|
+
const cap = atlasMaxPagesNow();
|
|
277
|
+
if (layers > cap) {
|
|
278
|
+
throw new Error(`AtlasPool: layer request ${layers} exceeds atlasMaxPages ${cap}`);
|
|
279
|
+
}
|
|
280
|
+
const store = this.storesByFormat.get(format);
|
|
281
|
+
if (store !== undefined && store.layers >= layers)
|
|
282
|
+
return store;
|
|
283
|
+
let next = store?.layers ?? 0;
|
|
284
|
+
while (next < layers)
|
|
285
|
+
next = next === 0 ? 1 : next < 8 ? next * 2 : next + 2;
|
|
286
|
+
next = Math.min(next, cap);
|
|
256
287
|
// The compute mip+gutter kernel works for *all* page formats: it
|
|
257
|
-
// builds the pyramid + gutters in a scratch storage *buffer*
|
|
258
|
-
//
|
|
259
|
-
//
|
|
260
|
-
// included (the copy reinterprets the bytes; no colour conversion).
|
|
261
|
-
// Pages therefore only need TEXTURE_BINDING | COPY_DST | COPY_SRC |
|
|
262
|
-
// RENDER_ATTACHMENT (no STORAGE_BINDING). The CPU `buildExtended-
|
|
263
|
-
// WithGutter` path remains only as a fallback for the node mock-GPU
|
|
264
|
-
// device and headless-without-canvas edge cases.
|
|
288
|
+
// builds the pyramid + gutters in a scratch storage *buffer* and
|
|
289
|
+
// finishes with `copyBufferToTexture` into the layer, so pages
|
|
290
|
+
// never need STORAGE_BINDING — srgb included.
|
|
265
291
|
const texture = this.device.createTexture({
|
|
266
|
-
label: `atlas/${format}
|
|
267
|
-
size: { width: atlasPageSizeNow(), height: atlasPageSizeNow(), depthOrArrayLayers:
|
|
292
|
+
label: `atlas/${format}[${next}]`,
|
|
293
|
+
size: { width: atlasPageSizeNow(), height: atlasPageSizeNow(), depthOrArrayLayers: next },
|
|
268
294
|
format,
|
|
269
295
|
mipLevelCount: 1,
|
|
270
296
|
usage: GPUTextureUsage.TEXTURE_BINDING |
|
|
@@ -272,13 +298,32 @@ export class AtlasPool {
|
|
|
272
298
|
GPUTextureUsage.COPY_SRC |
|
|
273
299
|
GPUTextureUsage.RENDER_ATTACHMENT,
|
|
274
300
|
});
|
|
301
|
+
if (store !== undefined && store.layers > 0) {
|
|
302
|
+
const enc = this.device.createCommandEncoder({ label: `atlas/${format}/grow` });
|
|
303
|
+
enc.copyTextureToTexture({ texture: store.texture }, { texture }, { width: atlasPageSizeNow(), height: atlasPageSizeNow(), depthOrArrayLayers: store.layers });
|
|
304
|
+
this.device.queue.submit([enc.finish()]);
|
|
305
|
+
store.texture.destroy();
|
|
306
|
+
}
|
|
307
|
+
const fresh = { texture, layers: next };
|
|
308
|
+
this.storesByFormat.set(format, fresh);
|
|
309
|
+
return fresh;
|
|
310
|
+
}
|
|
311
|
+
allocatePage(format, pageId) {
|
|
312
|
+
const pool = this;
|
|
313
|
+
this.ensureLayers(format, pageId + 1);
|
|
275
314
|
return {
|
|
276
315
|
format,
|
|
277
|
-
|
|
316
|
+
// getter: growth reallocates the array; pages must never cache it
|
|
317
|
+
get texture() { return pool.storesByFormat.get(format).texture; },
|
|
278
318
|
packing: TexturePacking.empty(new V2i(atlasPageSizeNow(), atlasPageSizeNow()), false),
|
|
279
319
|
pageId,
|
|
280
320
|
};
|
|
281
321
|
}
|
|
322
|
+
/** The format family's current array texture (undefined before the
|
|
323
|
+
* first page). Bind-group building reads this — pages are layers. */
|
|
324
|
+
textureFor(format) {
|
|
325
|
+
return this.storesByFormat.get(format)?.texture;
|
|
326
|
+
}
|
|
282
327
|
/**
|
|
283
328
|
* Tier-S eligibility: dimension threshold + supported format. If
|
|
284
329
|
* this returns null, the caller should route the texture down the
|
|
@@ -402,8 +447,8 @@ export class AtlasPool {
|
|
|
402
447
|
if (fit !== null)
|
|
403
448
|
return fit;
|
|
404
449
|
}
|
|
405
|
-
// Allocate a fresh page if we haven't hit the
|
|
406
|
-
if (pages.length >=
|
|
450
|
+
// Allocate a fresh page (array layer) if we haven't hit the cap.
|
|
451
|
+
if (pages.length >= atlasMaxPagesNow()) {
|
|
407
452
|
// The atlas is genuinely full: every page is packed with entries that are
|
|
408
453
|
// still referenced, so there is nothing to evict. That is resource
|
|
409
454
|
// pressure, NOT a program error — and throwing turned it into a fatal
|
|
@@ -591,12 +636,11 @@ export class AtlasPool {
|
|
|
591
636
|
}
|
|
592
637
|
return n;
|
|
593
638
|
}
|
|
594
|
-
/** Destroy
|
|
639
|
+
/** Destroy the per-format array textures. The pool becomes unusable. */
|
|
595
640
|
dispose() {
|
|
596
|
-
for (const [,
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
}
|
|
641
|
+
for (const [, store] of this.storesByFormat)
|
|
642
|
+
store.texture.destroy();
|
|
643
|
+
this.storesByFormat.clear();
|
|
600
644
|
this.pagesByFormat.clear();
|
|
601
645
|
this.pageAddedListeners.clear();
|
|
602
646
|
this.entriesByAval.clear();
|
|
@@ -726,7 +770,7 @@ export class AtlasPool {
|
|
|
726
770
|
GPUTextureUsage.RENDER_ATTACHMENT,
|
|
727
771
|
});
|
|
728
772
|
this.device.queue.copyExternalImageToTexture({ source: host.source }, { texture: staging }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
729
|
-
buildMipsAndGutterFromTexture(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, staging, w, h, slots, this.uploadBatch ?? undefined);
|
|
773
|
+
buildMipsAndGutterFromTexture(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, staging, w, h, slots, this.uploadBatch ?? undefined, page.pageId);
|
|
730
774
|
if (this.uploadBatch !== null)
|
|
731
775
|
this.uploadBatch.trashTextures.push(staging);
|
|
732
776
|
else
|
|
@@ -741,7 +785,7 @@ export class AtlasPool {
|
|
|
741
785
|
else {
|
|
742
786
|
const px = this.extractPixels(host, w, h);
|
|
743
787
|
if (px !== null) {
|
|
744
|
-
buildMipsAndGutterOnGpu(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, px, w, h, slots);
|
|
788
|
+
buildMipsAndGutterOnGpu(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, px, w, h, slots, undefined, page.pageId);
|
|
745
789
|
return;
|
|
746
790
|
}
|
|
747
791
|
// `raw` extraction shouldn't fail; if it somehow does, fall
|
|
@@ -779,7 +823,7 @@ export class AtlasPool {
|
|
|
779
823
|
// build gutter-extended buffer, writeTexture once.
|
|
780
824
|
const mipCanvas = this.makeCanvas(mw, mh);
|
|
781
825
|
if (mipCanvas === null) {
|
|
782
|
-
this.device.queue.copyExternalImageToTexture({ source: mip }, { texture: page.texture, origin: { x: mx, y: my, z:
|
|
826
|
+
this.device.queue.copyExternalImageToTexture({ source: mip }, { texture: page.texture, origin: { x: mx, y: my, z: page.pageId } }, { width: mw, height: mh, depthOrArrayLayers: 1 });
|
|
783
827
|
continue;
|
|
784
828
|
}
|
|
785
829
|
const ctx = mipCanvas.getContext("2d");
|
|
@@ -788,7 +832,7 @@ export class AtlasPool {
|
|
|
788
832
|
ctx.drawImage(mip, 0, 0, mw, mh);
|
|
789
833
|
const mipPx = new Uint8Array(ctx.getImageData(0, 0, mw, mh).data.buffer);
|
|
790
834
|
const ext = AtlasPool.buildExtendedWithGutter(mipPx, mw, mh);
|
|
791
|
-
this.writeRgba8Padded(page.texture, mx - 2, my - 2, ext, mw + 4, mh + 4);
|
|
835
|
+
this.writeRgba8Padded(page.texture, mx - 2, my - 2, ext, mw + 4, mh + 4, page.pageId);
|
|
792
836
|
}
|
|
793
837
|
}
|
|
794
838
|
/**
|
|
@@ -885,18 +929,18 @@ export class AtlasPool {
|
|
|
885
929
|
if (px === null)
|
|
886
930
|
return false;
|
|
887
931
|
const ext = AtlasPool.buildExtendedWithGutter(px, w, h);
|
|
888
|
-
this.writeRgba8Padded(page.texture, x - 2, y - 2, ext, w + 4, h + 4);
|
|
932
|
+
this.writeRgba8Padded(page.texture, x - 2, y - 2, ext, w + 4, h + 4, page.pageId);
|
|
889
933
|
return true;
|
|
890
934
|
}
|
|
891
935
|
uploadLevel(page, x, y, host, w, h) {
|
|
892
936
|
if (host.kind === "external") {
|
|
893
|
-
this.device.queue.copyExternalImageToTexture({ source: host.source }, { texture: page.texture, origin: { x, y, z:
|
|
937
|
+
this.device.queue.copyExternalImageToTexture({ source: host.source }, { texture: page.texture, origin: { x, y, z: page.pageId } }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
894
938
|
return;
|
|
895
939
|
}
|
|
896
940
|
const data = host.data instanceof ArrayBuffer
|
|
897
941
|
? new Uint8Array(host.data)
|
|
898
942
|
: new Uint8Array(host.data.buffer, host.data.byteOffset, host.data.byteLength);
|
|
899
|
-
this.writeRgba8Padded(page.texture, x, y, data, w, h);
|
|
943
|
+
this.writeRgba8Padded(page.texture, x, y, data, w, h, page.pageId);
|
|
900
944
|
}
|
|
901
945
|
/**
|
|
902
946
|
* Upload `src` (RGBA8, w×h) to `texture` at (x, y) via `writeTexture`.
|
|
@@ -904,11 +948,11 @@ export class AtlasPool {
|
|
|
904
948
|
* the source has more than one row, so non-256-aligned widths need
|
|
905
949
|
* a padded buffer.
|
|
906
950
|
*/
|
|
907
|
-
writeRgba8Padded(texture, x, y, src, w, h) {
|
|
951
|
+
writeRgba8Padded(texture, x, y, src, w, h, layer = 0) {
|
|
908
952
|
const srcStride = w * 4;
|
|
909
953
|
if (h === 1 || srcStride % 256 === 0) {
|
|
910
954
|
// Single row or already aligned — pass straight through.
|
|
911
|
-
this.device.queue.writeTexture({ texture, origin: { x, y, z:
|
|
955
|
+
this.device.queue.writeTexture({ texture, origin: { x, y, z: layer } }, src, { bytesPerRow: srcStride, rowsPerImage: h }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
912
956
|
return;
|
|
913
957
|
}
|
|
914
958
|
const dstStride = Math.ceil(srcStride / 256) * 256;
|
|
@@ -916,7 +960,7 @@ export class AtlasPool {
|
|
|
916
960
|
for (let row = 0; row < h; row++) {
|
|
917
961
|
padded.set(src.subarray(row * srcStride, (row + 1) * srcStride), row * dstStride);
|
|
918
962
|
}
|
|
919
|
-
this.device.queue.writeTexture({ texture, origin: { x, y, z:
|
|
963
|
+
this.device.queue.writeTexture({ texture, origin: { x, y, z: layer } }, padded, { bytesPerRow: dstStride, rowsPerImage: h }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
920
964
|
}
|
|
921
965
|
/**
|
|
922
966
|
* Produce a `CanvasImageSource` we can feed to `drawImage` for
|