@aardworx/wombat.rendering 0.9.11 → 0.9.13

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 (79) hide show
  1. package/dist/runtime/derivedUniforms/codegen.d.ts +8 -0
  2. package/dist/runtime/derivedUniforms/codegen.d.ts.map +1 -0
  3. package/dist/runtime/derivedUniforms/codegen.js +449 -0
  4. package/dist/runtime/derivedUniforms/codegen.js.map +1 -0
  5. package/dist/runtime/derivedUniforms/dispatch.d.ts +14 -93
  6. package/dist/runtime/derivedUniforms/dispatch.d.ts.map +1 -1
  7. package/dist/runtime/derivedUniforms/dispatch.js +123 -299
  8. package/dist/runtime/derivedUniforms/dispatch.js.map +1 -1
  9. package/dist/runtime/derivedUniforms/flatten.d.ts +25 -0
  10. package/dist/runtime/derivedUniforms/flatten.d.ts.map +1 -0
  11. package/dist/runtime/derivedUniforms/flatten.js +71 -0
  12. package/dist/runtime/derivedUniforms/flatten.js.map +1 -0
  13. package/dist/runtime/derivedUniforms/index.d.ts +10 -5
  14. package/dist/runtime/derivedUniforms/index.d.ts.map +1 -1
  15. package/dist/runtime/derivedUniforms/index.js +24 -19
  16. package/dist/runtime/derivedUniforms/index.js.map +1 -1
  17. package/dist/runtime/derivedUniforms/marker.d.ts +76 -0
  18. package/dist/runtime/derivedUniforms/marker.d.ts.map +1 -0
  19. package/dist/runtime/derivedUniforms/marker.js +156 -0
  20. package/dist/runtime/derivedUniforms/marker.js.map +1 -0
  21. package/dist/runtime/derivedUniforms/recipes.d.ts +6 -41
  22. package/dist/runtime/derivedUniforms/recipes.d.ts.map +1 -1
  23. package/dist/runtime/derivedUniforms/recipes.js +53 -129
  24. package/dist/runtime/derivedUniforms/recipes.js.map +1 -1
  25. package/dist/runtime/derivedUniforms/records.d.ts +40 -0
  26. package/dist/runtime/derivedUniforms/records.d.ts.map +1 -0
  27. package/dist/runtime/derivedUniforms/records.js +151 -0
  28. package/dist/runtime/derivedUniforms/records.js.map +1 -0
  29. package/dist/runtime/derivedUniforms/registry.d.ts +33 -0
  30. package/dist/runtime/derivedUniforms/registry.d.ts.map +1 -0
  31. package/dist/runtime/derivedUniforms/registry.js +58 -0
  32. package/dist/runtime/derivedUniforms/registry.js.map +1 -0
  33. package/dist/runtime/derivedUniforms/rule.d.ts +26 -0
  34. package/dist/runtime/derivedUniforms/rule.d.ts.map +1 -0
  35. package/dist/runtime/derivedUniforms/rule.js +35 -0
  36. package/dist/runtime/derivedUniforms/rule.js.map +1 -0
  37. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts +34 -33
  38. package/dist/runtime/derivedUniforms/sceneIntegration.d.ts.map +1 -1
  39. package/dist/runtime/derivedUniforms/sceneIntegration.js +80 -90
  40. package/dist/runtime/derivedUniforms/sceneIntegration.js.map +1 -1
  41. package/dist/runtime/heapScene.d.ts.map +1 -1
  42. package/dist/runtime/heapScene.js +78 -26
  43. package/dist/runtime/heapScene.js.map +1 -1
  44. package/dist/runtime/hybridScene.js +1 -1
  45. package/dist/runtime/hybridScene.js.map +1 -1
  46. package/dist/runtime/index.d.ts +1 -0
  47. package/dist/runtime/index.d.ts.map +1 -1
  48. package/dist/runtime/index.js +2 -0
  49. package/dist/runtime/index.js.map +1 -1
  50. package/dist/runtime/renderTask.js +1 -1
  51. package/dist/runtime/renderTask.js.map +1 -1
  52. package/dist/runtime/runtime.js +1 -1
  53. package/dist/runtime/runtime.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/runtime/derivedUniforms/codegen.ts +477 -0
  56. package/src/runtime/derivedUniforms/dispatch.ts +135 -341
  57. package/src/runtime/derivedUniforms/flatten.ts +89 -0
  58. package/src/runtime/derivedUniforms/index.ts +50 -34
  59. package/src/runtime/derivedUniforms/marker.ts +169 -0
  60. package/src/runtime/derivedUniforms/recipes.ts +63 -155
  61. package/src/runtime/derivedUniforms/records.ts +158 -0
  62. package/src/runtime/derivedUniforms/registry.ts +77 -0
  63. package/src/runtime/derivedUniforms/rule.ts +59 -0
  64. package/src/runtime/derivedUniforms/sceneIntegration.ts +115 -149
  65. package/src/runtime/heapScene.ts +77 -28
  66. package/src/runtime/hybridScene.ts +1 -1
  67. package/src/runtime/index.ts +8 -0
  68. package/src/runtime/renderTask.ts +1 -1
  69. package/src/runtime/runtime.ts +1 -1
  70. package/dist/runtime/derivedUniforms/slotId.d.ts +0 -15
  71. package/dist/runtime/derivedUniforms/slotId.d.ts.map +0 -1
  72. package/dist/runtime/derivedUniforms/slotId.js +0 -30
  73. package/dist/runtime/derivedUniforms/slotId.js.map +0 -1
  74. package/dist/runtime/derivedUniforms/uberKernel.wgsl.d.ts +0 -13
  75. package/dist/runtime/derivedUniforms/uberKernel.wgsl.d.ts.map +0 -1
  76. package/dist/runtime/derivedUniforms/uberKernel.wgsl.js +0 -218
  77. package/dist/runtime/derivedUniforms/uberKernel.wgsl.js.map +0 -1
  78. package/src/runtime/derivedUniforms/slotId.ts +0 -35
  79. package/src/runtime/derivedUniforms/uberKernel.wgsl.ts +0 -220
