@aardworx/wombat.rendering 0.21.6 → 0.21.8
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/flattenTree.d.ts.map +1 -1
- package/dist/runtime/flattenTree.js +74 -10
- package/dist/runtime/flattenTree.js.map +1 -1
- package/dist/runtime/hybridScene.d.ts.map +1 -1
- package/dist/runtime/hybridScene.js +64 -36
- package/dist/runtime/hybridScene.js.map +1 -1
- package/package.json +5 -2
- package/src/runtime/hybridScene.ts +26 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenTree.d.ts","sourceRoot":"","sources":["../../src/runtime/flattenTree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flattenTree.d.ts","sourceRoot":"","sources":["../../src/runtime/flattenTree.ts"],"names":[],"mappings":"AAyBA,OAAO,EAGyD,KAAK,IAAI,EACxE,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAiHxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CA0BtE"}
|
|
@@ -7,13 +7,22 @@
|
|
|
7
7
|
// (separate Render passes, in the Command list's declared order).
|
|
8
8
|
//
|
|
9
9
|
// Reactive variants (`Adaptive`, `OrderedFromList`, `UnorderedFromSet`)
|
|
10
|
-
// stay reactive: marks propagate through
|
|
10
|
+
// stay reactive: marks propagate through the fused reader, and the
|
|
11
11
|
// resulting aset reflects current tree state without a manual rebuild.
|
|
12
12
|
//
|
|
13
13
|
// `OrderedFromList`'s `alist<RenderTree>` is converted via
|
|
14
14
|
// `AListBridges.toASet` — this drops index/order info, which we
|
|
15
15
|
// wouldn't honor anyway.
|
|
16
|
-
|
|
16
|
+
//
|
|
17
|
+
// FUSION: a reactive child-set used to lower through FIVE aset stages
|
|
18
|
+
// (`filter(static).collectSeq(...)` ∪ `filter(!static).collect(...)`),
|
|
19
|
+
// each with its own History + full per-element state — at collection
|
|
20
|
+
// scale that is several complete N-element states of pure plumbing.
|
|
21
|
+
// `FlattenChildSetReader` fuses them into ONE reader: static subtrees
|
|
22
|
+
// (the overwhelmingly common case) enumerate their RenderObjects
|
|
23
|
+
// directly; reactive subtrees get an inner reader exactly like
|
|
24
|
+
// `ASet.collect`'s. One History, one state, two caches.
|
|
25
|
+
import { ASet, AbstractDirtyReader, Cache, HashSetDelta, SetOperation, hashSetDeltaMonoid, } from "@aardworx/wombat.adaptive";
|
|
17
26
|
import { AListBridges } from "@aardworx/wombat.adaptive";
|
|
18
27
|
/** True when `tree` contains no reactive nodes — its RenderObjects can
|
|
19
28
|
* be enumerated as a plain iterable (no inner aset / reader needed). */
|
|
@@ -46,15 +55,70 @@ function* staticObjects(tree) {
|
|
|
46
55
|
throw new Error(`staticObjects: reactive node '${tree.kind}'`);
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
*
|
|
53
|
-
*
|
|
58
|
+
const INNER_TAG = "FlattenInnerReader";
|
|
59
|
+
const _tagIsInnerTag = (tag) => tag === INNER_TAG;
|
|
60
|
+
/**
|
|
61
|
+
* Fused flattener for a reactive container of subtrees. Per child
|
|
62
|
+
* delta: a STATIC subtree contributes its objects directly (cached as
|
|
63
|
+
* an array so removal emits exactly what addition emitted); a
|
|
64
|
+
* reactive subtree contributes through an inner reader with
|
|
65
|
+
* `ASet.collect`'s dirty-tracking protocol.
|
|
66
|
+
*/
|
|
67
|
+
class FlattenChildSetReader extends AbstractDirtyReader {
|
|
68
|
+
_reader;
|
|
69
|
+
_static;
|
|
70
|
+
_inner;
|
|
71
|
+
constructor(children) {
|
|
72
|
+
super(hashSetDeltaMonoid(), _tagIsInnerTag);
|
|
73
|
+
this._reader = children.getReader();
|
|
74
|
+
this._static = new Cache((t) => [...staticObjects(t)]);
|
|
75
|
+
this._inner = new Cache((t) => {
|
|
76
|
+
const r = flattenRenderTree(t).getReader();
|
|
77
|
+
r.tag = INNER_TAG;
|
|
78
|
+
return r;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
compute(tok, dirty) {
|
|
82
|
+
let deltas = this._reader.getChanges(tok).collect((d) => {
|
|
83
|
+
const t = d.value;
|
|
84
|
+
if (d.count === 1) {
|
|
85
|
+
if (isStaticTree(t)) {
|
|
86
|
+
let out = HashSetDelta.empty();
|
|
87
|
+
for (const ro of this._static.invoke(t))
|
|
88
|
+
out = out.add(SetOperation.add(ro));
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
const r = this._inner.invoke(t);
|
|
92
|
+
dirty.delete(r);
|
|
93
|
+
return r.getChanges(tok);
|
|
94
|
+
}
|
|
95
|
+
if (d.count === -1) {
|
|
96
|
+
if (isStaticTree(t)) {
|
|
97
|
+
let out = HashSetDelta.empty();
|
|
98
|
+
for (const ro of this._static.revokeUnsafe(t))
|
|
99
|
+
out = out.add(SetOperation.rem(ro));
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
const r = this._inner.tryRevokeAndGetDeleted(t);
|
|
103
|
+
if (r === undefined)
|
|
104
|
+
return HashSetDelta.empty();
|
|
105
|
+
dirty.delete(r.value);
|
|
106
|
+
if (r.deleted) {
|
|
107
|
+
r.value.outputs.remove(this);
|
|
108
|
+
return r.value.state.removeAll();
|
|
109
|
+
}
|
|
110
|
+
return r.value.getChanges(tok);
|
|
111
|
+
}
|
|
112
|
+
throw new Error("flattenTree: unexpected delta count");
|
|
113
|
+
});
|
|
114
|
+
for (const d of dirty) {
|
|
115
|
+
deltas = deltas.combine(d.getChanges(tok));
|
|
116
|
+
}
|
|
117
|
+
return deltas;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
54
120
|
function flattenChildSet(children) {
|
|
55
|
-
|
|
56
|
-
const reactivePart = children.filter(t => !isStaticTree(t)).collect(flattenRenderTree);
|
|
57
|
-
return ASet.union(staticPart, reactivePart);
|
|
121
|
+
return ASet.ofReader(() => new FlattenChildSetReader(children));
|
|
58
122
|
}
|
|
59
123
|
export function flattenRenderTree(tree) {
|
|
60
124
|
switch (tree.kind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenTree.js","sourceRoot":"","sources":["../../src/runtime/flattenTree.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,iEAAiE;AACjE,mEAAmE;AACnE,iEAAiE;AACjE,iEAAiE;AACjE,kEAAkE;AAClE,EAAE;AACF,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"flattenTree.js","sourceRoot":"","sources":["../../src/runtime/flattenTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridScene.d.ts","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hybridScene.d.ts","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// hybridScene — composes the heap-bucket fast path with the legacy
|
|
2
2
|
// per-RO path into a single render-pass renderer.
|
|
3
3
|
//
|
|
4
|
-
// Pipeline:
|
|
4
|
+
// Pipeline (fused — one aset stage per backend):
|
|
5
5
|
// 1. `flattenRenderTree(tree)` → `aset<RenderObject>` (drops intra-
|
|
6
6
|
// pass ordering by contract).
|
|
7
|
-
// 2. `
|
|
7
|
+
// 2. `flat.chooseA(ro => elig(ro).map(e => e ? spec : undefined))`
|
|
8
|
+
// → `aset<HeapDrawSpec>` fed to `buildHeapScene`; the adapter is
|
|
9
|
+
// memoized per-RO so the same RO always maps to the same spec
|
|
10
|
+
// object (delta-driven removal identifies the right entry).
|
|
8
11
|
// Reactive: an RO migrates when its eligibility predicate marks
|
|
9
12
|
// (e.g. an `aval<IBuffer>` flips host↔gpu).
|
|
10
|
-
// 3. `
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// 4. `legacyAset` wrapped as `RenderTree.unorderedFromSet(map(leaf))`
|
|
15
|
-
// and fed to `ScenePass`. Same NodeWalker machinery that the
|
|
16
|
-
// legacy `RenderTask` uses.
|
|
13
|
+
// 3. `flat.chooseA(ro => elig(ro).map(e => e ? undefined : leaf))`
|
|
14
|
+
// wrapped as `RenderTree.unorderedFromSet` and fed to
|
|
15
|
+
// `ScenePass`. Same NodeWalker machinery as the legacy
|
|
16
|
+
// `RenderTask`.
|
|
17
17
|
//
|
|
18
18
|
// Per-frame:
|
|
19
19
|
// - `update(token)` runs both backends' update phases (CPU work
|
|
@@ -44,21 +44,25 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
|
|
|
44
44
|
const fragmentOutputLayout = opts.fragmentOutputLayout ?? defaultFragmentOutputLayout(signature);
|
|
45
45
|
const compileEffect = opts.compileEffect ?? ((e, _sig) => e.compile({ target: "wgsl", fragmentOutputLayout }));
|
|
46
46
|
// ─── Partition ───────────────────────────────────────────────────
|
|
47
|
-
// Memoize the eligibility predicate per-RO so
|
|
48
|
-
// share one underlying observation.
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
47
|
+
// Memoize the eligibility predicate per-RO so both partition sides
|
|
48
|
+
// share one underlying observation. The per-RO eligibility is ANDed
|
|
49
|
+
// with the global `heapEnabled` toggle — flipping that off forces
|
|
50
|
+
// every RO to legacy.
|
|
51
|
+
//
|
|
52
|
+
// FUSION: each side is ONE `chooseA` straight off `flat` — the old
|
|
53
|
+
// `filterA(elig)` + `choose(spec)` (heap) and `filterA(notElig)` +
|
|
54
|
+
// `map(leaf)` (legacy) pipelines carried an intermediate aset each,
|
|
55
|
+
// i.e. a full History + per-element state of pure plumbing, plus a
|
|
56
|
+
// negation aval per RO. `chooseA`'s per-element wrapper rides
|
|
57
|
+
// `elig(ro).map(...)`, which for a CONSTANT eligibility (asserted
|
|
58
|
+
// rows under a constant `heapEnabled`, or fully-static ROs)
|
|
59
|
+
// collapses to a lazy constant — no adaptive node, no edges.
|
|
52
60
|
const heapEnabled = opts.heapEnabled ?? AVal.constant(true);
|
|
53
|
-
// Producer-asserted ROs (`heapAsserted: true`) skip the per-RO
|
|
54
|
-
// predicate entirely — they all share these TWO scene-level avals
|
|
55
|
-
// instead of two live avals each (see RenderObject.heapAsserted).
|
|
56
|
-
const notHeapEnabled = heapEnabled.isConstant
|
|
57
|
-
? AVal.constant(!heapEnabled.force( /* allow-force */))
|
|
58
|
-
: heapEnabled.map(b => !b);
|
|
59
61
|
const eligCache = new WeakMap();
|
|
60
|
-
const notEligCache = new WeakMap();
|
|
61
62
|
const elig = (ro) => {
|
|
63
|
+
// Producer-asserted ROs (`heapAsserted: true`) skip the per-RO
|
|
64
|
+
// predicate entirely — they all share the scene-level toggle aval
|
|
65
|
+
// (see RenderObject.heapAsserted).
|
|
62
66
|
if (ro.heapAsserted === true)
|
|
63
67
|
return heapEnabled;
|
|
64
68
|
let av = eligCache.get(ro);
|
|
@@ -73,20 +77,7 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
|
|
|
73
77
|
}
|
|
74
78
|
return av;
|
|
75
79
|
};
|
|
76
|
-
const notElig = (ro) => {
|
|
77
|
-
if (ro.heapAsserted === true)
|
|
78
|
-
return notHeapEnabled;
|
|
79
|
-
let av = notEligCache.get(ro);
|
|
80
|
-
if (av === undefined) {
|
|
81
|
-
const e = elig(ro);
|
|
82
|
-
av = e.isConstant ? AVal.constant(!e.force( /* allow-force */)) : e.map(b => !b);
|
|
83
|
-
notEligCache.set(ro, av);
|
|
84
|
-
}
|
|
85
|
-
return av;
|
|
86
|
-
};
|
|
87
80
|
const flat = flattenRenderTree(tree);
|
|
88
|
-
const heapAset = flat.filterA(ro => elig(ro));
|
|
89
|
-
const legacyAset = flat.filterA(ro => notElig(ro));
|
|
90
81
|
// ─── Atlas pool ──────────────────────────────────────────────────
|
|
91
82
|
// Per-scene Tier-S atlas pool. Owned by this hybrid scene; disposed
|
|
92
83
|
// alongside the heap path. The adapter consults it to classify
|
|
@@ -109,7 +100,7 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
|
|
|
109
100
|
// usually have freed atlas space). It costs a missing tile for a frame or two;
|
|
110
101
|
// the alternative was an exception in the frame callback, which killed the
|
|
111
102
|
// render loop outright.
|
|
112
|
-
const
|
|
103
|
+
const specOf = (ro) => {
|
|
113
104
|
let spec = specCache.get(ro);
|
|
114
105
|
if (spec === undefined) {
|
|
115
106
|
const built = renderObjectToHeapSpec(ro, AdaptiveToken.top, atlasPool, {
|
|
@@ -121,6 +112,23 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
|
|
|
121
112
|
specCache.set(ro, spec);
|
|
122
113
|
}
|
|
123
114
|
return spec;
|
|
115
|
+
};
|
|
116
|
+
// ONE fused stage: eligibility routes straight into the spec.
|
|
117
|
+
// Constant eligibility (asserted rows, fully-static ROs) takes the
|
|
118
|
+
// closure-free branch: an eager constant wrapper per RO — and the
|
|
119
|
+
// OTHER side of the partition collapses onto ONE shared
|
|
120
|
+
// `constant(undefined)`, so ChooseAReader's aval-keyed refcount map
|
|
121
|
+
// holds a single entry for the whole eligible population.
|
|
122
|
+
const CONST_UNDEF = AVal.constant(undefined);
|
|
123
|
+
const heapSpecAset = flat.chooseA((ro) => {
|
|
124
|
+
const e = elig(ro);
|
|
125
|
+
if (e.isConstant) {
|
|
126
|
+
// Why force here: constant — immutable by definition.
|
|
127
|
+
return e.force( /* allow-force */)
|
|
128
|
+
? AVal.constant(specOf(ro))
|
|
129
|
+
: CONST_UNDEF;
|
|
130
|
+
}
|
|
131
|
+
return e.map((b) => (b ? specOf(ro) : undefined));
|
|
124
132
|
});
|
|
125
133
|
const heapScene = buildHeapScene(device, signature, heapSpecAset, {
|
|
126
134
|
fragmentOutputLayout,
|
|
@@ -137,7 +145,27 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
|
|
|
137
145
|
// path inherits the same "no order inside a pass" contract. Re-using
|
|
138
146
|
// the existing NodeWalker machinery means RO preparation, caching,
|
|
139
147
|
// and resource ref-counting all behave exactly as the master path.
|
|
140
|
-
|
|
148
|
+
// ONE fused stage (ineligible → leaf); the leaf wrapper is memoized
|
|
149
|
+
// so eligibility flips re-emit the identical tree object.
|
|
150
|
+
const leafCache = new WeakMap();
|
|
151
|
+
const leafOf = (ro) => {
|
|
152
|
+
let l = leafCache.get(ro);
|
|
153
|
+
if (l === undefined) {
|
|
154
|
+
l = RenderTree.leaf(ro);
|
|
155
|
+
leafCache.set(ro, l);
|
|
156
|
+
}
|
|
157
|
+
return l;
|
|
158
|
+
};
|
|
159
|
+
const legacyTree = RenderTree.unorderedFromSet(flat.chooseA((ro) => {
|
|
160
|
+
const e = elig(ro);
|
|
161
|
+
if (e.isConstant) {
|
|
162
|
+
// Why force here: constant — immutable by definition.
|
|
163
|
+
return e.force( /* allow-force */)
|
|
164
|
+
? CONST_UNDEF
|
|
165
|
+
: AVal.constant(leafOf(ro));
|
|
166
|
+
}
|
|
167
|
+
return e.map((b) => (b ? undefined : leafOf(ro)));
|
|
168
|
+
}));
|
|
141
169
|
const scenePass = new ScenePass(device, signature, legacyTree, compileEffect);
|
|
142
170
|
// DEBUG registry: per-hybrid-scene live draw counts (heap vs legacy) so
|
|
143
171
|
// multi-task pipelines (OIT) can be inspected from the console.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridScene.js","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kDAAkD;AAClD,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"hybridScene.js","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aardworx/wombat.rendering",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.8",
|
|
4
4
|
"description": "WebGPU rendering layer for the Wombat TypeScript stack — RenderObject/RenderTask/runtime + window glue, port of Aardvark.Rendering's lower layers on top of WebGPU and wombat.shader.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "krauthaufen",
|
|
@@ -65,5 +65,8 @@
|
|
|
65
65
|
"publishConfig": {
|
|
66
66
|
"access": "public"
|
|
67
67
|
},
|
|
68
|
-
"private": false
|
|
68
|
+
"private": false,
|
|
69
|
+
"scripts": {
|
|
70
|
+
"prepublishOnly": "cd ../.. && npm run typecheck && npm run build"
|
|
71
|
+
}
|
|
69
72
|
}
|
|
@@ -267,8 +267,22 @@ export function compileHybridScene(
|
|
|
267
267
|
return spec;
|
|
268
268
|
};
|
|
269
269
|
// ONE fused stage: eligibility routes straight into the spec.
|
|
270
|
-
|
|
271
|
-
|
|
270
|
+
// Constant eligibility (asserted rows, fully-static ROs) takes the
|
|
271
|
+
// closure-free branch: an eager constant wrapper per RO — and the
|
|
272
|
+
// OTHER side of the partition collapses onto ONE shared
|
|
273
|
+
// `constant(undefined)`, so ChooseAReader's aval-keyed refcount map
|
|
274
|
+
// holds a single entry for the whole eligible population.
|
|
275
|
+
const CONST_UNDEF = AVal.constant(undefined);
|
|
276
|
+
const heapSpecAset = flat.chooseA((ro: RenderObject) => {
|
|
277
|
+
const e = elig(ro);
|
|
278
|
+
if (e.isConstant) {
|
|
279
|
+
// Why force here: constant — immutable by definition.
|
|
280
|
+
return e.force(/* allow-force */)
|
|
281
|
+
? AVal.constant(specOf(ro))
|
|
282
|
+
: (CONST_UNDEF as aval<HeapDrawSpec | undefined>);
|
|
283
|
+
}
|
|
284
|
+
return e.map((b) => (b ? specOf(ro) : undefined));
|
|
285
|
+
});
|
|
272
286
|
|
|
273
287
|
const heapScene: HeapScene = buildHeapScene(device, signature, heapSpecAset, {
|
|
274
288
|
fragmentOutputLayout,
|
|
@@ -295,8 +309,16 @@ export function compileHybridScene(
|
|
|
295
309
|
return l;
|
|
296
310
|
};
|
|
297
311
|
const legacyTree: RenderTree = RenderTree.unorderedFromSet(
|
|
298
|
-
flat.chooseA((ro: RenderObject) =>
|
|
299
|
-
|
|
312
|
+
flat.chooseA((ro: RenderObject) => {
|
|
313
|
+
const e = elig(ro);
|
|
314
|
+
if (e.isConstant) {
|
|
315
|
+
// Why force here: constant — immutable by definition.
|
|
316
|
+
return e.force(/* allow-force */)
|
|
317
|
+
? (CONST_UNDEF as aval<RenderTree | undefined>)
|
|
318
|
+
: AVal.constant(leafOf(ro));
|
|
319
|
+
}
|
|
320
|
+
return e.map((b) => (b ? undefined : leafOf(ro)));
|
|
321
|
+
}));
|
|
300
322
|
const scenePass = new ScenePass(device, signature, legacyTree, compileEffect);
|
|
301
323
|
// DEBUG registry: per-hybrid-scene live draw counts (heap vs legacy) so
|
|
302
324
|
// multi-task pipelines (OIT) can be inspected from the console.
|