@aardworx/wombat.rendering 0.9.33 → 0.18.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.
Files changed (95) hide show
  1. package/dist/runtime/derivedModes/kernelCodegen.d.ts +90 -0
  2. package/dist/runtime/derivedModes/kernelCodegen.d.ts.map +1 -0
  3. package/dist/runtime/derivedModes/kernelCodegen.js +623 -0
  4. package/dist/runtime/derivedModes/kernelCodegen.js.map +1 -0
  5. package/dist/runtime/derivedModes/modeKeyCpu.d.ts.map +1 -1
  6. package/dist/runtime/derivedModes/modeKeyCpu.js +23 -67
  7. package/dist/runtime/derivedModes/modeKeyCpu.js.map +1 -1
  8. package/dist/runtime/derivedModes/partitionDispatcher.d.ts +79 -0
  9. package/dist/runtime/derivedModes/partitionDispatcher.d.ts.map +1 -0
  10. package/dist/runtime/derivedModes/partitionDispatcher.js +303 -0
  11. package/dist/runtime/derivedModes/partitionDispatcher.js.map +1 -0
  12. package/dist/runtime/derivedModes/partitionKernel.d.ts +12 -0
  13. package/dist/runtime/derivedModes/partitionKernel.d.ts.map +1 -0
  14. package/dist/runtime/derivedModes/partitionKernel.js +127 -0
  15. package/dist/runtime/derivedModes/partitionKernel.js.map +1 -0
  16. package/dist/runtime/derivedModes/partitionKernelLayout.d.ts +4 -0
  17. package/dist/runtime/derivedModes/partitionKernelLayout.d.ts.map +1 -0
  18. package/dist/runtime/derivedModes/partitionKernelLayout.js +24 -0
  19. package/dist/runtime/derivedModes/partitionKernelLayout.js.map +1 -0
  20. package/dist/runtime/derivedModes/rule.d.ts +38 -86
  21. package/dist/runtime/derivedModes/rule.d.ts.map +1 -1
  22. package/dist/runtime/derivedModes/rule.js +34 -74
  23. package/dist/runtime/derivedModes/rule.js.map +1 -1
  24. package/dist/runtime/derivedUniforms/dispatch.d.ts +10 -8
  25. package/dist/runtime/derivedUniforms/dispatch.d.ts.map +1 -1
  26. package/dist/runtime/derivedUniforms/dispatch.js +31 -18
  27. package/dist/runtime/derivedUniforms/dispatch.js.map +1 -1
  28. package/dist/runtime/derivedUniforms/marker.d.ts +90 -11
  29. package/dist/runtime/derivedUniforms/marker.d.ts.map +1 -1
  30. package/dist/runtime/derivedUniforms/marker.js +161 -15
  31. package/dist/runtime/derivedUniforms/marker.js.map +1 -1
  32. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts +25 -6
  33. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts.map +1 -1
  34. package/dist/runtime/derivedUniforms/sceneIntegration.js +61 -20
  35. package/dist/runtime/derivedUniforms/sceneIntegration.js.map +1 -1
  36. package/dist/runtime/heapEligibility.d.ts.map +1 -1
  37. package/dist/runtime/heapEligibility.js +22 -2
  38. package/dist/runtime/heapEligibility.js.map +1 -1
  39. package/dist/runtime/heapScene/chunkedArena.d.ts +76 -0
  40. package/dist/runtime/heapScene/chunkedArena.d.ts.map +1 -0
  41. package/dist/runtime/heapScene/chunkedArena.js +223 -0
  42. package/dist/runtime/heapScene/chunkedArena.js.map +1 -0
  43. package/dist/runtime/heapScene/freelist.d.ts +50 -0
  44. package/dist/runtime/heapScene/freelist.d.ts.map +1 -0
  45. package/dist/runtime/heapScene/freelist.js +160 -0
  46. package/dist/runtime/heapScene/freelist.js.map +1 -0
  47. package/dist/runtime/heapScene/growBuffer.d.ts +23 -2
  48. package/dist/runtime/heapScene/growBuffer.d.ts.map +1 -1
  49. package/dist/runtime/heapScene/growBuffer.js +35 -3
  50. package/dist/runtime/heapScene/growBuffer.js.map +1 -1
  51. package/dist/runtime/heapScene/pools.d.ts +65 -42
  52. package/dist/runtime/heapScene/pools.d.ts.map +1 -1
  53. package/dist/runtime/heapScene/pools.js +206 -134
  54. package/dist/runtime/heapScene/pools.js.map +1 -1
  55. package/dist/runtime/heapScene.d.ts +12 -0
  56. package/dist/runtime/heapScene.d.ts.map +1 -1
  57. package/dist/runtime/heapScene.js +938 -85
  58. package/dist/runtime/heapScene.js.map +1 -1
  59. package/dist/runtime/hybridScene.d.ts +7 -0
  60. package/dist/runtime/hybridScene.d.ts.map +1 -1
  61. package/dist/runtime/hybridScene.js +1 -0
  62. package/dist/runtime/hybridScene.js.map +1 -1
  63. package/dist/runtime/index.d.ts +4 -3
  64. package/dist/runtime/index.d.ts.map +1 -1
  65. package/dist/runtime/index.js +4 -3
  66. package/dist/runtime/index.js.map +1 -1
  67. package/dist/runtime/renderTask.d.ts +5 -0
  68. package/dist/runtime/renderTask.d.ts.map +1 -1
  69. package/dist/runtime/renderTask.js +1 -0
  70. package/dist/runtime/renderTask.js.map +1 -1
  71. package/dist/runtime/runtime.d.ts +6 -0
  72. package/dist/runtime/runtime.d.ts.map +1 -1
  73. package/dist/runtime/runtime.js +1 -0
  74. package/dist/runtime/runtime.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/runtime/derivedModes/kernelCodegen.ts +673 -0
  77. package/src/runtime/derivedModes/modeKeyCpu.ts +22 -60
  78. package/src/runtime/derivedModes/partitionDispatcher.ts +349 -0
  79. package/src/runtime/derivedModes/partitionKernelLayout.ts +25 -0
  80. package/src/runtime/derivedModes/rule.ts +66 -145
  81. package/src/runtime/derivedUniforms/dispatch.ts +48 -21
  82. package/src/runtime/derivedUniforms/marker.ts +210 -16
  83. package/src/runtime/derivedUniforms/sceneIntegration.ts +67 -20
  84. package/src/runtime/heapEligibility.ts +22 -1
  85. package/src/runtime/heapScene/chunkedArena.ts +238 -0
  86. package/src/runtime/heapScene/freelist.ts +161 -0
  87. package/src/runtime/heapScene/growBuffer.ts +39 -2
  88. package/src/runtime/heapScene/pools.ts +231 -143
  89. package/src/runtime/heapScene.ts +1119 -81
  90. package/src/runtime/hybridScene.ts +8 -0
  91. package/src/runtime/index.ts +12 -9
  92. package/src/runtime/renderTask.ts +6 -0
  93. package/src/runtime/runtime.ts +7 -0
  94. package/src/runtime/derivedModes/gpuDispatcher.ts +0 -226
  95. package/src/runtime/derivedModes/gpuKernel.ts +0 -98