@@ -90,7 +90,7 @@ export function compileHybridScene(device, signature, tree, opts = {}) {
90
90
  fragmentOutputLayout,
91
91
  atlasPool,
92
92
  ...(opts.enableFamilyMerge === true ? { enableFamilyMerge: true } : {}),
93
- ...(opts.enableDerivedUniforms === true ? { enableDerivedUniforms: true } : {}),
93
+ ...(opts.enableDerivedUniforms === false ? { enableDerivedUniforms: false } : {}),
94
94
  });
95
95
  // ─── Legacy subset → RenderTree → ScenePass ──────────────────────
96
96
  // The unordered-from-set wrapper drops index/order info; the legacy
@@ -1 +1 @@
1
- {"version":3,"file":"hybridScene.js","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hybridScene.js","sourceRoot":"","sources":["../../src/runtime/hybridScene.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export { compileHeapEffect, type CompiledHeapEffect, type FragmentOutputLayout,
8
8
  export { flattenRenderTree } from "./flattenTree.js";
9
9
  export { isHeapEligible } from "./heapEligibility.js";
10
10
  export { renderObjectToHeapSpec } from "./heapAdapter.js";
11
+ export { derivedUniform, DerivedExpr, type DerivedScope, ruleFromIR, uniformRef, isDerivedRule, hashIR, type DerivedRule, type IRFragment, STANDARD_DERIVED_RULES, isStandardDerivedName, } from "./derivedUniforms/index.js";
11
12
  export { compileHybridScene, type CompileHybridSceneOptions, type HybridScene, } from "./hybridScene.js";
12
13
  export { BvhTree2d, SPLIT_LIMIT_DEFAULT, } from "./textureAtlas/bvhTree2d.js";
13
14
  export { TexturePacking, empty as emptyTexturePacking, isEmpty as isEmptyTexturePacking, count as countTexturePacking, occupancy as texturePackingOccupancy, square as squareTexturePacking, tryAddMany as texturePackingTryAddMany, tryOfArray as texturePackingTryOfArray, } from "./textureAtlas/packer.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EACP,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACd,KAAK,IAAI,mBAAmB,EAC5B,OAAO,IAAI,qBAAqB,EAChC,KAAK,IAAI,mBAAmB,EAC5B,SAAS,IAAI,uBAAuB,EACpC,MAAM,IAAI,oBAAoB,EAC9B,UAAU,IAAI,wBAAwB,EACtC,UAAU,IAAI,wBAAwB,GACvC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,OAAO,EACP,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EACL,cAAc,EAAE,WAAW,EAAE,KAAK,YAAY,EAC9C,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAC7C,KAAK,WAAW,EAAE,KAAK,UAAU,EACjC,sBAAsB,EAAE,qBAAqB,GAC9C,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,SAAS,EACT,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACd,KAAK,IAAI,mBAAmB,EAC5B,OAAO,IAAI,qBAAqB,EAChC,KAAK,IAAI,mBAAmB,EAC5B,SAAS,IAAI,uBAAuB,EACpC,MAAM,IAAI,oBAAoB,EAC9B,UAAU,IAAI,wBAAwB,EACtC,UAAU,IAAI,wBAAwB,GACvC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC"}
@@ -9,6 +9,8 @@ export { compileHeapEffect, } from "./heapEffect.js";
9
9
  export { flattenRenderTree } from "./flattenTree.js";
10
10
  export { isHeapEligible } from "./heapEligibility.js";
11
11
  export { renderObjectToHeapSpec } from "./heapAdapter.js";
12
+ // ─── Derived uniforms (§7): a uniform binding is a value (aval/constant) OR a rule ──
13
+ export { derivedUniform, DerivedExpr, ruleFromIR, uniformRef, isDerivedRule, hashIR, STANDARD_DERIVED_RULES, isStandardDerivedName, } from "./derivedUniforms/index.js";
12
14
  export { compileHybridScene, } from "./hybridScene.js";
13
15
  // ─── Texture atlas (heap path Tier-S texture sharing) ───────────────
14
16
  export { BvhTree2d, SPLIT_LIMIT_DEFAULT, } from "./textureAtlas/bvhTree2d.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EACL,OAAO,GAER,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,GAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,GAOf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,GAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAE1B,uEAAuE;AACvE,OAAO,EACL,SAAS,EACT,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACd,KAAK,IAAI,mBAAmB,EAC5B,OAAO,IAAI,qBAAqB,EAChC,KAAK,IAAI,mBAAmB,EAC5B,SAAS,IAAI,uBAAuB,EACpC,MAAM,IAAI,oBAAoB,EAC9B,UAAU,IAAI,wBAAwB,EACtC,UAAU,IAAI,wBAAwB,GACvC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EACL,OAAO,GAER,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,GAEV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,GAOf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,GAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,uFAAuF;AACvF,OAAO,EACL,cAAc,EAAE,WAAW,EAC3B,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAE7C,sBAAsB,EAAE,qBAAqB,GAC9C,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,GAGnB,MAAM,kBAAkB,CAAC;AAE1B,uEAAuE;AACvE,OAAO,EACL,SAAS,EACT,mBAAmB,GACpB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,cAAc,EACd,KAAK,IAAI,mBAAmB,EAC5B,OAAO,IAAI,qBAAqB,EAChC,KAAK,IAAI,mBAAmB,EAC5B,SAAS,IAAI,uBAAuB,EACpC,MAAM,IAAI,oBAAoB,EAC9B,UAAU,IAAI,wBAAwB,EACtC,UAAU,IAAI,wBAAwB,GACvC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,6BAA6B,CAAC"}
