@aardworx/wombat.rendering 0.9.15 → 0.9.17

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.
@@ -1,7 +1,21 @@
1
1
  import type { PipelineState } from "../../core/pipelineState.js";
2
2
  import type { FramebufferSignature } from "../../core/framebufferSignature.js";
3
- import type { IDisposable } from "@aardworx/wombat.adaptive";
3
+ import type { aval, IDisposable } from "@aardworx/wombat.adaptive";
4
+ import { AdaptiveToken } from "@aardworx/wombat.adaptive";
4
5
  import { type PipelineStateDescriptor } from "../pipelineCache/index.js";
6
+ import type { DerivedModeRule } from "./rule.js";
7
+ /**
8
+ * Per-axis derived-mode rules for one RO. Same shape as
9
+ * `HeapDrawSpec.modeRules`.
10
+ */
11
+ export interface RoModeRules {
12
+ readonly cull?: DerivedModeRule<"cull">;
13
+ readonly frontFace?: DerivedModeRule<"frontFace">;
14
+ readonly topology?: DerivedModeRule<"topology">;
15
+ readonly depthCompare?: DerivedModeRule<"depthCompare">;
16
+ readonly depthWrite?: DerivedModeRule<"depthWrite">;
17
+ readonly alphaToCoverage?: DerivedModeRule<"alphaToCoverage">;
18
+ }
5
19
  /**
6
20
  * One-shot snapshot of the current values of every leaf aval in a
7
21
  * `PipelineState`, mapped onto a `PipelineStateDescriptor` whose
@@ -9,7 +23,12 @@ import { type PipelineStateDescriptor } from "../pipelineCache/index.js";
9
23
  * (missing entries default to non-blended / 0xF writeMask, matching
10
24
  * `BLEND_DEFAULT` semantics in heapScene).
11
25
  */
12
- export declare function snapshotDescriptor(ps: PipelineState | undefined, signature: FramebufferSignature): PipelineStateDescriptor;
26
+ export declare function snapshotDescriptor(ps: PipelineState | undefined, signature: FramebufferSignature, options?: {
27
+ readonly modeRules?: RoModeRules;
28
+ readonly uniformAvals?: ReadonlyMap<string, aval<unknown>>;
29
+ readonly token?: AdaptiveToken;
30
+ readonly recordDep?: (av: aval<unknown>) => void;
31
+ }): PipelineStateDescriptor;
13
32
  /**
14
33
  * Subscribes to every leaf aval in a `PipelineState` and invokes
15
34
  * `onDirty` when any of them marks. Use one tracker per RO; call
@@ -27,13 +46,43 @@ export declare class ModeKeyTracker implements IDisposable {
27
46
  private readonly subs;
28
47
  private cachedDescriptor;
29
48
  private cachedModeKey;
30
- constructor(ps: PipelineState | undefined, signature: FramebufferSignature, onDirty: () => void);
49
+ private readonly modeRules;
50
+ private readonly uniformAvals;
51
+ /** Avals discovered while evaluating rules; merged into the leaf
52
+ * set returned by `forEachLeaf` so the heap scene subscribes once. */
53
+ private readonly ruleDeps;
54
+ constructor(ps: PipelineState | undefined, signature: FramebufferSignature, onDirty: () => void,
55
+ /**
56
+ * Skip the per-instance addMarkingCallback subscriptions. The caller
57
+ * is responsible for invoking `onDirty` (or recomputing directly)
58
+ * when an input aval marks. Use this when the heap scene shares one
59
+ * subscription across N tracker instances (the 20k-ROs-share-one-
60
+ * cullCval case) — saves N subscriptions and N callback dispatches
61
+ * per mark.
62
+ */
63
+ options?: {
64
+ skipSubscribe?: boolean;
65
+ modeRules?: RoModeRules;
66
+ uniformAvals?: ReadonlyMap<string, aval<unknown>>;
67
+ });
68
+ private snapshot;
69
+ /**
70
+ * Walk every leaf aval in this tracker's PipelineState and invoke
71
+ * `visit(aval)`. Used by the heap scene to register ONE
72
+ * addMarkingCallback per unique aval across many trackers.
73
+ */
74
+ forEachLeaf(visit: (a: aval<unknown>) => void): void;
31
75
  get descriptor(): PipelineStateDescriptor;