@@ -1 +1 @@
1
- {"version":3,"file":"modeKeyCpu.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modeKeyCpu.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/modeKeyCpu.ts"],"names":[],"mappings":"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"}
@@ -11,26 +11,6 @@
11
11
  // `derivedMode(...)` on top of this.
12
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
- }
34
14
  /**
35
15
  * One-shot snapshot of the current values of every leaf aval in a
36
16
  * `PipelineState`, mapped onto a `PipelineStateDescriptor` whose
@@ -62,49 +42,13 @@ export function snapshotDescriptor(ps, signature, options = {}) {
62
42
  return applyRules(out, options);
63
43
  }
64
44
  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
- }
107
- return out;
45
+ // Phase 5c.3 — rules are IR-traced and run on the GPU. We never
46
+ // CPU-evaluate them here; the descriptor returned reflects the
47
+ // raw PipelineState aval values (= the "declared" value for each
48
+ // axis). The heap runtime creates one bucket slot per
49
+ // `rule.domain` entry and the partition kernel routes per record.
50
+ void options;
51
+ return d;
108
52
  }
109
53
  function buildAttachmentsFor(base, signature) {
110
54
  // When `ps` is undefined, every named attachment uses defaults.
@@ -231,10 +175,22 @@ export class ModeKeyTracker {
231
175
  if (ps.alphaToCoverage !== undefined)
232
176
  visit(ps.alphaToCoverage);
233
177
  }
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).
178
+ // Phase 5c.3: rule-input deps will be walked from the rule's
179
+ // shader-IR body (analyseInputUniforms pending M6/M7 wire-up).
180
+ // For now we only visit `declared` if it's an aval leaves
181
+ // referenced from the rule body don't trigger partition re-
182
+ // dispatch until the heap side reads the IR. Hidden behind the
183
+ // initGpuRouting stub that throws on attached rules.
184
+ if (this.modeRules !== undefined) {
185
+ for (const rule of Object.values(this.modeRules)) {
186
+ if (rule === undefined)
187
+ continue;
188
+ const d = rule.declared;
189
+ if (typeof d === "object" && d !== null && "getValue" in d) {
190
+ visit(d);
191
+ }
192
+ }
193
+ }
238
194
  for (const av of this.ruleDeps)
239
195
  visit(av);
240
196
  }
@@ -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,79 @@
1
+ export interface PartitionSceneSpec {
2
+ /** Total slot count = `resolved.length` (for the single-axis v1). */
3
+ readonly totalSlots: number;
4
+ /** Externally-owned slot draw buffers (one per slot). */
5
+ readonly slotDrawBufs: ReadonlyArray<GPUBuffer>;
6
+ /** Initial record capacity. */
7
+ readonly initialRecords?: number;
8
+ /** Codegen'd kernel WGSL. Embeds `declared` as a Const + the
9
+ * SLOT_LOOKUP table. Swap via `rebuildKernel(...)` on declared mark. */
10
+ readonly kernelWGSL: string;
11
+ /** Number of per-record uniform refs (= bucket.uniformOrder.length).
12
+ * The master record's width is `6 + numUniforms` u32s. Grow with
13
+ * `growUniforms(...)` when a new rule reads a uniform not yet in
14
+ * the bucket's order. */
15
+ readonly numUniforms: number;
16
+ }
17
+ export declare class GpuPartitionScene {
18
+ readonly device: GPUDevice;
19
+ readonly label: string;
20
+ get totalSlots(): number;
21
+ masterBuf: GPUBuffer;
22
+ masterShadow: Uint32Array;
23
+ numRecords: number;
24
+ capacity: number;
25
+ slotCountBufs: GPUBuffer[];
26
+ slotDrawBufs: GPUBuffer[];
27
+ private _totalSlots;
28
+ private _numUniforms;
29
+ get numUniforms(): number;
30
+ get recordU32(): number;
31
+ get recordBytes(): number;
32
+ /** params: [numRecords] — single u32 (padded to 16 bytes for WGSL
33
+ * uniform alignment). `declared` is no longer carried here; the
34
+ * kernel WGSL bakes it as a Const at codegen time. */
35
+ paramsBuf: GPUBuffer;
36
+ private kernelWGSL;
37
+ private bindGroup;
38
+ private layout;
39
+ private clearPipeline;
40
+ private partitionPipeline;
41
+ constructor(device: GPUDevice, label: string, spec: PartitionSceneSpec);
42
+ /** Swap to a freshly-codegen'd kernel WGSL string. Triggered when
43
+ * `declared` (baked as a Const in the kernel) changes — the
44
+ * pipelines + bind group are reset so the next dispatch
45
+ * recompiles. The master records, slot count buffers and slot
46
+ * draw buffers are kept. */
47
+ rebuildKernel(kernelWGSL: string): void;
48
+ rebindSlotDrawBufs(slotDraws: ReadonlyArray<GPUBuffer>): void;
49
+ /** Grow the bucket's slot count when a new rule registers and the
50
+ * union of its outputs introduces fresh slots. Allocates the
51
+ * additional atomic-count buffers and discards the bind-group
52
+ * layout (different N = different binding shape). The caller
53
+ * must follow up with `rebuildKernel(...)` so the new kernel
54
+ * knows about the new slot count. */
55
+ growSlots(newCount: number, newSlotDraws: ReadonlyArray<GPUBuffer>): void;
56
+ private ensurePipelines;
57
+ private ensureBindGroup;
58
+ appendRecord(drawIdx: number, indexStart: number, indexCount: number, instanceCount: number, comboId: number, uniformRefs: ReadonlyArray<number>): number;
59
+ /** Update an existing record's comboId. Used when an RO already
60
+ * in the master is re-classified (rare; only when rule rebucket
61
+ * fires on aval marks). */
62
+ setRecordComboId(recordIdx: number, comboId: number): void;
63
+ /** Update an existing record's uniform ref by uniform index. */
64
+ setRecordUniformRef(recordIdx: number, uniformIdx: number, ref: number): void;
65
+ removeRecord(recordIdx: number): number;
66
+ /** Widen the per-record uniform tail from `_numUniforms` to
67
+ * `newNumUniforms`. Existing records are restrided in-place; the
68
+ * new tail slots are zero-filled (rules added later that read
69
+ * the new uniform will only do so under their own combo, where
70
+ * records carry real refs). The kernel WGSL must be rebuilt
71
+ * separately (`rebuildKernel`). */
72
+ growUniforms(newNumUniforms: number): void;
73
+ private grow;
74
+ flush(): void;
75
+ /** Encode clear + partition into `enc`. */
76
+ dispatch(arenaBuf: GPUBuffer, enc: GPUCommandEncoder): void;
77
+ dispose(): void;
78
+ }
79
+ //# sourceMappingURL=partitionDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partitionDispatcher.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/partitionDispatcher.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAChD,+BAA+B;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;6EACyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;8BAG0B;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,IAAI,UAAU,IAAI,MAAM,CAA6B;IAErD,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,SAAK;IACf,QAAQ,SAAK;IAEb,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,YAAY,EAAE,SAAS,EAAE,CAAC;IAI1B,OAAO,CAAC,WAAW,CAAS;IAI5B,OAAO,CAAC,YAAY,CAAS;IAC7B,IAAI,WAAW,IAAI,MAAM,CAA8B;IACvD,IAAI,SAAS,IAAI,MAAM,CAAkD;IACzE,IAAI,WAAW,IAAI,MAAM,CAAoD;IAE7E;;2DAEuD;IACvD,SAAS,EAAE,SAAS,CAAC;IAErB,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,iBAAiB,CAAmC;gBAEhD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB;IA+BtE;;;;iCAI6B;IAC7B,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQvC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI;IAQ7D;;;;;0CAKsC;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI;IAqBzE,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,eAAe;IAwBvB,YAAY,CACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,MAAM;IAqBT;;gCAE4B;IAC5B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK1D,gEAAgE;IAChE,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAevC;;;;;wCAKoC;IACpC,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAuB1C,OAAO,CAAC,IAAI;IAeZ,KAAK,IAAI,IAAI;IASb,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAiB3D,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,303 @@
1
+ // Phase 5c.3 — per-bucket partition dispatcher.
2
+ //
3
+ // Owns the master record buffer + per-slot atomic counters + the
4
+ // compute pipelines. One instance per GPU-routed bucket. The WGSL
5
+ // kernel is codegen'd by `emitPartitionKernel(...)` upstream (in
6
+ // heapScene) and handed to the dispatcher as a string — declared
7
+ // values are baked in as Consts, so a `declared`-aval mark
8
+ // triggers `rebuildKernel(newWgsl)` to swap to a freshly-codegen'd
9
+ // kernel for the new declared.
10
+ //
11
+ // `dispatch(enc)` encodes:
12
+ // 1. clear pass (zero every slot's atomic counter)
13
+ // 2. partition pass (one thread per record; evaluates the per-
14
+ // axis rule, scatters into the matching slot via the kernel's
15
+ // embedded SLOT_LOOKUP table)
16
+ //
17
+ // After dispatch the existing scan kernel runs per slot, reading the
18
+ // slot's drawTable that the partition just populated.
19
+ import { partitionRecordU32, partitionRecordBytes, PARTITION_RECORD_PREFIX_U32 } from "./partitionKernelLayout.js";
20
+ const WG_SIZE = 64;
21
+ const POW2 = (n) => { let p = 1; while (p < n)
22
+ p <<= 1; return Math.max(64, p); };
23
+ export class GpuPartitionScene {
24
+ device;
25
+ label;
26
+ get totalSlots() { return this._totalSlots; }
27
+ masterBuf;
28
+ masterShadow;
29
+ numRecords = 0;
30
+ capacity = 0;
31
+ slotCountBufs;
32
+ slotDrawBufs;
33
+ // `totalSlots` is mutable — `growSlots(...)` extends both the
34
+ // dispatcher and the kernel layout to accommodate new pipeline
35
+ // slots that appear when a new rule is registered on the bucket.
36
+ _totalSlots;
37
+ // Per-bucket master record width = 6 + numUniforms. Mutable —
38
+ // `growUniforms(...)` widens existing records in-place so a rule
39
+ // reading a new uniform can land without rebuilding the master.
40
+ _numUniforms;
41
+ get numUniforms() { return this._numUniforms; }
42
+ get recordU32() { return partitionRecordU32(this._numUniforms); }
43
+ get recordBytes() { return partitionRecordBytes(this._numUniforms); }
44
+ /** params: [numRecords] — single u32 (padded to 16 bytes for WGSL
45
+ * uniform alignment). `declared` is no longer carried here; the
46
+ * kernel WGSL bakes it as a Const at codegen time. */
47
+ paramsBuf;
48
+ kernelWGSL;
49
+ bindGroup = null;
50
+ layout = null;
51
+ clearPipeline = null;
52
+ partitionPipeline = null;
53
+ constructor(device, label, spec) {
54
+ if (spec.slotDrawBufs.length !== spec.totalSlots) {
55
+ throw new Error(`GpuPartitionScene: slotDrawBufs.length (${spec.slotDrawBufs.length}) != totalSlots (${spec.totalSlots})`);
56
+ }
57
+ this.device = device;
58
+ this.label = label;
59
+ this._totalSlots = spec.totalSlots;
60
+ this._numUniforms = spec.numUniforms;
61
+ this.capacity = POW2(spec.initialRecords ?? 16);
62
+ const bytes = this.capacity * partitionRecordBytes(this._numUniforms);
63
+ this.masterBuf = device.createBuffer({
64
+ label: `${label}/master`, size: bytes,
65
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
66
+ });
67
+ this.masterShadow = new Uint32Array(bytes / 4);
68
+ this.slotCountBufs = new Array(spec.totalSlots).fill(0).map((_, i) => device.createBuffer({
69
+ label: `${label}/slot${i}Count`, size: 4,
70
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
71
+ }));
72
+ this.slotDrawBufs = [...spec.slotDrawBufs];
73
+ this.paramsBuf = device.createBuffer({
74
+ label: `${label}/params`, size: 16,
75
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
76
+ });
77
+ this.kernelWGSL = spec.kernelWGSL;
78
+ }
79
+ /** Swap to a freshly-codegen'd kernel WGSL string. Triggered when
80
+ * `declared` (baked as a Const in the kernel) changes — the
81
+ * pipelines + bind group are reset so the next dispatch
82
+ * recompiles. The master records, slot count buffers and slot
83
+ * draw buffers are kept. */
84
+ rebuildKernel(kernelWGSL) {
85
+ this.kernelWGSL = kernelWGSL;
86
+ this.clearPipeline = null;
87
+ this.partitionPipeline = null;
88
+ // layout shape is invariant across declared values (slot count
89
+ // is fixed for a given bucket); keep it.
90
+ }
91
+ rebindSlotDrawBufs(slotDraws) {
92
+ if (slotDraws.length !== this._totalSlots) {
93
+ throw new Error(`rebindSlotDrawBufs: expected ${this._totalSlots} buffers, got ${slotDraws.length}`);
94
+ }
95
+ this.slotDrawBufs = [...slotDraws];
96
+ this.bindGroup = null;
97
+ }
98
+ /** Grow the bucket's slot count when a new rule registers and the
99
+ * union of its outputs introduces fresh slots. Allocates the
100
+ * additional atomic-count buffers and discards the bind-group
101
+ * layout (different N = different binding shape). The caller
102
+ * must follow up with `rebuildKernel(...)` so the new kernel
103
+ * knows about the new slot count. */
104
+ growSlots(newCount, newSlotDraws) {
105
+ if (newCount < this._totalSlots) {
106
+ throw new Error(`growSlots: cannot shrink (have ${this._totalSlots}, asked for ${newCount})`);
107
+ }
108
+ if (newSlotDraws.length !== newCount) {
109
+ throw new Error(`growSlots: slotDraws.length ${newSlotDraws.length} != newCount ${newCount}`);
110
+ }
111
+ for (let i = this._totalSlots; i < newCount; i++) {
112
+ this.slotCountBufs.push(this.device.createBuffer({
113
+ label: `${this.label}/slot${i}Count`, size: 4,
114
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
115
+ }));
116
+ }
117
+ this._totalSlots = newCount;
118
+ this.slotDrawBufs = [...newSlotDraws];
119
+ this.layout = null;
120
+ this.clearPipeline = null;
121
+ this.partitionPipeline = null;
122
+ this.bindGroup = null;
123
+ }
124
+ ensurePipelines() {
125
+ if (this.layout === null) {
126
+ const entries = [
127
+ { binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: "read-only-storage" } }, // arena
128
+ { binding: 1, visibility: GPUShaderStage.COMPUTE, buffer: { type: "read-only-storage" } }, // master
129
+ { binding: 2, visibility: GPUShaderStage.COMPUTE, buffer: { type: "uniform" } }, // params
130
+ ];
131
+ let nb = 3;
132
+ for (let i = 0; i < this.totalSlots; i++) {
133
+ entries.push({ binding: nb + i, visibility: GPUShaderStage.COMPUTE, buffer: { type: "storage" } });
134
+ }
135
+ nb += this.totalSlots;
136
+ for (let i = 0; i < this.totalSlots; i++) {
137
+ entries.push({ binding: nb + i, visibility: GPUShaderStage.COMPUTE, buffer: { type: "storage" } });
138
+ }
139
+ this.layout = this.device.createBindGroupLayout({ label: `${this.label}/bgl`, entries });
140
+ }
141
+ if (this.clearPipeline === null || this.partitionPipeline === null) {
142
+ const module = this.device.createShaderModule({
143
+ code: this.kernelWGSL,
144
+ label: `${this.label}/module`,
145
+ });
146
+ const plLayout = this.device.createPipelineLayout({ bindGroupLayouts: [this.layout] });
147
+ this.clearPipeline = this.device.createComputePipeline({
148
+ label: `${this.label}/clear`, layout: plLayout,
149
+ compute: { module, entryPoint: "clear" },
150
+ });
151
+ this.partitionPipeline = this.device.createComputePipeline({
152
+ label: `${this.label}/partition`, layout: plLayout,
153
+ compute: { module, entryPoint: "partitionRecords" },
154
+ });
155
+ }
156
+ }
157
+ ensureBindGroup(arenaBuf) {
158
+ this.ensurePipelines();
159
+ if (this.bindGroup === null) {
160
+ const entries = [
161
+ { binding: 0, resource: { buffer: arenaBuf } },
162
+ { binding: 1, resource: { buffer: this.masterBuf } },
163
+ { binding: 2, resource: { buffer: this.paramsBuf } },
164
+ ];
165
+ let nb = 3;
166
+ for (let i = 0; i < this.totalSlots; i++) {
167
+ entries.push({ binding: nb + i, resource: { buffer: this.slotCountBufs[i] } });
168
+ }
169
+ nb += this.totalSlots;
170
+ for (let i = 0; i < this.totalSlots; i++) {
171
+ entries.push({ binding: nb + i, resource: { buffer: this.slotDrawBufs[i] } });
172
+ }
173
+ this.bindGroup = this.device.createBindGroup({
174
+ label: `${this.label}/bg`,
175
+ layout: this.layout,
176
+ entries,
177
+ });
178
+ }
179
+ }
180
+ appendRecord(drawIdx, indexStart, indexCount, instanceCount, comboId, uniformRefs) {
181
+ if (uniformRefs.length !== this._numUniforms) {
182
+ throw new Error(`GpuPartitionScene/appendRecord: expected ${this._numUniforms} uniform refs, got ${uniformRefs.length}`);
183
+ }
184
+ if (this.numRecords >= this.capacity)
185
+ this.grow();
186
+ const i = this.numRecords;
187
+ const ru32 = this.recordU32;
188
+ const o = i * ru32;
189
+ this.masterShadow[o + 0] = 0;
190
+ this.masterShadow[o + 1] = drawIdx;
191
+ this.masterShadow[o + 2] = indexStart;
192
+ this.masterShadow[o + 3] = indexCount;
193
+ this.masterShadow[o + 4] = instanceCount;
194
+ this.masterShadow[o + 5] = comboId >>> 0;
195
+ for (let k = 0; k < this._numUniforms; k++) {
196
+ this.masterShadow[o + PARTITION_RECORD_PREFIX_U32 + k] = (uniformRefs[k] ?? 0) >>> 0;
197
+ }
198
+ this.numRecords = i + 1;
199
+ return i;
200
+ }
201
+ /** Update an existing record's comboId. Used when an RO already
202
+ * in the master is re-classified (rare; only when rule rebucket
203
+ * fires on aval marks). */
204
+ setRecordComboId(recordIdx, comboId) {
205
+ if (recordIdx < 0 || recordIdx >= this.numRecords)
206
+ return;
207
+ this.masterShadow[recordIdx * this.recordU32 + 5] = comboId >>> 0;
208
+ }
209
+ /** Update an existing record's uniform ref by uniform index. */
210
+ setRecordUniformRef(recordIdx, uniformIdx, ref) {
211
+ if (recordIdx < 0 || recordIdx >= this.numRecords)
212
+ return;
213
+ if (uniformIdx < 0 || uniformIdx >= this._numUniforms)
214
+ return;
215
+ this.masterShadow[recordIdx * this.recordU32 + PARTITION_RECORD_PREFIX_U32 + uniformIdx] = ref >>> 0;
216
+ }
217
+ removeRecord(recordIdx) {
218
+ if (recordIdx < 0 || recordIdx >= this.numRecords)
219
+ return -1;
220
+ const last = this.numRecords - 1;
221
+ const ru32 = this.recordU32;
222
+ if (recordIdx !== last) {
223
+ const dst = recordIdx * ru32;
224
+ const src = last * ru32;
225
+ for (let k = 0; k < ru32; k++) {
226
+ this.masterShadow[dst + k] = this.masterShadow[src + k];
227
+ }
228
+ }
229
+ this.numRecords = last;
230
+ return recordIdx !== last ? last : -1;
231
+ }
232
+ /** Widen the per-record uniform tail from `_numUniforms` to
233
+ * `newNumUniforms`. Existing records are restrided in-place; the
234
+ * new tail slots are zero-filled (rules added later that read
235
+ * the new uniform will only do so under their own combo, where
236
+ * records carry real refs). The kernel WGSL must be rebuilt
237
+ * separately (`rebuildKernel`). */
238
+ growUniforms(newNumUniforms) {
239
+ if (newNumUniforms <= this._numUniforms)
240
+ return;
241
+ const oldU32 = partitionRecordU32(this._numUniforms);
242
+ const newU32 = partitionRecordU32(newNumUniforms);
243
+ const newBytes = this.capacity * newU32 * 4;
244
+ const grown = new Uint32Array(newBytes / 4);
245
+ // Restride existing records into the wider layout.
246
+ for (let i = 0; i < this.numRecords; i++) {
247
+ const oldOff = i * oldU32;
248
+ const newOff = i * newU32;
249
+ for (let k = 0; k < oldU32; k++)
250
+ grown[newOff + k] = this.masterShadow[oldOff + k];
251
+ // Trailing newU32-oldU32 slots stay 0.
252
+ }
253
+ this.masterShadow = grown;
254
+ this.masterBuf.destroy();
255
+ this.masterBuf = this.device.createBuffer({
256
+ label: `${this.label}/master`, size: newBytes,
257
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
258
+ });
259
+ this._numUniforms = newNumUniforms;
260
+ this.bindGroup = null;
261
+ }
262
+ grow() {
263
+ const newCap = POW2(this.numRecords + 1);
264
+ const bytes = newCap * this.recordBytes;
265
+ const grown = new Uint32Array(bytes / 4);
266
+ grown.set(this.masterShadow);
267
+ this.masterShadow = grown;
268
+ this.masterBuf.destroy();
269
+ this.masterBuf = this.device.createBuffer({
270
+ label: `${this.label}/master`, size: bytes,
271
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
272
+ });
273
+ this.capacity = newCap;
274
+ this.bindGroup = null;
275
+ }
276
+ flush() {
277
+ if (this.numRecords === 0)
278
+ return;
279
+ const bytes = this.numRecords * this.recordBytes;
280
+ this.device.queue.writeBuffer(this.masterBuf, 0, this.masterShadow.buffer, this.masterShadow.byteOffset, bytes);
281
+ }
282
+ /** Encode clear + partition into `enc`. */
283
+ dispatch(arenaBuf, enc) {
284
+ this.ensureBindGroup(arenaBuf);
285
+ this.device.queue.writeBuffer(this.paramsBuf, 0, new Uint32Array([this.numRecords, 0, 0, 0]).buffer, 0, 16);
286
+ const pass = enc.beginComputePass({ label: `${this.label}/pass` });
287
+ pass.setBindGroup(0, this.bindGroup);
288
+ pass.setPipeline(this.clearPipeline);
289
+ pass.dispatchWorkgroups(1);
290
+ if (this.numRecords > 0) {
291
+ pass.setPipeline(this.partitionPipeline);
292
+ pass.dispatchWorkgroups(Math.ceil(this.numRecords / WG_SIZE));
293
+ }
294
+ pass.end();
295
+ }
296
+ dispose() {
297
+ this.masterBuf.destroy();
298
+ for (const b of this.slotCountBufs)
299
+ b.destroy();
300
+ this.paramsBuf.destroy();
301
+ }
302
+ }
303
+ //# sourceMappingURL=partitionDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partitionDispatcher.js","sourceRoot":"","sources":["../../../src/runtime/derivedModes/partitionDispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CullMode } from "../pipelineCache/index.js";
2
+ /** Record layout: 6 × u32 = 24 bytes per record. Matches the heap
3
+ * scan's record format (5 × u32) plus a `modelRef` byte offset. */
4
+ export declare const PARTITION_RECORD_U32 = 6;
5
+ export declare const PARTITION_RECORD_BYTES: number;
6
+ /** Per-bucket partition kernel WGSL. Two output slots: declared
7
+ * + flipped. */
8
+ export declare const PARTITION_FLIP_CULL_BY_DET_WGSL = "\nstruct Record {\n // firstEmit is GPU-written by the scan; leave as 0 here.\n firstEmit: u32,\n drawIdx: u32,\n indexStart: u32,\n indexCount: u32,\n instanceCount: u32,\n modelRef: u32,\n};\nstruct PartitionParams {\n numRecords: u32,\n declaredCull: u32, // 0=none, 1=front, 2=back\n _pad0: u32,\n _pad1: u32,\n};\n\n@group(0) @binding(0) var<storage, read> arena: array<u32>;\n@group(0) @binding(1) var<storage, read> masterRecords: array<Record>;\n@group(0) @binding(2) var<uniform> params: PartitionParams;\n// Slot 0 = declared cull mode. Slot 1 = flipped cull mode.\n@group(0) @binding(3) var<storage, read_write> slot0Count: array<atomic<u32>>; // length 1\n@group(0) @binding(4) var<storage, read_write> slot1Count: array<atomic<u32>>;\n// Slot draw tables hold scan-format records (5 \u00D7 u32 per record:\n// firstEmit, drawIdx, indexStart, indexCount, instanceCount). We\n// drop modelRef on scatter \u2014 only the partition kernel needs it,\n// and including it would force the scan to read a 6-u32 stride.\n@group(0) @binding(5) var<storage, read_write> slot0DrawTable: array<u32>;\n@group(0) @binding(6) var<storage, read_write> slot1DrawTable: array<u32>;\n\nconst SCAN_REC_U32: u32 = 5u;\n\nfn loadUpper3x3(refBytes: u32) -> array<f32, 9> {\n let baseU32 = (refBytes + 16u) >> 2u;\n return array<f32, 9>(\n bitcast<f32>(arena[baseU32 + 0u]), bitcast<f32>(arena[baseU32 + 1u]), bitcast<f32>(arena[baseU32 + 2u]),\n bitcast<f32>(arena[baseU32 + 4u]), bitcast<f32>(arena[baseU32 + 5u]), bitcast<f32>(arena[baseU32 + 6u]),\n bitcast<f32>(arena[baseU32 + 8u]), bitcast<f32>(arena[baseU32 + 9u]), bitcast<f32>(arena[baseU32 + 10u]),\n );\n}\n\nfn det3x3(m: array<f32, 9>) -> f32 {\n return m[0] * (m[4] * m[8] - m[5] * m[7])\n - m[1] * (m[3] * m[8] - m[5] * m[6])\n + m[2] * (m[3] * m[7] - m[4] * m[6]);\n}\n\n@compute @workgroup_size(64)\nfn clear(@builtin(global_invocation_id) gid: vec3<u32>) {\n // One thread total clears both atomics. Cheap pass.\n if (gid.x != 0u) { return; }\n atomicStore(&slot0Count[0], 0u);\n atomicStore(&slot1Count[0], 0u);\n}\n\n@compute @workgroup_size(64)\nfn partition(@builtin(global_invocation_id) gid: vec3<u32>) {\n let i = gid.x;\n if (i >= params.numRecords) { return; }\n let r = masterRecords[i];\n let m = loadUpper3x3(r.modelRef);\n let flipped = det3x3(m) < 0.0;\n // slotIdx 0 = declared (not flipped), 1 = flipped.\n // Atomic-add into the appropriate slot's count, then scatter the\n // record into the slot's drawTable at the reserved offset.\n if (flipped) {\n let off = atomicAdd(&slot1Count[0], 1u);\n let base = off * SCAN_REC_U32;\n slot1DrawTable[base + 0u] = 0u; // firstEmit (scan rewrites)\n slot1DrawTable[base + 1u] = r.drawIdx;\n slot1DrawTable[base + 2u] = r.indexStart;\n slot1DrawTable[base + 3u] = r.indexCount;\n slot1DrawTable[base + 4u] = r.instanceCount;\n } else {\n let off = atomicAdd(&slot0Count[0], 1u);\n let base = off * SCAN_REC_U32;\n slot0DrawTable[base + 0u] = 0u;\n slot0DrawTable[base + 1u] = r.drawIdx;\n slot0DrawTable[base + 2u] = r.indexStart;\n slot0DrawTable[base + 3u] = r.indexCount;\n slot0DrawTable[base + 4u] = r.instanceCount;\n }\n}\n";
9
+ /** WGSL helper: pack a Trafo3d's upper-left 3×3 + a CullMode enum
10
+ * into the partition kernel's expected uniform layout. */
11
+ export declare function cullModeToU32(c: CullMode): number;
12
+ //# sourceMappingURL=partitionKernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partitionKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/derivedModes/partitionKernel.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D;oEACoE;AACpE,eAAO,MAAM,oBAAoB,IAAM,CAAC;AACxC,eAAO,MAAM,sBAAsB,QAA2B,CAAC;AAE/D;iBACiB;AACjB,eAAO,MAAM,+BAA+B,6yGAmF3C,CAAC;AAEF;2DAC2D;AAC3D,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEjD"}