@@ -197,7 +197,7 @@ class RenderTask {
197
197
  compileEffect: this.ctx.compileEffect,
198
198
  ...(this.ctx.heapEnabled !== undefined ? { heapEnabled: this.ctx.heapEnabled } : {}),
199
199
  ...(this.ctx.enableFamilyMerge === true ? { enableFamilyMerge: true } : {}),
200
- ...(this.ctx.enableDerivedUniforms === true ? { enableDerivedUniforms: true } : {}),
200
+ ...(this.ctx.enableDerivedUniforms === false ? { enableDerivedUniforms: false } : {}),
201
201
  });
202
202
  this._scenes.set(cmd, s);
203
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"renderTask.js","sourceRoot":"","sources":["../../src/runtime/renderTask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderTask.js","sourceRoot":"","sources":["../../src/runtime/renderTask.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ export class Runtime {
34
34
  })),
35
35
  ...(opts.heapEnabled !== undefined ? { heapEnabled: opts.heapEnabled } : {}),
36
36
  ...(opts.enableFamilyMerge === true ? { enableFamilyMerge: true } : {}),
37
- ...(opts.enableDerivedUniforms === true ? { enableDerivedUniforms: true } : {}),
37
+ ...(opts.enableDerivedUniforms === false ? { enableDerivedUniforms: false } : {}),
38
38
  };
39
39
  // `device.lost` is a real-WebGPU promise; mock devices may not
40
40
  // expose it. Treat as "never lost" in that case.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.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.9.11",