32
76
  get modeKey(): bigint;
33
77
  /**
34
78
  * Snapshot current aval values and rebuild descriptor + modeKey.
35
79
  * Returns true iff the modeKey changed (so the bucket only needs to
36
80
  * upload + repartition when something actually moved).
81
+ *
82
+ * Also rediscovers rule-input dependencies on every call — a
83
+ * conditional rule body may read different uniforms in different
84
+ * branches. New deps surface in `forEachLeaf` so the heap scene's
85
+ * subscription-dedupe layer picks them up.
37
86
  */
38
87
  recompute(): boolean;
39
88
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"modeKeyCpu.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,aAAa,EAKd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAIL,KAAK,uBAAuB,EAI7B,MAAM,2BAA2B,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,aAAa,GAAG,SAAS,EAC7B,SAAS,EAAE,oBAAoB,GAC9B,uBAAuB,CAsBzB;AAkDD;;;;;;;;;GASG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,EAAE,EAAE,aAAa,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,aAAa,CAAS;gBAG5B,EAAE,EAAE,aAAa,GAAG,SAAS,EAC7B,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,MAAM,IAAI;IAUrB,IAAI,UAAU,IAAI,uBAAuB,CAAkC;IAC3E,IAAI,OAAO,IAAI,MAAM,CAA+B;IAEpD;;;;OAIG;IACH,SAAS,IAAI,OAAO;IASpB,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,eAAe;CAIxB"}
1
+ {"version":3,"file":"modeKeyCpu.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,28 @@
9
9
  // GPU on the next frame, and the partition kernel re-buckets the
10
10
  // record into its new slot. No rule-IR machinery yet — Task 2 layers
11
11
  // `derivedMode(...)` on top of this.
12
- import { addMarkingCallback } from "@aardworx/wombat.adaptive";
12
+ import { addMarkingCallback, AdaptiveToken } from "@aardworx/wombat.adaptive";
13
13
  import { encodeModeKey, DEFAULT_DESCRIPTOR, DEFAULT_ATTACHMENT_BLEND, } from "../pipelineCache/index.js";
14
+ /**
15
+ * Uniforms accessor exposed to a derived-mode rule's `(u, declared)`
16
+ * closure. Reads each `u.<Name>` from the supplied aval map at
17
+ * evaluation time and tracks which avals were accessed so the
18
+ * `ModeKeyTracker` can subscribe to them.
19
+ */
20
+ function uniformsProxy(uniformAvals, tok, recordDep) {
21
+ return new Proxy({}, {
22
+ get(_target, prop) {
23
+ if (typeof prop !== "string")
24
+ return undefined;
25
+ const av = uniformAvals.get(prop);
26
+ if (av === undefined)
27
+ return undefined;
28
+ if (recordDep !== undefined)
29
+ recordDep(av);
30
+ return av.getValue(tok);
31
+ },
32
+ });
33
+ }
14
34
  /**
15
35
  * One-shot snapshot of the current values of every leaf aval in a
16
36
  * `PipelineState`, mapped onto a `PipelineStateDescriptor` whose
@@ -18,9 +38,9 @@ import { encodeModeKey, DEFAULT_DESCRIPTOR, DEFAULT_ATTACHMENT_BLEND, } from "..
18
38
  * (missing entries default to non-blended / 0xF writeMask, matching
19
39
  * `BLEND_DEFAULT` semantics in heapScene).
20
40
  */
21
- export function snapshotDescriptor(ps, signature) {
41
+ export function snapshotDescriptor(ps, signature, options = {}) {
22
42
  if (ps === undefined) {
23
- return buildAttachmentsFor(DEFAULT_DESCRIPTOR, signature);
43
+ return applyRules(buildAttachmentsFor(DEFAULT_DESCRIPTOR, signature), options);
24
44
  }
25
45
  const r = ps.rasterizer;
26
46
  const depth = ps.depth !== undefined ? snapshotDepth(ps.depth, signature) : undefined;
@@ -39,6 +59,51 @@ export function snapshotDescriptor(ps, signature) {
39
59
  attachments,
40
60
  alphaToCoverage: atc,
41
61
  };
62
+ return applyRules(out, options);
63
+ }
64
+ function applyRules(d, options) {
65
+ const rules = options.modeRules;
66
+ if (rules === undefined)
67
+ return d;
68
+ const uniforms = options.uniformAvals ?? new Map();
69
+ const tok = options.token ?? AdaptiveToken.top;
70
+ const proxy = uniformsProxy(uniforms, tok, options.recordDep);
71
+ let out = d;
72
+ if (rules.cull !== undefined) {
73
+ const v = rules.cull.evaluate(proxy, out.cullMode);
74
+ if (v !== out.cullMode)
75
+ out = { ...out, cullMode: v };
76
+ }
77
+ if (rules.frontFace !== undefined) {
78
+ const v = rules.frontFace.evaluate(proxy, out.frontFace);
79
+ if (v !== out.frontFace)
80
+ out = { ...out, frontFace: v };
81
+ }
82
+ if (rules.topology !== undefined) {
83
+ const v = rules.topology.evaluate(proxy, out.topology);
84
+ if (v !== out.topology)
85
+ out = { ...out, topology: v, stripIndexFormat: stripFormatFor(v) };
86
+ }
87
+ if (rules.alphaToCoverage !== undefined) {
88
+ const v = rules.alphaToCoverage.evaluate(proxy, out.alphaToCoverage);
89
+ if (v !== out.alphaToCoverage)
90
+ out = { ...out, alphaToCoverage: v };
91
+ }
92
+ if (out.depth !== undefined && (rules.depthCompare !== undefined || rules.depthWrite !== undefined)) {
93
+ let depthOut = out.depth;
94
+ if (rules.depthCompare !== undefined) {
95
+ const v = rules.depthCompare.evaluate(proxy, depthOut.compare);
96
+ if (v !== depthOut.compare)
97
+ depthOut = { ...depthOut, compare: v };
98
+ }
99
+ if (rules.depthWrite !== undefined) {
100
+ const v = rules.depthWrite.evaluate(proxy, depthOut.write);
101
+ if (v !== depthOut.write)
102
+ depthOut = { ...depthOut, write: v };
103
+ }
104
+ if (depthOut !== out.depth)
105
+ out = { ...out, depth: depthOut };
106
+ }
42
107
  return out;
43
108
  }
44
109
  function buildAttachmentsFor(base, signature) {
@@ -97,13 +162,81 @@ export class ModeKeyTracker {
97
162
  subs = [];
98
163
  cachedDescriptor;
99
164
  cachedModeKey;
100
- constructor(ps, signature, onDirty) {
165
+ modeRules;
166
+ uniformAvals;
167
+ /** Avals discovered while evaluating rules; merged into the leaf
168
+ * set returned by `forEachLeaf` so the heap scene subscribes once. */
169
+ ruleDeps = new Set();
170
+ constructor(ps, signature, onDirty,
171
+ /**
172
+ * Skip the per-instance addMarkingCallback subscriptions. The caller
173
+ * is responsible for invoking `onDirty` (or recomputing directly)
174
+ * when an input aval marks. Use this when the heap scene shares one
175
+ * subscription across N tracker instances (the 20k-ROs-share-one-
176
+ * cullCval case) — saves N subscriptions and N callback dispatches
177
+ * per mark.
178
+ */
179
+ options = {}) {
101
180
  this.ps = ps;
102
181
  this.signature = signature;
103
182
  this.onDirty = onDirty;
104
- this.cachedDescriptor = snapshotDescriptor(ps, signature);
183
+ if (options.modeRules !== undefined)
184
+ this.modeRules = options.modeRules;
185
+ if (options.uniformAvals !== undefined)
186
+ this.uniformAvals = options.uniformAvals;
187
+ this.cachedDescriptor = this.snapshot();
105
188
  this.cachedModeKey = encodeModeKey(this.cachedDescriptor);
106
- this.subscribeAll();
189
+ if (options.skipSubscribe !== true)
190
+ this.subscribeAll();
191
+ }
192
+ snapshot() {
193
+ return snapshotDescriptor(this.ps, this.signature, {
194
+ ...(this.modeRules !== undefined ? { modeRules: this.modeRules } : {}),
195
+ ...(this.uniformAvals !== undefined ? { uniformAvals: this.uniformAvals } : {}),
196
+ recordDep: (av) => { this.ruleDeps.add(av); },
197
+ });
198
+ }
199
+ /**
200
+ * Walk every leaf aval in this tracker's PipelineState and invoke
201
+ * `visit(aval)`. Used by the heap scene to register ONE
202
+ * addMarkingCallback per unique aval across many trackers.
203
+ */
204
+ forEachLeaf(visit) {
205
+ const ps = this.ps;
206
+ if (ps !== undefined) {
207
+ visit(ps.rasterizer.topology);
208
+ visit(ps.rasterizer.cullMode);
209
+ visit(ps.rasterizer.frontFace);
210
+ if (ps.rasterizer.depthBias !== undefined)
211
+ visit(ps.rasterizer.depthBias);
212
+ if (ps.depth !== undefined) {
213
+ visit(ps.depth.write);
214
+ visit(ps.depth.compare);
215
+ if (ps.depth.clamp !== undefined)
216
+ visit(ps.depth.clamp);
217
+ }
218
+ if (ps.blends !== undefined) {
219
+ visit(ps.blends);
220
+ const map = ps.blends.force( /* allow-force */);
221
+ for (const [, bs] of map) {
222
+ visit(bs.color.srcFactor);
223
+ visit(bs.color.dstFactor);
224
+ visit(bs.color.operation);
225
+ visit(bs.alpha.srcFactor);
226
+ visit(bs.alpha.dstFactor);
227
+ visit(bs.alpha.operation);
228
+ visit(bs.writeMask);
229
+ }
230
+ }
231
+ if (ps.alphaToCoverage !== undefined)
232
+ visit(ps.alphaToCoverage);
233
+ }
234
+ // Rule-input deps discovered on the last evaluation. The set is
235
+ // refreshed each `recompute()`; callers re-subscribe accordingly.
236
+ // Surfaced regardless of `ps` because a rule can fire without
237
+ // any underlying PipelineState aval (e.g. ps === undefined).
238
+ for (const av of this.ruleDeps)
239
+ visit(av);
107
240
  }
108
241
  get descriptor() { return this.cachedDescriptor; }
109
242
  get modeKey() { return this.cachedModeKey; }
@@ -111,9 +244,15 @@ export class ModeKeyTracker {
111
244
  * Snapshot current aval values and rebuild descriptor + modeKey.
112
245
  * Returns true iff the modeKey changed (so the bucket only needs to
113
246
  * upload + repartition when something actually moved).
247
+ *
248
+ * Also rediscovers rule-input dependencies on every call — a
249
+ * conditional rule body may read different uniforms in different
250
+ * branches. New deps surface in `forEachLeaf` so the heap scene's
251
+ * subscription-dedupe layer picks them up.
114
252
  */
115
253
  recompute() {
116
- const next = snapshotDescriptor(this.ps, this.signature);
254
+ this.ruleDeps.clear();
255
+ const next = this.snapshot();
117
256
  const nextKey = encodeModeKey(next);
118
257
  if (nextKey === this.cachedModeKey)
119
258
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"modeKeyCpu.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modeKeyCpu.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { CullMode, FrontFace, Topology } from "../pipelineCache/index.js";
2
+ /** Discrete pipeline-state axes a `derivedMode` rule can target. v1
3
+ * supports cull / frontFace / topology / depthCompare / depthWrite /
4
+ * blendEnabled. Stencil + per-attachment blend factor/operation are
5
+ * deferred — same carve-outs as `derived-modes.md`. */
6
+ export type ModeAxis = "cull" | "frontFace" | "topology" | "depthCompare" | "depthWrite" | "alphaToCoverage";
7
+ /** Output value type per axis. */
8
+ export type ModeValue<A extends ModeAxis> = A extends "cull" ? CullMode : A extends "frontFace" ? FrontFace : A extends "topology" ? Topology : A extends "depthCompare" ? GPUCompareFunction : A extends "depthWrite" ? boolean : A extends "alphaToCoverage" ? boolean : never;
9
+ /**
10
+ * The closure signature a `derivedMode` rule body takes:
11
+ * - `u`: a proxy whose properties resolve to the RO's uniform values
12
+ * at evaluation time. The proxy is type-erased in v1 — declare the
13
+ * uniforms you'll read via `UniformScope` augmentation on the
14
+ * wombat.shader side for compile-time safety, or annotate locally.
15
+ * - `declared`: the SG-declared value for this axis at this leaf.
16
+ * Identity rules `(u, d) => d` are valid and useful for axes that
17
+ * want to pass declared through unchanged.
18
+ */
19
+ export type DerivedModeBuilder<A extends ModeAxis> = (u: Record<string, unknown>, declared: ModeValue<A>) => ModeValue<A>;
20
+ export interface DerivedModeRule<A extends ModeAxis = ModeAxis> {
21
+ readonly __derivedModeRule: true;
22
+ readonly axis: A;
23
+ readonly evaluate: DerivedModeBuilder<A>;
24
+ /**
25
+ * Conservative over-approximation of the rule's output set. Used by
26
+ * the build-time pre-warm in v2 to enumerate the pipelines a scene
27
+ * could realize. v1 doesn't use it at runtime, but recording it
28
+ * here keeps the API forward-compatible.
29
+ */
30
+ readonly domain?: ReadonlyArray<ModeValue<A>>;
31
+ }
32
+ /**
33
+ * Author a derived mode rule.
34
+ *
35
+ * derivedMode("cull", (u, declared) =>
36
+ * u.WindingFlipped ? flipCull(declared) : declared);
37
+ *
38
+ * derivedMode("blend", (u) => u.Premultiplied ? "premul" : "straight");
39
+ *
40
+ * // Determinant-flip-cull (the motivating case):
41
+ * derivedMode("cull", (u, declared) => {
42
+ * const m = u.ModelTrafo as M44d;
43
+ * const det =
44
+ * m.M00 * (m.M11 * m.M22 - m.M12 * m.M21) -
45
+ * m.M01 * (m.M10 * m.M22 - m.M12 * m.M20) +
46
+ * m.M02 * (m.M10 * m.M21 - m.M11 * m.M20);
47
+ * return det < 0 ? flipCull(declared) : declared;
48
+ * });
49
+ */
50
+ export declare function derivedMode<A extends ModeAxis>(axis: A, evaluate: DerivedModeBuilder<A>, options?: {
51
+ readonly domain?: ReadonlyArray<ModeValue<A>>;
52
+ }): DerivedModeRule<A>;
53
+ /** Brand check — distinguishes a DerivedModeRule from an aval/raw value
54
+ * at runtime so PipelineState consumers can route accordingly. */
55
+ export declare function isDerivedModeRule(x: unknown): x is DerivedModeRule;
56
+ /** Convenience: flip 'back' ↔ 'front' (and pass through 'none').
57
+ * Useful in `(u, declared) => mirrored ? flipCull(declared) : declared`. */
58
+ export declare function flipCull(c: CullMode): CullMode;
59
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/rule.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE/E;;;wDAGwD;AACxD,MAAM,MAAM,QAAQ,GAChB,MAAM,GAAG,WAAW,GAAG,UAAU,GACjC,cAAc,GAAG,YAAY,GAC7B,iBAAiB,CAAC;AAEtB,kCAAkC;AAClC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,IACtC,CAAC,SAAS,MAAM,GAAa,QAAQ,GACrC,CAAC,SAAS,WAAW,GAAQ,SAAS,GACtC,CAAC,SAAS,UAAU,GAAS,QAAQ,GACrC,CAAC,SAAS,cAAc,GAAK,kBAAkB,GAC/C,CAAC,SAAS,YAAY,GAAO,OAAO,GACpC,CAAC,SAAS,iBAAiB,GAAG,OAAO,GACrC,KAAK,CAAC;AAER;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,QAAQ,IAAI,CACnD,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1B,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,KACnB,SAAS,CAAC,CAAC,CAAC,CAAC;AAElB,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAC5D,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAK,CAAC,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,EAC5C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC/B,OAAO,GAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CAAO,GAC9D,eAAe,CAAC,CAAC,CAAC,CAKpB;AAED;mEACmE;AACnE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,eAAe,CAGlE;AAED;6EAC6E;AAC7E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAE9C"}
@@ -0,0 +1,55 @@
1
+ // `derivedMode(axis, (u, declared) => modeValue)` — author-facing
2
+ // marker for per-RO pipeline-state values that are functions of the
3
+ // RO's uniforms.
4
+ //
5
+ // v1 is CPU-evaluated: the user's closure runs in JS each time the
6
+ // rule's inputs mark. That's a good fit for the typical authoring
7
+ // shapes (a uniform-driven enum flip, a determinant-sign cull flip,
8
+ // etc.) and pairs naturally with the bucket-level rebuild fast path
9
+ // shipped in 0.9.16 — only ROs whose inputs actually changed get
10
+ // re-evaluated, and same-key buckets re-bind their pipeline once
11
+ // rather than per-RO.
12
+ //
13
+ // v2 (deferred) lowers rules to a GPU compute kernel via §7's IR
14
+ // machinery — needed only when bulk-animated per-RO inputs become a
15
+ // CPU-side bottleneck. See docs/derived-mode-rules-plan.md.
16
+ //
17
+ // What can be derived (the small-enum axes — cull/blend/depth-compare/
18
+ // topology/etc.) and what stays static (depth bias, blend constant,
19
+ // stencil ref) is covered in docs/derived-modes.md.
20
+ /**
21
+ * Author a derived mode rule.
22
+ *
23
+ * derivedMode("cull", (u, declared) =>
24
+ * u.WindingFlipped ? flipCull(declared) : declared);
25
+ *
26
+ * derivedMode("blend", (u) => u.Premultiplied ? "premul" : "straight");
27
+ *
28
+ * // Determinant-flip-cull (the motivating case):
29
+ * derivedMode("cull", (u, declared) => {
30
+ * const m = u.ModelTrafo as M44d;
31
+ * const det =
32
+ * m.M00 * (m.M11 * m.M22 - m.M12 * m.M21) -
33
+ * m.M01 * (m.M10 * m.M22 - m.M12 * m.M20) +
34
+ * m.M02 * (m.M10 * m.M21 - m.M11 * m.M20);
35
+ * return det < 0 ? flipCull(declared) : declared;
36
+ * });
37
+ */
38
+ export function derivedMode(axis, evaluate, options = {}) {
39
+ const out = options.domain !== undefined
40
+ ? { __derivedModeRule: true, axis, evaluate, domain: options.domain }
41
+ : { __derivedModeRule: true, axis, evaluate };
42
+ return out;
43
+ }
44
+ /** Brand check — distinguishes a DerivedModeRule from an aval/raw value
45
+ * at runtime so PipelineState consumers can route accordingly. */
46
+ export function isDerivedModeRule(x) {
47
+ return typeof x === "object" && x !== null
48
+ && x.__derivedModeRule === true;
49
+ }
50
+ /** Convenience: flip 'back' ↔ 'front' (and pass through 'none').
51
+ * Useful in `(u, declared) => mirrored ? flipCull(declared) : declared`. */
52
+ export function flipCull(c) {
53
+ return c === "back" ? "front" : c === "front" ? "back" : "none";
54
+ }
55
+ //# sourceMappingURL=rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/rule.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,oEAAoE;AACpE,iBAAiB;AACjB,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,iEAAiE;AACjE,iEAAiE;AACjE,sBAAsB;AACtB,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,4DAA4D;AAC5D,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,oDAAoD;AAmDpD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CACzB,IAAO,EACP,QAA+B,EAC/B,UAA6D,EAAE;IAE/D,MAAM,GAAG,GAAuB,OAAO,CAAC,MAAM,KAAK,SAAS;QAC1D,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACrE,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;mEACmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,CAAU;IAC1C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;WAClC,CAAqC,CAAC,iBAAiB,KAAK,IAAI,CAAC;AAC3E,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,CAAW;IAClC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC"}
@@ -84,6 +84,38 @@ export interface HeapDrawSpec {
84
84
  * with depth write enabled. Matches the demo's existing visuals.
85
85
  */
86
86
  readonly pipelineState?: PipelineState;
87
+ /**
88
+ * Per-RO derived pipeline-mode rules: per-axis closures
89
+ * `(u, declared) => modeValue` that compute the effective mode
90
+ * value as a function of this RO's uniforms (see
91
+ * `derivedMode(...)` in `runtime/derivedModes/rule.ts`).
92
+ *
93
+ * A rule overrides the corresponding `pipelineState.rasterizer.*`
94
+ * (or `pipelineState.depth.*`) aval value at descriptor-snapshot
95
+ * time. The rule's closure runs CPU-side with a proxy that
96
+ * resolves `u.<Name>` against this spec's `inputs[<Name>]`. The
97
+ * heap renderer auto-discovers the closure's input dependencies on
98
+ * first run and subscribes the per-RO ModeKeyTracker to each of
99
+ * them — so a rule that reads `u.ModelTrafo` reactively rebuckets
100
+ * when ModelTrafo marks.
101
+ *
102
+ * Common use cases:
103
+ * - cull: flip-by-determinant-sign for mirrored geometry
104
+ * - blend: pick a preset based on a boolean uniform
105
+ * - depthCompare: lighter passes for transparent overlays
106
+ *
107
+ * v1 evaluates rules CPU-side. v2 (deferred) lowers them to a GPU
108
+ * compute kernel for the bulk-animated-input case. See
109
+ * `docs/derived-modes.md`.
110
+ */
111
+ readonly modeRules?: {
112
+ readonly cull?: import("./derivedModes/rule.js").DerivedModeRule<"cull">;
113
+ readonly frontFace?: import("./derivedModes/rule.js").DerivedModeRule<"frontFace">;
114
+ readonly topology?: import("./derivedModes/rule.js").DerivedModeRule<"topology">;
115
+ readonly depthCompare?: import("./derivedModes/rule.js").DerivedModeRule<"depthCompare">;
116
+ readonly depthWrite?: import("./derivedModes/rule.js").DerivedModeRule<"depthWrite">;
117
+ readonly alphaToCoverage?: import("./derivedModes/rule.js").DerivedModeRule<"alphaToCoverage">;
118
+ };
87
119
  }
88
120
  export interface HeapSceneStats {
89
121
  readonly groups: number;
@@ -1 +1 @@
1
- {"version":3,"file":"heapScene.d.ts","sourceRoot":"","sources":["../../src/runtime/heapScene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heapScene.d.ts","sourceRoot":"","sources":["../../src/runtime/heapScene.ts"],"names":[],"mappings":"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"}