@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.
- package/dist/runtime/derivedUniforms/codegen.d.ts +8 -0
- package/dist/runtime/derivedUniforms/codegen.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/codegen.js +449 -0
- package/dist/runtime/derivedUniforms/codegen.js.map +1 -0
- package/dist/runtime/derivedUniforms/dispatch.d.ts +14 -93
- package/dist/runtime/derivedUniforms/dispatch.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/dispatch.js +123 -299
- package/dist/runtime/derivedUniforms/dispatch.js.map +1 -1
- package/dist/runtime/derivedUniforms/flatten.d.ts +25 -0
- package/dist/runtime/derivedUniforms/flatten.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/flatten.js +71 -0
- package/dist/runtime/derivedUniforms/flatten.js.map +1 -0
- package/dist/runtime/derivedUniforms/index.d.ts +10 -5
- package/dist/runtime/derivedUniforms/index.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/index.js +24 -19
- package/dist/runtime/derivedUniforms/index.js.map +1 -1
- package/dist/runtime/derivedUniforms/marker.d.ts +76 -0
- package/dist/runtime/derivedUniforms/marker.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/marker.js +156 -0
- package/dist/runtime/derivedUniforms/marker.js.map +1 -0
- package/dist/runtime/derivedUniforms/recipes.d.ts +6 -41
- package/dist/runtime/derivedUniforms/recipes.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/recipes.js +53 -129
- package/dist/runtime/derivedUniforms/recipes.js.map +1 -1
- package/dist/runtime/derivedUniforms/records.d.ts +40 -0
- package/dist/runtime/derivedUniforms/records.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/records.js +151 -0
- package/dist/runtime/derivedUniforms/records.js.map +1 -0
- package/dist/runtime/derivedUniforms/registry.d.ts +33 -0
- package/dist/runtime/derivedUniforms/registry.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/registry.js +58 -0
- package/dist/runtime/derivedUniforms/registry.js.map +1 -0
- package/dist/runtime/derivedUniforms/rule.d.ts +26 -0
- package/dist/runtime/derivedUniforms/rule.d.ts.map +1 -0
- package/dist/runtime/derivedUniforms/rule.js +35 -0
- package/dist/runtime/derivedUniforms/rule.js.map +1 -0
- package/dist/runtime/derivedUniforms/sceneIntegration.d.ts +34 -33
- package/dist/runtime/derivedUniforms/sceneIntegration.d.ts.map +1 -1
- package/dist/runtime/derivedUniforms/sceneIntegration.js +80 -90
- package/dist/runtime/derivedUniforms/sceneIntegration.js.map +1 -1
- package/dist/runtime/heapScene.d.ts.map +1 -1
- package/dist/runtime/heapScene.js +78 -26
- package/dist/runtime/heapScene.js.map +1 -1
- package/dist/runtime/hybridScene.js +1 -1
- package/dist/runtime/hybridScene.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/renderTask.js +1 -1
- package/dist/runtime/renderTask.js.map +1 -1
- package/dist/runtime/runtime.js +1 -1
- package/dist/runtime/runtime.js.map +1 -1
- package/package.json +1 -1
- package/src/runtime/derivedUniforms/codegen.ts +477 -0
- package/src/runtime/derivedUniforms/dispatch.ts +135 -341
- package/src/runtime/derivedUniforms/flatten.ts +89 -0
- package/src/runtime/derivedUniforms/index.ts +50 -34
- package/src/runtime/derivedUniforms/marker.ts +169 -0
- package/src/runtime/derivedUniforms/recipes.ts +63 -155
- package/src/runtime/derivedUniforms/records.ts +158 -0
- package/src/runtime/derivedUniforms/registry.ts +77 -0
- package/src/runtime/derivedUniforms/rule.ts +59 -0
- package/src/runtime/derivedUniforms/sceneIntegration.ts +115 -149
- package/src/runtime/heapScene.ts +77 -28
- package/src/runtime/hybridScene.ts +1 -1
- package/src/runtime/index.ts +8 -0
- package/src/runtime/renderTask.ts +1 -1
- package/src/runtime/runtime.ts +1 -1
- package/dist/runtime/derivedUniforms/slotId.d.ts +0 -15
- package/dist/runtime/derivedUniforms/slotId.d.ts.map +0 -1
- package/dist/runtime/derivedUniforms/slotId.js +0 -30
- package/dist/runtime/derivedUniforms/slotId.js.map +0 -1
- package/dist/runtime/derivedUniforms/uberKernel.wgsl.d.ts +0 -13
- package/dist/runtime/derivedUniforms/uberKernel.wgsl.d.ts.map +0 -1
- package/dist/runtime/derivedUniforms/uberKernel.wgsl.js +0 -218
- package/dist/runtime/derivedUniforms/uberKernel.wgsl.js.map +0 -1
- package/src/runtime/derivedUniforms/slotId.ts +0 -35
- 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 ===
|
|
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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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -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 ===
|
|
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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"}
|
package/dist/runtime/runtime.js
CHANGED
|
@@ -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 ===
|
|
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":"AAAA,4DAA4D;AAC5D,2DAA2D;AAC3D,gCAAgC;AAIhC,OAAO,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAA6C,MAAM,eAAe,CAAC;AAsCpF;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,GAAyB;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,OAAO,OAAO;IACD,GAAG,CAAiB;IACpB,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;IACzC,SAAS,GAAG,KAAK,CAAC;IAClB,WAAW,GAAG,KAAK,CAAC;IAC5B;;;OAGG;IACM,UAAU,CAA6B;IAEhD,YAAY,IAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG;YACT,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAS,EAAE,GAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACxF,MAAM,EAAE,MAAM;gBACd,oBAAoB,EAAE,mBAAmB,CAAC,GAAG,CAAC;aAC/C,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,IAAI,CAAC,qBAAqB,KAAK,
|
|
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.
|
|
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
|
+
}
|