3
+ "version": "0.9.13",
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",
@@ -0,0 +1,477 @@
1
+ // §7 v2 — uber-kernel codegen.
2
+ //
3
+ // Emits the single compute kernel from the rule registry. One thread per
4
+ // record; each thread switches on `rule_id` and runs the matching arm:
5
+ // load the inputs (df32 from a constituent slot, or plain f32 from the
6
+ // drawHeader), do the math, write the result to MainHeap.
7
+ //
8
+ // v0 supports the rule shapes the standard trafo recipes need:
9
+ // • a single mat4 input, output mat4 → collapse
10
+ // • a left-fold MulMatMat over N mat4 inputs, output mat4 → dfmulN + collapse
11
+ // • a single mat4 input, output mat3 → upper-3×3 of the transposed input (normal matrix)
12
+ // Arbitrary IR rules (the wgsl `expr()` lowering path) land in a follow-up;
13
+ // codegen throws on a shape it doesn't recognise. See docs/derived-uniforms-extensible.md.
14
+
15
+ import type { Expr, Type, Literal } from "@aardworx/wombat.shader/ir";
16
+ import { visitExprChildren } from "@aardworx/wombat.shader/ir";
17
+ import { mapExpr } from "@aardworx/wombat.shader/passes";
18
+ import type { DerivedUniformRegistry, RuleEntry } from "./registry.js";
19
+
20
+ export interface UberKernel {
21
+ readonly wgsl: string;
22
+ /** Record stride (u32 words) the kernel was generated for — must match RecordsBuffer.strideWords. */
23
+ readonly strideU32: number;
24
+ }
25
+
26
+ // ─── Rule-shape classification ────────────────────────────────────────
27
+
28
+ type Shape =
29
+ | { kind: "collapse"; arity: 1 } // mat4 in → mat4 out (df32-precise)
30
+ | { kind: "matmulChain"; arity: number } // L1·…·LN (all mat4) → mat4 out (df32-precise)
31
+ | { kind: "normalMatrix"; arity: 1 } // mat4 in → mat3 out (upper-3×3 of transpose, df32)
32
+ | { kind: "generic"; arity: number }; // arbitrary IR, lowered via the wgsl printer (f32)
33
+
34
+ function isMat4(e: Expr): boolean {
35
+ const t = e.type;
36
+ return t.kind === "Matrix" && t.rows === 4 && t.cols === 4 && t.element.kind === "Float";
37
+ }
38
+ function isMat3(t: Expr["type"]): boolean {
39
+ return t.kind === "Matrix" && t.rows === 3 && t.cols === 3 && t.element.kind === "Float";
40
+ }
41
+
42
+ /** A mat4 "leaf" is `ReadInput("Uniform", …)` or `Inverse(ReadInput("Uniform", …))`. */
43
+ function isMat4Leaf(e: Expr): boolean {
44
+ if (e.kind === "ReadInput" && e.scope === "Uniform" && isMat4(e)) return true;
45
+ if (e.kind === "Inverse" && isMat4(e) && e.value.kind === "ReadInput" && e.value.scope === "Uniform") return true;
46
+ return false;
47
+ }
48
+
49
+ /** Flatten a left-assoc `MulMatMat` tree into its leaf list (left→right), or undefined if it isn't one. */
50
+ function matmulChainLeaves(e: Expr): Expr[] | undefined {
51
+ if (isMat4Leaf(e)) return [e];
52
+ if (e.kind === "MulMatMat" && isMat4(e)) {
53
+ const left = matmulChainLeaves(e.lhs);
54
+ const right = matmulChainLeaves(e.rhs);
55
+ if (left && right) return [...left, ...right];
56
+ }
57
+ return undefined;
58
+ }
59
+
60
+ function classify(entry: RuleEntry): Shape {
61
+ const ir = entry.ir;
62
+ // Preferred (df32-precise) shapes for the standard trafo recipes.
63
+ if (isMat3(entry.outputType) && entry.inputs.length === 1) return { kind: "normalMatrix", arity: 1 };
64
+ if (!isMat3(entry.outputType)) {
65
+ const chain = matmulChainLeaves(ir);
66
+ if (chain !== undefined) {
67
+ if (chain.length === 1) return { kind: "collapse", arity: 1 };
68
+ // The arm consumes inputs positionally in chain order; that matches `entry.inputs`
69
+ // (first-appearance order) only when no leaf is repeated — otherwise fall to generic.
70
+ if (chain.length === entry.inputs.length) return { kind: "matmulChain", arity: chain.length };
71
+ }
72
+ }
73
+ // Anything else: lower the IR via the wgsl printer (single precision).
74
+ return { kind: "generic", arity: entry.inputs.length };
75
+ }
76
+
77
+ // ─── WGSL fragments ───────────────────────────────────────────────────
78
+
79
+ const DF32_LIB = /* wgsl */ `
80
+ fn split12(a: f32) -> vec2<f32> {
81
+ let hi = bitcast<f32>(bitcast<u32>(a) & 0xFFFFE000u);
82
+ return vec2<f32>(hi, a - hi);
83
+ }
84
+ fn two_sum(a: f32, b: f32) -> vec2<f32> {
85
+ let s = a + b;
86
+ let bb = fma(1.0, s, -a);
87
+ let t1 = fma(1.0, s, -bb);
88
+ let t2 = fma(1.0, a, -t1);
89
+ let t3 = fma(1.0, b, -bb);
90
+ return vec2<f32>(s, t2 + t3);
91
+ }
92
+ fn quick_two_sum(a: f32, b: f32) -> vec2<f32> {
93
+ let s = a + b;
94
+ let t = fma(1.0, s, -a);
95
+ return vec2<f32>(s, fma(1.0, b, -t));
96
+ }
97
+ fn two_prod(a: f32, b: f32) -> vec2<f32> {
98
+ let p = a * b;
99
+ let A = split12(a);
100
+ let B = split12(b);
101
+ let err = ((A.x * B.x - p) + A.x * B.y + A.y * B.x) + A.y * B.y;
102
+ return vec2<f32>(p, err);
103
+ }
104
+ fn df_add(a: vec2<f32>, b: vec2<f32>) -> vec2<f32> {
105
+ let s = two_sum(a.x, b.x);
106
+ let t = two_sum(a.y, b.y);
107
+ let s3 = quick_two_sum(s.x, s.y + t.x);
108
+ return quick_two_sum(s3.x, s3.y + t.y);
109
+ }
110
+ fn df_mul(a: vec2<f32>, b: vec2<f32>) -> vec2<f32> {
111
+ let p = two_prod(a.x, b.x);
112
+ let cross1 = fma(a.x, b.y, p.y);
113
+ let cross = fma(a.y, b.x, cross1);
114
+ return quick_two_sum(p.x, cross);
115
+ }
116
+ `;
117
+
118
+ // Tagged-handle decode (must mirror records.ts: tag in top 3 bits, payload in low 29).
119
+ const HANDLE_HELPERS = /* wgsl */ `
120
+ const SLOT_PAYLOAD_MASK: u32 = 0x1FFFFFFFu;
121
+ fn slot_tag(h: u32) -> u32 { return h >> 29u; }
122
+ fn slot_payload(h: u32) -> u32 { return h & SLOT_PAYLOAD_MASK; }
123
+
124
+ // One df32 mat4 entry (r,c) of the matrix referenced by handle h.
125
+ // tag 0 = constituent slot: Constituents[idx*16 + r*4 + c] (df32 hi/lo)
126
+ // tag 1 = host drawHeader: MainHeap[(byte>>2) + r*4 + c] (plain f32 → (v, 0))
127
+ fn load_entry_mat4(h: u32, r: u32, c: u32) -> vec2<f32> {
128
+ let tag = slot_tag(h);
129
+ let p = slot_payload(h);
130
+ if (tag == 0u) {
131
+ return Constituents[p * 16u + r * 4u + c];
132
+ }
133
+ return vec2<f32>(MainHeap[(p >> 2u) + r * 4u + c], 0.0);
134
+ }
135
+
136
+ fn write_mat4_entry(out_byte: u32, r: u32, c: u32, v: f32) {
137
+ MainHeap[(out_byte >> 2u) + r * 4u + c] = v;
138
+ }
139
+ fn write_mat3_entry(out_byte: u32, r: u32, c: u32, v: f32) {
140
+ // std140 mat3<f32>: 3 rows × 4-float stride; the 4th column per row is left untouched.
141
+ MainHeap[(out_byte >> 2u) + r * 4u + c] = v;
142
+ }
143
+ `;
144
+
145
+ function bindings(strideU32: number): string {
146
+ return /* wgsl */ `
147
+ @group(0) @binding(0) var<storage, read> Constituents: array<vec2<f32>>;
148
+ @group(0) @binding(1) var<storage, read_write> MainHeap: array<f32>;
149
+ @group(0) @binding(2) var<storage, read> RecordData: array<u32>;
150
+ struct CountUniform { count: u32 }
151
+ @group(0) @binding(3) var<uniform> Count: CountUniform;
152
+
153
+ const RECORD_STRIDE: u32 = ${strideU32 >>> 0}u;
154
+ `;
155
+ }
156
+
157
+ /** `collapse`: copy a single mat4 input (collapsing df32 hi+lo) to the output. */
158
+ function emitCollapseArm(id: number): string {
159
+ return /* wgsl */ `
160
+ fn arm_${id}(in0: u32, out_byte: u32) {
161
+ for (var r: u32 = 0u; r < 4u; r = r + 1u) {
162
+ for (var c: u32 = 0u; c < 4u; c = c + 1u) {
163
+ let e = load_entry_mat4(in0, r, c);
164
+ write_mat4_entry(out_byte, r, c, e.x + e.y);
165
+ }
166
+ }
167
+ }
168
+ `;
169
+ }
170
+
171
+ /** `normalMatrix`: mat3 = upper-3×3 of the transpose of the single mat4 input. NM[i,j] = M[j,i]. */
172
+ function emitNormalMatrixArm(id: number): string {
173
+ return /* wgsl */ `
174
+ fn arm_${id}(in0: u32, out_byte: u32) {
175
+ for (var i: u32 = 0u; i < 3u; i = i + 1u) {
176
+ for (var j: u32 = 0u; j < 3u; j = j + 1u) {
177
+ let e = load_entry_mat4(in0, j, i);
178
+ write_mat3_entry(out_byte, i, j, e.x + e.y);
179
+ }
180
+ }
181
+ }
182
+ `;
183
+ }
184
+
185
+ /** `matmulChain` of N mat4 inputs L0·L1·…·L(N-1), collapsed to f32. */
186
+ function emitMatMulChainArm(id: number, n: number): string {
187
+ const params = Array.from({ length: n }, (_, i) => `in${i}: u32`).join(", ");
188
+ // P holds the running product in df32, row-major (16 entries). Start P = L0, then P = P · Lk.
189
+ let body = ` var P: array<vec2<f32>, 16>;\n`;
190
+ body += ` for (var r: u32 = 0u; r < 4u; r = r + 1u) {\n`;
191
+ body += ` for (var c: u32 = 0u; c < 4u; c = c + 1u) { P[r * 4u + c] = load_entry_mat4(in0, r, c); }\n`;
192
+ body += ` }\n`;
193
+ for (let k = 1; k < n; k++) {
194
+ body += ` {\n`;
195
+ body += ` var Q: array<vec2<f32>, 16>;\n`;
196
+ body += ` for (var r: u32 = 0u; r < 4u; r = r + 1u) {\n`;
197
+ body += ` for (var c: u32 = 0u; c < 4u; c = c + 1u) {\n`;
198
+ body += ` var acc = vec2<f32>(0.0, 0.0);\n`;
199
+ body += ` for (var t: u32 = 0u; t < 4u; t = t + 1u) {\n`;
200
+ body += ` acc = df_add(acc, df_mul(P[r * 4u + t], load_entry_mat4(in${k}, t, c)));\n`;
201
+ body += ` }\n`;
202
+ body += ` Q[r * 4u + c] = acc;\n`;
203
+ body += ` }\n`;
204
+ body += ` }\n`;
205
+ body += ` P = Q;\n`;
206
+ body += ` }\n`;
207
+ }
208
+ body += ` for (var r: u32 = 0u; r < 4u; r = r + 1u) {\n`;
209
+ body += ` for (var c: u32 = 0u; c < 4u; c = c + 1u) {\n`;
210
+ body += ` let e = P[r * 4u + c];\n`;
211
+ body += ` write_mat4_entry(out_byte, r, c, e.x + e.y);\n`;
212
+ body += ` }\n`;
213
+ body += ` }\n`;
214
+ return `\nfn arm_${id}(${params}, out_byte: u32) {\n${body}}\n`;
215
+ }
216
+
217
+ // ─── Generic path: arbitrary IR lowered via the wgsl printer (f32) ────
218
+ //
219
+ // The rule's IR is rewritten so each input leaf — `ReadInput("Uniform", x)` or
220
+ // `Inverse(ReadInput("Uniform", x))` (the constituent's stored backward half, already
221
+ // inverted) — becomes a `Var("in<i>")`, then the wgsl `expr()` printer prints the body.
222
+ // Inputs/outputs are f32 (constituents are loaded collapsed); a leftover `Inverse` of a
223
+ // non-leaf throws (WGSL has no matrix inverse). Matrices are stored row-major in the heap
224
+ // and df32-row-major in the constituents, so the loader transposes into a WGSL (column-major)
225
+ // matrix value and the storer transposes back.
226
+
227
+ interface WgslT { readonly wgsl: string; readonly sym: string; readonly isMat: boolean; readonly dim: number }
228
+
229
+ function wgslTypeOf(t: Type, where: string): WgslT {
230
+ switch (t.kind) {
231
+ case "Float": return { wgsl: "f32", sym: "f32", isMat: false, dim: 1 };
232
+ case "Bool": throw new Error(`derived rule (${where}): bool is not a heap-storable type`);
233
+ case "Int": return t.signed
234
+ ? { wgsl: "i32", sym: "i32", isMat: false, dim: 1 }
235
+ : { wgsl: "u32", sym: "u32", isMat: false, dim: 1 };
236
+ case "Vector": {
237
+ if (t.element.kind !== "Float") throw new Error(`derived rule (${where}): only vecN<f32> supported`);
238
+ return { wgsl: `vec${t.dim}<f32>`, sym: `vec${t.dim}_f32`, isMat: false, dim: t.dim };
239
+ }
240
+ case "Matrix": {
241
+ if (t.element.kind !== "Float") throw new Error(`derived rule (${where}): only matNxM<f32> supported`);
242
+ if (t.rows !== t.cols || (t.rows !== 3 && t.rows !== 4)) {
243
+ throw new Error(`derived rule (${where}): only mat3x3<f32> / mat4x4<f32> supported`);
244
+ }
245
+ return { wgsl: `mat${t.cols}x${t.rows}<f32>`, sym: `mat${t.cols}x${t.rows}_f32`, isMat: true, dim: t.rows };
246
+ }
247
+ default: throw new Error(`derived rule (${where}): unsupported type kind '${t.kind}'`);
248
+ }
249
+ }
250
+
251
+ /** `load_<sym>(h: u32) -> <wgsl>` — from a constituent slot (df32, collapsed) or the main heap. */
252
+ function emitLoader(t: WgslT): string {
253
+ if (t.isMat) {
254
+ const n = t.dim;
255
+ return `
256
+ fn load_${t.sym}(h: u32) -> ${t.wgsl} {
257
+ var m: ${t.wgsl};
258
+ for (var r: u32 = 0u; r < ${n}u; r = r + 1u) {
259
+ for (var c: u32 = 0u; c < ${n}u; c = c + 1u) {
260
+ let e = load_entry_mat4(h, r, c);
261
+ m[c][r] = e.x + e.y;
262
+ }
263
+ }
264
+ return m;
265
+ }
266
+ `;
267
+ }
268
+ // Scalar / vector: from the main heap only (constituents are mat4 trafos).
269
+ const b = "let b = slot_payload(h) >> 2u;";
270
+ if (t.dim === 1) {
271
+ const conv = t.wgsl === "f32" ? "MainHeap[b]" : `bitcast<${t.wgsl}>(MainHeap[b])`;
272
+ return `\nfn load_${t.sym}(h: u32) -> ${t.wgsl} { ${b} return ${conv}; }\n`;
273
+ }
274
+ const comps = Array.from({ length: t.dim }, (_, i) => (i === 0 ? "MainHeap[b]" : `MainHeap[b + ${i}u]`)).join(", ");
275
+ return `\nfn load_${t.sym}(h: u32) -> ${t.wgsl} { ${b} return ${t.wgsl}(${comps}); }\n`;
276
+ }
277
+
278
+ /** `store_<sym>(out_byte: u32, v: <wgsl>)` — into the main heap. */
279
+ function emitStorer(t: WgslT): string {
280
+ if (t.isMat) {
281
+ const n = t.dim;
282
+ const writeFn = n === 3 ? "write_mat3_entry" : "write_mat4_entry";
283
+ return `
284
+ fn store_${t.sym}(out_byte: u32, v: ${t.wgsl}) {
285
+ for (var r: u32 = 0u; r < ${n}u; r = r + 1u) {
286
+ for (var c: u32 = 0u; c < ${n}u; c = c + 1u) { ${writeFn}(out_byte, r, c, v[c][r]); }
287
+ }
288
+ }
289
+ `;
290
+ }
291
+ const b = "let b = out_byte >> 2u;";
292
+ if (t.dim === 1) {
293
+ const v = t.wgsl === "f32" ? "v" : "bitcast<f32>(v)";
294
+ return `\nfn store_${t.sym}(out_byte: u32, v: ${t.wgsl}) { ${b} MainHeap[b] = ${v}; }\n`;
295
+ }
296
+ const comp = ["x", "y", "z", "w"];
297
+ const writes = Array.from({ length: t.dim }, (_, i) => `MainHeap[b + ${i}u] = v.${comp[i]};`).join(" ");
298
+ return `\nfn store_${t.sym}(out_byte: u32, v: ${t.wgsl}) { ${b} ${writes} }\n`;
299
+ }
300
+
301
+ function varExpr(idx: number, type: Type): Expr {
302
+ return { kind: "Var", var: { name: `in${idx}`, type, mutable: false }, type };
303
+ }
304
+
305
+ // ── Minimal IR → WGSL expression printer (self-contained; covers the subset a
306
+ // derived-rule body can be). Throws on anything not lowerable to plain WGSL. ──
307
+
308
+ function wgslScalar(t: Type): string {
309
+ switch (t.kind) {
310
+ case "Float": return "f32";
311
+ case "Bool": return "bool";
312
+ case "Int": return t.signed ? "i32" : "u32";
313
+ default: throw new Error(`derived rule: non-scalar type where scalar expected`);
314
+ }
315
+ }
316
+ function wgslTypeName(t: Type): string {
317
+ switch (t.kind) {
318
+ case "Float": return "f32";
319
+ case "Bool": return "bool";
320
+ case "Int": return t.signed ? "i32" : "u32";
321
+ case "Vector": return `vec${t.dim}<${wgslScalar(t.element)}>`;
322
+ case "Matrix": return `mat${t.cols}x${t.rows}<${wgslScalar(t.element)}>`;
323
+ default: throw new Error(`derived rule: unsupported type '${t.kind}' in rule body`);
324
+ }
325
+ }
326
+ function wgslLiteral(l: Literal): string {
327
+ switch (l.kind) {
328
+ case "Bool": return l.value ? "true" : "false";
329
+ case "Int": return l.signed ? `${l.value}i` : `${l.value >>> 0}u`;
330
+ case "Float": return Number.isFinite(l.value) ? (Number.isInteger(l.value) ? `${l.value}.0` : `${l.value}`) : "0.0";
331
+ case "Null": return "0";
332
+ }
333
+ }
334
+ const BIN: Partial<Record<Expr["kind"], string>> = {
335
+ Add: "+", Sub: "-", Mul: "*", Div: "/", Mod: "%",
336
+ MulMatMat: "*", MulMatVec: "*", MulVecMat: "*",
337
+ And: "&&", Or: "||", BitAnd: "&", BitOr: "|", BitXor: "^",
338
+ Eq: "==", Neq: "!=", Lt: "<", Le: "<=", Gt: ">", Ge: ">=",
339
+ };
340
+ function printExpr(e: Expr): string {
341
+ switch (e.kind) {
342
+ case "Var": return e.var.name;
343
+ case "Const": return wgslLiteral(e.value);
344
+ case "Neg": return `(-${printExpr(e.value)})`;
345
+ case "Not": return `(!${printExpr(e.value)})`;
346
+ case "BitNot": return `(~${printExpr(e.value)})`;
347
+ case "Add": case "Sub": case "Mul": case "Div": case "Mod":
348
+ case "MulMatMat": case "MulMatVec": case "MulVecMat":
349
+ case "And": case "Or": case "BitAnd": case "BitOr": case "BitXor":
350
+ case "Eq": case "Neq": case "Lt": case "Le": case "Gt": case "Ge":
351
+ return `(${printExpr(e.lhs)} ${BIN[e.kind]} ${printExpr(e.rhs)})`;
352
+ case "ShiftLeft": case "ShiftRight": {
353
+ const op = e.kind === "ShiftLeft" ? "<<" : ">>";
354
+ const r = e.rhs.type.kind === "Int" && !e.rhs.type.signed ? printExpr(e.rhs) : `u32(${printExpr(e.rhs)})`;
355
+ return `(${printExpr(e.lhs)} ${op} ${r})`;
356
+ }
357
+ case "Transpose": return `transpose(${printExpr(e.value)})`;
358
+ case "Determinant": return `determinant(${printExpr(e.value)})`;
359
+ case "Dot": return `dot(${printExpr(e.lhs)}, ${printExpr(e.rhs)})`;
360
+ case "Cross": return `cross(${printExpr(e.lhs)}, ${printExpr(e.rhs)})`;
361
+ case "Length": return `length(${printExpr(e.value)})`;
362
+ case "VecSwizzle": return `${printExpr(e.value)}.${e.comps.join("")}`;
363
+ case "VecItem": return `${printExpr(e.value)}[${printExpr(e.index)}]`;
364
+ case "MatrixCol": return `${printExpr(e.matrix)}[${printExpr(e.col)}]`;
365
+ case "MatrixElement": return `${printExpr(e.matrix)}[${printExpr(e.col)}][${printExpr(e.row)}]`;
366
+ case "NewVector": return `${wgslTypeName(e.type)}(${e.components.map(printExpr).join(", ")})`;
367
+ case "Conditional": return `select(${printExpr(e.ifFalse)}, ${printExpr(e.ifTrue)}, ${printExpr(e.cond)})`;
368
+ case "Convert": case "ConvertMatrix": return `${wgslTypeName(e.type)}(${printExpr(e.value)})`;
369
+ case "Field": return `${printExpr(e.target)}.${e.name}`;
370
+ case "Item": return `${printExpr(e.target)}[${printExpr(e.index)}]`;
371
+ case "CallIntrinsic": return `${e.op.emit.wgsl}(${e.args.map(printExpr).join(", ")})`;
372
+ default:
373
+ throw new Error(`derived rule: IR node '${e.kind}' is not supported in a rule body`);
374
+ }
375
+ }
376
+
377
+ const INV_SUFFIX = "inv"; // names a synthetic "inverted constituent" leaf during rewriting
378
+
379
+ /** Rewrite `entry.ir` so input leaves become `Var("in<i>")`, then print the body via wgsl `expr()`. */
380
+ function emitGenericRuleFn(entry: RuleEntry): string {
381
+ const byName = new Map<string, number>();
382
+ entry.inputs.forEach((inp, i) => byName.set(inp.inverse ? inp.name + INV_SUFFIX : inp.name, i));
383
+ // Pass 1: collapse `Inverse(ReadInput("Uniform", x))` → `ReadInput("Uniform", xinv)`.
384
+ const collapsed = mapExpr(entry.ir, (e) =>
385
+ e.kind === "Inverse" && e.value.kind === "ReadInput" && e.value.scope === "Uniform"
386
+ ? ({ kind: "ReadInput", scope: "Uniform", name: e.value.name + INV_SUFFIX, type: e.type } as Expr)
387
+ : e,
388
+ );
389
+ // Pass 2: every `ReadInput("Uniform", n)` → `Var("in<i>")`.
390
+ const body = mapExpr(collapsed, (e) => {
391
+ if (e.kind === "ReadInput" && e.scope === "Uniform") {
392
+ const idx = byName.get(e.name);
393
+ if (idx === undefined) throw new Error(`derived rule ${entry.id}: input leaf '${e.name}' not in the rule's input list`);
394
+ return varExpr(idx, e.type);
395
+ }
396
+ return e;
397
+ });
398
+ // Anything not lowerable to plain WGSL?
399
+ const walk = (e: Expr): void => {
400
+ if (e.kind === "Inverse") {
401
+ throw new Error(`derived rule ${entry.id}: a matrix inverse in the rule body is not supported (WGSL has no inverse — only Inverse of a constituent input is, which reads its stored backward half)`);
402
+ }
403
+ if (e.kind === "ReadInput") throw new Error(`derived rule ${entry.id}: unresolved input leaf '${e.name}'`);
404
+ visitExprChildren(e, walk);
405
+ };
406
+ walk(body);
407
+ const params = entry.inputs.map((inp, i) => `in${i}: ${wgslTypeOf(inp.type, `rule ${entry.id} input ${i}`).wgsl}`).join(", ");
408
+ const ret = wgslTypeOf(entry.outputType, `rule ${entry.id} output`).wgsl;
409
+ return `\nfn rule_${entry.id}(${params}) -> ${ret} {\n return ${printExpr(body)};\n}\n`;
410
+ }
411
+
412
+ function emitGenericArm(entry: RuleEntry): string {
413
+ const inTs = entry.inputs.map((inp, i) => wgslTypeOf(inp.type, `rule ${entry.id} input ${i}`));
414
+ const outT = wgslTypeOf(entry.outputType, `rule ${entry.id} output`);
415
+ const params = inTs.map((_, i) => `in${i}: u32`).join(", ");
416
+ let body = "";
417
+ inTs.forEach((t, i) => { body += ` let a${i} = load_${t.sym}(in${i});\n`; });
418
+ const callArgs = inTs.map((_, i) => `a${i}`).join(", ");
419
+ body += ` store_${outT.sym}(out_byte, rule_${entry.id}(${callArgs}));\n`;
420
+ return `${emitGenericRuleFn(entry)}\nfn arm_${entry.id}(${params}, out_byte: u32) {\n${body}}\n`;
421
+ }
422
+
423
+ function genericTypes(entry: RuleEntry): WgslT[] {
424
+ return [...entry.inputs.map((inp, i) => wgslTypeOf(inp.type, `rule ${entry.id} input ${i}`)), wgslTypeOf(entry.outputType, `rule ${entry.id} output`)];
425
+ }
426
+
427
+ function emitArm(entry: RuleEntry, shape: Shape): string {
428
+ switch (shape.kind) {
429
+ case "collapse": return emitCollapseArm(entry.id);
430
+ case "normalMatrix": return emitNormalMatrixArm(entry.id);
431
+ case "matmulChain": return emitMatMulChainArm(entry.id, shape.arity);
432
+ case "generic": return emitGenericArm(entry);
433
+ }
434
+ }
435
+
436
+ function emitCase(entry: RuleEntry, shape: Shape): string {
437
+ const ins = Array.from({ length: shape.arity }, (_, i) => `RecordData[base + ${2 + i}u]`).join(", ");
438
+ const args = shape.arity === 0 ? "out_byte" : `${ins}, out_byte`;
439
+ return ` case ${entry.id >>> 0}u: { arm_${entry.id}(${args}); }`;
440
+ }
441
+
442
+ // ─── Top-level ────────────────────────────────────────────────────────
443
+
444
+ export function buildUberKernel(registry: DerivedUniformRegistry, strideU32: number): UberKernel {
445
+ const entries = registry.entries();
446
+ const shapes = entries.map((e) => classify(e));
447
+
448
+ // Loaders / storers needed by the generic-path rules, deduped by WGSL type symbol.
449
+ const ioTypes = new Map<string, WgslT>();
450
+ entries.forEach((e, i) => {
451
+ if (shapes[i]!.kind === "generic") for (const t of genericTypes(e)) ioTypes.set(t.sym, t);
452
+ });
453
+ const loadersStorers = [...ioTypes.values()].map((t) => emitLoader(t) + emitStorer(t)).join("");
454
+
455
+ const arms = entries.map((e, i) => emitArm(e, shapes[i]!)).join("");
456
+ const cases = entries.map((e, i) => emitCase(e, shapes[i]!)).join("\n");
457
+ const needsDf32 = shapes.some((s) => s.kind === "matmulChain");
458
+
459
+ const wgsl = `${bindings(strideU32)}
460
+ ${needsDf32 ? DF32_LIB : ""}
461
+ ${HANDLE_HELPERS}
462
+ ${loadersStorers}
463
+ ${arms}
464
+ @compute @workgroup_size(64)
465
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
466
+ if (gid.x >= Count.count) { return; }
467
+ let base = gid.x * RECORD_STRIDE;
468
+ let rule_id = RecordData[base];
469
+ let out_byte = RecordData[base + 1u] & SLOT_PAYLOAD_MASK;
470
+ switch rule_id {
471
+ ${cases}
472
+ default: { return; }
473
+ }
474
+ }
475
+ `;
476
+ return { wgsl, strideU32 };
477
+ }