@aardworx/wombat.rendering 0.21.23 → 0.22.1
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 +91 -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 +102 -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":"AAAA,uEAAuE;AACvE,gEAAgE;AAChE,2DAA2D;AAC3D,EAAE;AACF,eAAe;AACf,eAAe;AACf,mEAAmE;AACnE,iEAAiE;AACjE,gEAAgE;AAChE,kEAAkE;AAClE,qEAAqE;AACrE,mDAAmD;AACnD,EAAE;AACF,eAAe;AACf,mEAAmE;AACnE,kEAAkE;AAClE,4CAA4C;AAC5C,iEAAiE;AACjE,qEAAqE;AACrE,mEAAmE;AACnE,6DAA6D;AAC7D,8DAA8D;AAC9D,kEAAkE;AAClE,mEAAmE;AACnE,4CAA4C;AAC5C,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,2DAA2D;AAC3D,qEAAqE;AACrE,kEAAkE;AAClE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AAEtE,MAAM,IAAI,GAAG,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFtB,CAAC;AAYF,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0B,CAAC;AAErD,SAAS,SAAS,CAAC,MAAiB;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACzF,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACtD,KAAK,EAAE,+BAA+B;QACtC,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;SAC3E;KACF,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACtD,KAAK,EAAE,+BAA+B;QACtC,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;SACrG;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;QAC9D,KAAK,EAAE,gCAAgC;KACxC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAClD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC5D,KAAK,EAAE,8BAA8B;KACtC,CAAC,CAAC;IACH,MAAM,2BAA2B,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC/D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE;QACzE,KAAK,EAAE,2CAA2C;KACnD,CAAC,CAAC;IACH,MAAM,KAAK,GAAgB;QACzB,kBAAkB,EAAE,kBAAkB;QACtC,gBAAgB,EAAE,cAAc,EAAE,2BAA2B;KAC9D,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AA8BD,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QACnE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAqB;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,2DAA2D;QAC3D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAChD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAWD;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CACnB,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,QAAgB,EAChB,OAAkB,EAClB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,OAAmB,EACnB,KAAsB;IAEtB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IAEtB,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS;QAC7B,CAAC,CAAC,KAAK,CAAC,GAAG;QACX,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,CACd,IAA8B,EAAE,IAA8B,EAC9D,IAA8B,EAAE,IAA8B,EACnD,EAAE;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9B,IAAI,EAAE,EAAE,EAAE,iBAAiB;YAC3B,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc;YAC/C,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,GAAc,EAAgB,EAAE,CACjD,MAAM,CAAC,eAAe,CAAC;QACrB,MAAM,EAAE,CAAC,CAAC,kBAAkB;QAC5B,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YAC7C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;SAC1C;KACF,CAAC,CAAC;IAEL,mEAAmE;IACnE,qEAAqE;IACrE,8DAA8D;IAC9D,sEAAsE;IACtE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;YAChC,MAAM,EAAE,CAAC,CAAC,kBAAkB;YAC5B,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;gBAC7C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBACzC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;aACnD;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,+DAA+D;IAC/D,kEAAkE;IAClE,mBAAmB;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,4BAA4B,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,oEAAoE;IACpE,iEAAiE;IACjE,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,0BAA0B,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CACrB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,CAAC,CACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,mBAAmB,CACrB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,EACjE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAC7D,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAC3D,CAAC;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,mDAAmD;IAC7D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEpC,mEAAmE;IACnE,iDAAiD;IACjD,KAAK,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAChD,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;+DAC+D;AAC/D,SAAS,WAAW,CAAC,OAAe,EAAE,OAAe;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,SAAqB,EACrB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,KAAsB;IAEtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,2BAA2B,OAAO,IAAI,OAAO,GAAG;QACvD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;QACrE,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,mEAAmE;IACnE,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;QACC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,2DAA2D;gBAC3D,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpD,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,YAAY,CACV,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAClD,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,CAClE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,MAAkB,EAClB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,KAAsB;IAEtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,2BAA2B,OAAO,IAAI,OAAO,GAAG;QACvD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;KACtE,CAAC,CAAC;IACH,YAAY,CACV,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAClD,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,CAC7E,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"atlasMipGutterKernel.js","sourceRoot":"","sources":["../../../src/runtime/textureAtlas/atlasMipGutterKernel.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,gEAAgE;AAChE,2DAA2D;AAC3D,EAAE;AACF,eAAe;AACf,eAAe;AACf,mEAAmE;AACnE,iEAAiE;AACjE,gEAAgE;AAChE,kEAAkE;AAClE,qEAAqE;AACrE,mDAAmD;AACnD,EAAE;AACF,eAAe;AACf,mEAAmE;AACnE,kEAAkE;AAClE,4CAA4C;AAC5C,iEAAiE;AACjE,qEAAqE;AACrE,mEAAmE;AACnE,6DAA6D;AAC7D,8DAA8D;AAC9D,kEAAkE;AAClE,mEAAmE;AACnE,4CAA4C;AAC5C,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,2DAA2D;AAC3D,qEAAqE;AACrE,kEAAkE;AAClE,EAAE;AACF,qEAAqE;AACrE,sEAAsE;AAEtE,MAAM,IAAI,GAAG,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqFtB,CAAC;AAYF,MAAM,MAAM,GAAG,IAAI,OAAO,EAA0B,CAAC;AAErD,SAAS,SAAS,CAAC,MAAiB;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACzF,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACtD,KAAK,EAAE,+BAA+B;QACtC,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;SAC3E;KACF,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACtD,KAAK,EAAE,+BAA+B;QACtC,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAC1E,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;SACrG;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE;QAC9D,KAAK,EAAE,gCAAgC;KACxC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAClD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;QAC5D,KAAK,EAAE,8BAA8B;KACtC,CAAC,CAAC;IACH,MAAM,2BAA2B,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC/D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE;QACzE,KAAK,EAAE,2CAA2C;KACnD,CAAC,CAAC;IACH,MAAM,KAAK,GAAgB;QACzB,kBAAkB,EAAE,kBAAkB;QACtC,gBAAgB,EAAE,cAAc,EAAE,2BAA2B;KAC9D,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AA8BD,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QACnE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAqB;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,2DAA2D;QAC3D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAChD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAWD;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CACnB,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,QAAgB,EAChB,OAAkB,EAClB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,OAAmB,EACnB,KAAsB,EACtB,SAAS,GAAG,CAAC;IAEb,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IAEtB,MAAM,GAAG,GAAG,KAAK,KAAK,SAAS;QAC7B,CAAC,CAAC,KAAK,CAAC,GAAG;QACX,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAEpE,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,CACd,IAA8B,EAAE,IAA8B,EAC9D,IAA8B,EAAE,IAA8B,EACnD,EAAE;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9B,IAAI,EAAE,EAAE,EAAE,iBAAiB;YAC3B,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc;YAC/C,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACpB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,GAAc,EAAgB,EAAE,CACjD,MAAM,CAAC,eAAe,CAAC;QACrB,MAAM,EAAE,CAAC,CAAC,kBAAkB;QAC5B,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YAC7C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;SAC1C;KACF,CAAC,CAAC;IAEL,mEAAmE;IACnE,qEAAqE;IACrE,8DAA8D;IAC9D,sEAAsE;IACtE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,MAAM,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;YAChC,MAAM,EAAE,CAAC,CAAC,kBAAkB;YAC5B,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;gBAC7C,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBACzC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;aACnD;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,+DAA+D;IAC/D,kEAAkE;IAClE,mBAAmB;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,4BAA4B,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,oEAAoE;IACpE,iEAAiE;IACjE,yCAAyC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,0BAA0B,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CACrB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAC/B,CAAC,CACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,mBAAmB,CACrB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,EACjE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EACrE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAC3D,CAAC;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,mDAAmD;IAC7D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEpC,mEAAmE;IACnE,iDAAiD;IACjD,KAAK,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAChD,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;+DAC+D;AAC/D,SAAS,WAAW,CAAC,OAAe,EAAE,OAAe;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,SAAqB,EACrB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,KAAsB,EACtB,SAAS,GAAG,CAAC;IAEb,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,2BAA2B,OAAO,IAAI,OAAO,GAAG;QACvD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;QACrE,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,mEAAmE;IACnE,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACtB,CAAC;QACC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;gBAC7B,2DAA2D;gBAC3D,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpD,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,YAAY,CACV,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAClD,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,MAAiB,EACjB,IAAgB,EAChB,QAAgB,EAAE,QAAgB,EAClC,OAAe,EAAE,OAAe,EAChC,MAAkB,EAClB,IAAY,EAAE,IAAY,EAC1B,IAAwB,EACxB,KAAsB,EACtB,SAAS,GAAG,CAAC;IAEb,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,2BAA2B,OAAO,IAAI,OAAO,GAAG;QACvD,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;KACtE,CAAC,CAAC;IACH,YAAY,CACV,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAClD,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CACxF,CAAC;AACJ,CAAC"}
|
|
@@ -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,41 @@ export class AtlasPool {
|
|
|
272
298
|
GPUTextureUsage.COPY_SRC |
|
|
273
299
|
GPUTextureUsage.RENDER_ATTACHMENT,
|
|
274
300
|
});
|
|
301
|
+
if (store !== undefined && store.layers > 0) {
|
|
302
|
+
// An OPEN upload batch may hold copies targeting the old texture —
|
|
303
|
+
// submit it first, or those uploads land in the abandoned array
|
|
304
|
+
// (and its destroy below invalidates their submit).
|
|
305
|
+
this.flushUploadBatch();
|
|
306
|
+
const enc = this.device.createCommandEncoder({ label: `atlas/${format}/grow` });
|
|
307
|
+
enc.copyTextureToTexture({ texture: store.texture }, { texture }, { width: atlasPageSizeNow(), height: atlasPageSizeNow(), depthOrArrayLayers: store.layers });
|
|
308
|
+
this.device.queue.submit([enc.finish()]);
|
|
309
|
+
const old = store.texture;
|
|
310
|
+
const done = this.device.queue.onSubmittedWorkDone;
|
|
311
|
+
if (typeof done === "function")
|
|
312
|
+
void done.call(this.device.queue).then(() => old.destroy());
|
|
313
|
+
else
|
|
314
|
+
old.destroy(); // mock device: no pending GPU work semantics
|
|
315
|
+
}
|
|
316
|
+
const fresh = { texture, layers: next };
|
|
317
|
+
this.storesByFormat.set(format, fresh);
|
|
318
|
+
return fresh;
|
|
319
|
+
}
|
|
320
|
+
allocatePage(format, pageId) {
|
|
321
|
+
const pool = this;
|
|
322
|
+
this.ensureLayers(format, pageId + 1);
|
|
275
323
|
return {
|
|
276
324
|
format,
|
|
277
|
-
|
|
325
|
+
// getter: growth reallocates the array; pages must never cache it
|
|
326
|
+
get texture() { return pool.storesByFormat.get(format).texture; },
|
|
278
327
|
packing: TexturePacking.empty(new V2i(atlasPageSizeNow(), atlasPageSizeNow()), false),
|
|
279
328
|
pageId,
|
|
280
329
|
};
|
|
281
330
|
}
|
|
331
|
+
/** The format family's current array texture (undefined before the
|
|
332
|
+
* first page). Bind-group building reads this — pages are layers. */
|
|
333
|
+
textureFor(format) {
|
|
334
|
+
return this.storesByFormat.get(format)?.texture;
|
|
335
|
+
}
|
|
282
336
|
/**
|
|
283
337
|
* Tier-S eligibility: dimension threshold + supported format. If
|
|
284
338
|
* this returns null, the caller should route the texture down the
|
|
@@ -402,8 +456,8 @@ export class AtlasPool {
|
|
|
402
456
|
if (fit !== null)
|
|
403
457
|
return fit;
|
|
404
458
|
}
|
|
405
|
-
// Allocate a fresh page if we haven't hit the
|
|
406
|
-
if (pages.length >=
|
|
459
|
+
// Allocate a fresh page (array layer) if we haven't hit the cap.
|
|
460
|
+
if (pages.length >= atlasMaxPagesNow()) {
|
|
407
461
|
// The atlas is genuinely full: every page is packed with entries that are
|
|
408
462
|
// still referenced, so there is nothing to evict. That is resource
|
|
409
463
|
// pressure, NOT a program error — and throwing turned it into a fatal
|
|
@@ -591,12 +645,11 @@ export class AtlasPool {
|
|
|
591
645
|
}
|
|
592
646
|
return n;
|
|
593
647
|
}
|
|
594
|
-
/** Destroy
|
|
648
|
+
/** Destroy the per-format array textures. The pool becomes unusable. */
|
|
595
649
|
dispose() {
|
|
596
|
-
for (const [,
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
}
|
|
650
|
+
for (const [, store] of this.storesByFormat)
|
|
651
|
+
store.texture.destroy();
|
|
652
|
+
this.storesByFormat.clear();
|
|
600
653
|
this.pagesByFormat.clear();
|
|
601
654
|
this.pageAddedListeners.clear();
|
|
602
655
|
this.entriesByAval.clear();
|
|
@@ -726,7 +779,7 @@ export class AtlasPool {
|
|
|
726
779
|
GPUTextureUsage.RENDER_ATTACHMENT,
|
|
727
780
|
});
|
|
728
781
|
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);
|
|
782
|
+
buildMipsAndGutterFromTexture(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, staging, w, h, slots, this.uploadBatch ?? undefined, page.pageId);
|
|
730
783
|
if (this.uploadBatch !== null)
|
|
731
784
|
this.uploadBatch.trashTextures.push(staging);
|
|
732
785
|
else
|
|
@@ -741,7 +794,7 @@ export class AtlasPool {
|
|
|
741
794
|
else {
|
|
742
795
|
const px = this.extractPixels(host, w, h);
|
|
743
796
|
if (px !== null) {
|
|
744
|
-
buildMipsAndGutterOnGpu(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, px, w, h, slots);
|
|
797
|
+
buildMipsAndGutterOnGpu(this.device, page.texture, boundsX, boundsY, reservedW, reservedH, px, w, h, slots, undefined, page.pageId);
|
|
745
798
|
return;
|
|
746
799
|
}
|
|
747
800
|
// `raw` extraction shouldn't fail; if it somehow does, fall
|
|
@@ -779,7 +832,7 @@ export class AtlasPool {
|
|
|
779
832
|
// build gutter-extended buffer, writeTexture once.
|
|
780
833
|
const mipCanvas = this.makeCanvas(mw, mh);
|
|
781
834
|
if (mipCanvas === null) {
|
|
782
|
-
this.device.queue.copyExternalImageToTexture({ source: mip }, { texture: page.texture, origin: { x: mx, y: my, z:
|
|
835
|
+
this.device.queue.copyExternalImageToTexture({ source: mip }, { texture: page.texture, origin: { x: mx, y: my, z: page.pageId } }, { width: mw, height: mh, depthOrArrayLayers: 1 });
|
|
783
836
|
continue;
|
|
784
837
|
}
|
|
785
838
|
const ctx = mipCanvas.getContext("2d");
|
|
@@ -788,7 +841,7 @@ export class AtlasPool {
|
|
|
788
841
|
ctx.drawImage(mip, 0, 0, mw, mh);
|
|
789
842
|
const mipPx = new Uint8Array(ctx.getImageData(0, 0, mw, mh).data.buffer);
|
|
790
843
|
const ext = AtlasPool.buildExtendedWithGutter(mipPx, mw, mh);
|
|
791
|
-
this.writeRgba8Padded(page.texture, mx - 2, my - 2, ext, mw + 4, mh + 4);
|
|
844
|
+
this.writeRgba8Padded(page.texture, mx - 2, my - 2, ext, mw + 4, mh + 4, page.pageId);
|
|
792
845
|
}
|
|
793
846
|
}
|
|
794
847
|
/**
|
|
@@ -885,18 +938,18 @@ export class AtlasPool {
|
|
|
885
938
|
if (px === null)
|
|
886
939
|
return false;
|
|
887
940
|
const ext = AtlasPool.buildExtendedWithGutter(px, w, h);
|
|
888
|
-
this.writeRgba8Padded(page.texture, x - 2, y - 2, ext, w + 4, h + 4);
|
|
941
|
+
this.writeRgba8Padded(page.texture, x - 2, y - 2, ext, w + 4, h + 4, page.pageId);
|
|
889
942
|
return true;
|
|
890
943
|
}
|
|
891
944
|
uploadLevel(page, x, y, host, w, h) {
|
|
892
945
|
if (host.kind === "external") {
|
|
893
|
-
this.device.queue.copyExternalImageToTexture({ source: host.source }, { texture: page.texture, origin: { x, y, z:
|
|
946
|
+
this.device.queue.copyExternalImageToTexture({ source: host.source }, { texture: page.texture, origin: { x, y, z: page.pageId } }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
894
947
|
return;
|
|
895
948
|
}
|
|
896
949
|
const data = host.data instanceof ArrayBuffer
|
|
897
950
|
? new Uint8Array(host.data)
|
|
898
951
|
: new Uint8Array(host.data.buffer, host.data.byteOffset, host.data.byteLength);
|
|
899
|
-
this.writeRgba8Padded(page.texture, x, y, data, w, h);
|
|
952
|
+
this.writeRgba8Padded(page.texture, x, y, data, w, h, page.pageId);
|
|
900
953
|
}
|
|
901
954
|
/**
|
|
902
955
|
* Upload `src` (RGBA8, w×h) to `texture` at (x, y) via `writeTexture`.
|
|
@@ -904,11 +957,11 @@ export class AtlasPool {
|
|
|
904
957
|
* the source has more than one row, so non-256-aligned widths need
|
|
905
958
|
* a padded buffer.
|
|
906
959
|
*/
|
|
907
|
-
writeRgba8Padded(texture, x, y, src, w, h) {
|
|
960
|
+
writeRgba8Padded(texture, x, y, src, w, h, layer = 0) {
|
|
908
961
|
const srcStride = w * 4;
|
|
909
962
|
if (h === 1 || srcStride % 256 === 0) {
|
|
910
963
|
// Single row or already aligned — pass straight through.
|
|
911
|
-
this.device.queue.writeTexture({ texture, origin: { x, y, z:
|
|
964
|
+
this.device.queue.writeTexture({ texture, origin: { x, y, z: layer } }, src, { bytesPerRow: srcStride, rowsPerImage: h }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
912
965
|
return;
|
|
913
966
|
}
|
|
914
967
|
const dstStride = Math.ceil(srcStride / 256) * 256;
|
|
@@ -916,7 +969,7 @@ export class AtlasPool {
|
|
|
916
969
|
for (let row = 0; row < h; row++) {
|
|
917
970
|
padded.set(src.subarray(row * srcStride, (row + 1) * srcStride), row * dstStride);
|
|
918
971
|
}
|
|
919
|
-
this.device.queue.writeTexture({ texture, origin: { x, y, z:
|
|
972
|
+
this.device.queue.writeTexture({ texture, origin: { x, y, z: layer } }, padded, { bytesPerRow: dstStride, rowsPerImage: h }, { width: w, height: h, depthOrArrayLayers: 1 });
|
|
920
973
|
}
|
|
921
974
|
/**
|
|
922
975
|
* Produce a `CanvasImageSource` we can feed to `drawImage` for
|