@aardworx/wombat.rendering 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"preparedRenderObject.d.ts","sourceRoot":"","sources":["../../src/resources/preparedRenderObject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preparedRenderObject.d.ts","sourceRoot":"","sources":["../../src/resources/preparedRenderObject.ts"],"names":[],"mappings":"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"}
@@ -386,7 +386,15 @@ export function prepareRenderObject(device, obj, effect, signature, opts = {}) {
386
386
  const stepMode = isInstance ? "instance" : "vertex";
387
387
  const view = (fromVertex ?? fromInstance);
388
388
  const format = ElementType.toVertexFormat(view.elementType);
389
- const stride = BufferView.strideOf(view);
389
+ // Single-value broadcast — `BufferView.ofValue(...)` allocates a
390
+ // tight one-element buffer and asks every vertex/instance to read
391
+ // it. WebGPU reads the same element when arrayStride is 0
392
+ // (regardless of stepMode), so override the default tight stride
393
+ // here. Without this the second vertex would read past the end of
394
+ // the 16-byte buffer and pick up zeros — colorAval would tint
395
+ // only the first vertex of a draw.
396
+ const isBroadcast = view.singleValue !== undefined;
397
+ const stride = isBroadcast ? 0 : BufferView.strideOf(view);
390
398
  const offset = BufferView.offsetOf(view);
391
399
  resolved.push({
392
400
  name: vb.name,
@@ -1 +1 @@
1
- {"version":3,"file":"preparedRenderObject.js","sourceRoot":"","sources":["../../src/resources/preparedRenderObject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preparedRenderObject.js","sourceRoot":"","sources":["../../src/resources/preparedRenderObject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Trafo3d, V3d, V4f } from "@aardworx/wombat.base";
2
+ import type { aval } from "@aardworx/wombat.adaptive";
3
+ import type { CanvasAttachment } from "../window/index.js";
4
+ /**
5
+ * Geometry triple. Tightly-packed Float32 positions / normals (3
6
+ * floats per vertex) plus Uint32 indices. The heap-scene packer
7
+ * concatenates all draws' geometry into per-group slabs.
8
+ */
9
+ export interface HeapGeometry {
10
+ readonly positions: Float32Array;
11
+ readonly normals: Float32Array;
12
+ readonly indices: Uint32Array;
13
+ }
14
+ export interface HeapDrawSpec {
15
+ readonly geo: HeapGeometry;
16
+ readonly modelTrafo: aval<Trafo3d> | Trafo3d;
17
+ readonly color: aval<V4f> | V4f;
18
+ /** Group key — selects which pipeline-state group this draw joins. */
19
+ readonly groupKey: string;
20
+ }
21
+ export interface HeapSceneStats {
22
+ readonly groups: number;
23
+ readonly totalDraws: number;
24
+ readonly globalsBytes: number;
25
+ drawBytes: number;
26
+ readonly geometryBytes: number;
27
+ }
28
+ export interface HeapScene {
29
+ /** Render one frame against the given globals. */
30
+ frame(viewProj: Trafo3d, lightLocation: V3d): void;
31
+ readonly stats: HeapSceneStats;
32
+ dispose(): void;
33
+ }
34
+ /**
35
+ * Per-group texture set. Bindless isn't standard WebGPU, so a group
36
+ * with sampled textures gets a distinct bind-group layout and is
37
+ * keyed separately from groups with no textures or different sets.
38
+ */
39
+ export interface HeapTextureSet {
40
+ readonly texture: GPUTexture;
41
+ readonly textureView?: GPUTextureView;
42
+ readonly sampler: GPUSampler;
43
+ }
44
+ export interface BuildHeapSceneOptions {
45
+ /** WGSL fragment-stage source per group key — must declare `fs(in: VsOut) -> @location(0) vec4<f32>`. */
46
+ readonly fragmentShaders: ReadonlyMap<string, string>;
47
+ /**
48
+ * Per-group texture set. When present, the group's bind-group
49
+ * layout adds a `texture_2d<f32>` at binding 4 and a sampler at
50
+ * binding 5. The user's FS WGSL must declare them.
51
+ */
52
+ readonly texturesByGroupKey?: ReadonlyMap<string, HeapTextureSet>;
53
+ }
54
+ /**
55
+ * Build a multi-group heap-backed scene renderer. Buckets `draws` by
56
+ * `groupKey`, builds one pipeline + bind group + heap per bucket,
57
+ * subscribes per-RO avals so dirty marks propagate to per-slot
58
+ * `writeBuffer`s on the next `frame()`.
59
+ */
60
+ export declare function buildHeapScene(device: GPUDevice, attach: CanvasAttachment, draws: readonly HeapDrawSpec[], opts: BuildHeapSceneOptions): HeapScene;
61
+ //# sourceMappingURL=heapScene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heapScene.d.ts","sourceRoot":"","sources":["../../src/runtime/heapScene.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAa,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA4G3D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAI,YAAY,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAI,WAAW,CAAC;CACjC;AAoLD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,yGAAyG;IACzG,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACnE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,IAAI,EAAE,qBAAqB,GAC1B,SAAS,CA6GX"}
@@ -0,0 +1,354 @@
1
+ // heapScene — multi-group heap-everything render path.
2
+ //
3
+ // Public-API extraction of the experimental heap-demo (commits in
4
+ // the `experimental/heap-arch` branch document the design). One
5
+ // shared GPURenderPipeline + GPUBindGroup per pipeline-state group,
6
+ // per-draw uniforms in a storage buffer, vertex pulling from packed
7
+ // position / normal slabs, indexed draws via a shared index buffer
8
+ // and `firstInstance` routing into the heap.
9
+ //
10
+ // Per-frame uploads:
11
+ // - Globals (one UBO per group): viewProj + lightLocation. ~80 B.
12
+ // Independent of draw count.
13
+ // - DrawHeader (one storage buffer per group): only slots whose
14
+ // `aval<Trafo3d>` or `aval<V4f>` were marked since last frame
15
+ // are re-uploaded — 160 B per dirty slot.
16
+ //
17
+ // Geometry is uploaded ONCE at construction (positions + normals +
18
+ // indices, packed across all draws in a group).
19
+ //
20
+ // The user supplies a fragment-shader body per group key. The vertex
21
+ // stage is provided by this module and reads from a fixed layout:
22
+ //
23
+ // @group(0) @binding(0) var<uniform> globals: Globals;
24
+ // @group(0) @binding(1) var<storage, read> draws: array<DrawHeader>;
25
+ // @group(0) @binding(2) var<storage, read> positions: array<f32>;
26
+ // @group(0) @binding(3) var<storage, read> normals: array<f32>;
27
+ //
28
+ // struct VsOut {
29
+ // @builtin(position) clipPos: vec4<f32>,
30
+ // @location(0) worldPos: vec3<f32>,
31
+ // @location(1) normal: vec3<f32>,
32
+ // @location(2) color: vec4<f32>,
33
+ // @location(3) lightLoc: vec3<f32>,
34
+ // };
35
+ //
36
+ // User WGSL must declare `@fragment fn fs(in: VsOut) -> @location(0) vec4<f32>`.
37
+ //
38
+ // Per-group texture sets. WebGPU 1.0 has no bindless, so texture-set
39
+ // is a wedge in the group key: groups with different texture sets
40
+ // can't share a bind group. Pass a `textures: { texture, sampler }`
41
+ // per groupKey via `BuildHeapSceneOptions.texturesByGroupKey`. The
42
+ // package adds the texture (binding 4) + sampler (binding 5) to that
43
+ // group's bind-group layout; the user's FS WGSL declares them.
44
+ import { Trafo3d, V3d, V4f } from "@aardworx/wombat.base";
45
+ import { AVal, addMarkingCallback } from "@aardworx/wombat.adaptive";
46
+ // ---------------------------------------------------------------------------
47
+ // Layouts
48
+ // ---------------------------------------------------------------------------
49
+ const GLOBALS_BYTES = 64 + 16; // mat4 + vec4
50
+ const GLOBALS_FLOATS = GLOBALS_BYTES / 4;
51
+ const DRAW_HEADER_BYTES = 64 * 2 + 16 + 16; // 2 mat4 + vec4 + (u32 + 3*pad)
52
+ const DRAW_HEADER_FLOATS = DRAW_HEADER_BYTES / 4;
53
+ function packMat44(m, dst, off) {
54
+ // M44d._data is the row-major Float64Array; not part of the public
55
+ // type surface. toArray() round-trips through a fresh number[] which
56
+ // we copy into the f32 staging buffer below.
57
+ const r = m.toArray();
58
+ for (let i = 0; i < 16; i++)
59
+ dst[off + i] = r[i];
60
+ }
61
+ function packGlobals(viewProj, lightLocation, dst) {
62
+ packMat44(viewProj.forward, dst, 0);
63
+ dst[16] = lightLocation.x;
64
+ dst[17] = lightLocation.y;
65
+ dst[18] = lightLocation.z;
66
+ dst[19] = 0;
67
+ }
68
+ function packDrawHeader(modelTrafo, color, vertexBase, dst, drawIndex) {
69
+ const off = drawIndex * DRAW_HEADER_FLOATS;
70
+ packMat44(modelTrafo.forward, dst, off + 0);
71
+ packMat44(modelTrafo.backward, dst, off + 16);
72
+ dst[off + 32] = color.x;
73
+ dst[off + 33] = color.y;
74
+ dst[off + 34] = color.z;
75
+ dst[off + 35] = color.w;
76
+ new Uint32Array(dst.buffer, dst.byteOffset, dst.length)[off + 36] = vertexBase;
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Shared WGSL prelude (struct + bindings + VS)
80
+ // ---------------------------------------------------------------------------
81
+ const SHADER_PRELUDE = /* wgsl */ `
82
+ struct Globals {
83
+ viewProj: mat4x4<f32>,
84
+ lightLocation: vec4<f32>,
85
+ };
86
+ struct DrawHeader {
87
+ modelTrafo: mat4x4<f32>,
88
+ modelTrafoInv: mat4x4<f32>,
89
+ color: vec4<f32>,
90
+ vertexBase: u32,
91
+ _pad0: u32, _pad1: u32, _pad2: u32,
92
+ };
93
+ @group(0) @binding(0) var<uniform> globals: Globals;
94
+ @group(0) @binding(1) var<storage, read> draws: array<DrawHeader>;
95
+ @group(0) @binding(2) var<storage, read> positions: array<f32>;
96
+ @group(0) @binding(3) var<storage, read> normals: array<f32>;
97
+
98
+ struct VsOut {
99
+ @builtin(position) clipPos: vec4<f32>,
100
+ @location(0) worldPos: vec3<f32>,
101
+ @location(1) normal: vec3<f32>,
102
+ @location(2) color: vec4<f32>,
103
+ @location(3) lightLoc: vec3<f32>,
104
+ };
105
+
106
+ fn fetchVec3(buf: ptr<storage, array<f32>, read>, base: u32) -> vec3<f32> {
107
+ return vec3<f32>((*buf)[base + 0u], (*buf)[base + 1u], (*buf)[base + 2u]);
108
+ }
109
+
110
+ @vertex
111
+ fn vs(@builtin(vertex_index) vid: u32, @builtin(instance_index) drawIdx: u32) -> VsOut {
112
+ let d = draws[drawIdx];
113
+ let base = (d.vertexBase + vid) * 3u;
114
+ let pos = fetchVec3(&positions, base);
115
+ let nor = fetchVec3(&normals, base);
116
+ // wombat.shader convention: matrices uploaded row-major; WGSL reads
117
+ // them as col-major = transposed. v * M is the row-vec dual of
118
+ // M.mul(v) (= M*v math).
119
+ let wp = vec4<f32>(pos, 1.0) * d.modelTrafo;
120
+ let n = (vec4<f32>(nor, 0.0) * d.modelTrafo).xyz;
121
+ var out: VsOut;
122
+ out.clipPos = wp * globals.viewProj;
123
+ out.worldPos = wp.xyz;
124
+ out.normal = n;
125
+ out.color = d.color;
126
+ out.lightLoc = globals.lightLocation.xyz;
127
+ return out;
128
+ }
129
+ `;
130
+ function packGeometry(device, geos, label) {
131
+ let totalVerts = 0, totalIndices = 0;
132
+ for (const g of geos) {
133
+ totalVerts += g.positions.length / 3;
134
+ totalIndices += g.indices.length;
135
+ }
136
+ const positions = new Float32Array(totalVerts * 3);
137
+ const normals = new Float32Array(totalVerts * 3);
138
+ const indices = new Uint32Array(totalIndices);
139
+ const entries = [];
140
+ let vOff = 0, iOff = 0;
141
+ for (const g of geos) {
142
+ const vCount = g.positions.length / 3;
143
+ positions.set(g.positions, vOff * 3);
144
+ normals.set(g.normals, vOff * 3);
145
+ indices.set(g.indices, iOff);
146
+ entries.push({ vertexBase: vOff, indexCount: g.indices.length, firstIndex: iOff });
147
+ vOff += vCount;
148
+ iOff += g.indices.length;
149
+ }
150
+ const mk = (data, usage, lbl) => {
151
+ const buf = device.createBuffer({
152
+ size: alignUp(data.byteLength, 4),
153
+ usage: usage | GPUBufferUsage.COPY_DST,
154
+ label: lbl,
155
+ });
156
+ device.queue.writeBuffer(buf, 0, data.buffer, data.byteOffset, data.byteLength);
157
+ return buf;
158
+ };
159
+ return {
160
+ positionsBuf: mk(positions, GPUBufferUsage.STORAGE, `${label}/pos`),
161
+ normalsBuf: mk(normals, GPUBufferUsage.STORAGE, `${label}/nor`),
162
+ indexBuf: mk(indices, GPUBufferUsage.INDEX, `${label}/idx`),
163
+ entries,
164
+ bytes: positions.byteLength + normals.byteLength + indices.byteLength,
165
+ };
166
+ }
167
+ function alignUp(n, a) { return (n + a - 1) & ~(a - 1); }
168
+ function asAval(v) {
169
+ return (typeof v === "object" && v !== null && typeof v.getValue === "function")
170
+ ? v
171
+ : AVal.constant(v);
172
+ }
173
+ function buildGroup(device, attach, key, fragmentWgsl, textureSet, draws, modelTrafos, colors) {
174
+ const sig = attach.signature;
175
+ const colorAttachmentName = sig.colorNames[0];
176
+ if (colorAttachmentName === undefined) {
177
+ throw new Error("buildHeapScene: framebuffer signature has no color attachment");
178
+ }
179
+ const colorFormat = sig.colors.tryFind(colorAttachmentName);
180
+ const depthFormat = sig.depthStencil?.format;
181
+ const memberIndices = draws.map(d => d.sourceIndex);
182
+ const myTrafos = memberIndices.map(i => modelTrafos[i]);
183
+ const myColors = memberIndices.map(i => colors[i]);
184
+ const packed = packGeometry(device, draws.map(d => d.spec.geo), `heapScene/${key}`);
185
+ const globals = device.createBuffer({
186
+ size: alignUp(GLOBALS_BYTES, 16),
187
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
188
+ label: `heapScene/${key}/globals`,
189
+ });
190
+ const globalsStaging = new Float32Array(GLOBALS_FLOATS);
191
+ const heapBytes = DRAW_HEADER_BYTES * draws.length;
192
+ const drawHeap = device.createBuffer({
193
+ size: alignUp(heapBytes, 16),
194
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
195
+ label: `heapScene/${key}/draws`,
196
+ });
197
+ const drawStaging = new Float32Array(DRAW_HEADER_FLOATS * draws.length);
198
+ for (let i = 0; i < draws.length; i++) {
199
+ packDrawHeader(myTrafos[i].force( /* allow-force */), myColors[i].force( /* allow-force */), packed.entries[i].vertexBase, drawStaging, i);
200
+ }
201
+ device.queue.writeBuffer(drawHeap, 0, drawStaging.buffer, drawStaging.byteOffset, heapBytes);
202
+ const dirty = new Set();
203
+ const subs = [];
204
+ for (let i = 0; i < draws.length; i++) {
205
+ subs.push(addMarkingCallback(myTrafos[i], () => dirty.add(i)));
206
+ subs.push(addMarkingCallback(myColors[i], () => dirty.add(i)));
207
+ }
208
+ const module = device.createShaderModule({
209
+ code: SHADER_PRELUDE + fragmentWgsl,
210
+ label: `heapScene/${key}/shader`,
211
+ });
212
+ const bindLayoutEntries = [
213
+ { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: "uniform" } },
214
+ { binding: 1, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
215
+ { binding: 2, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
216
+ { binding: 3, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
217
+ ];
218
+ if (textureSet !== undefined) {
219
+ bindLayoutEntries.push({ binding: 4, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float" } }, { binding: 5, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } });
220
+ }
221
+ const bindGroupLayout = device.createBindGroupLayout({
222
+ label: `heapScene/${key}/bgl`,
223
+ entries: bindLayoutEntries,
224
+ });
225
+ const pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });
226
+ const pipeline = device.createRenderPipeline({
227
+ label: `heapScene/${key}/pipeline`,
228
+ layout: pipelineLayout,
229
+ vertex: { module, entryPoint: "vs", buffers: [] },
230
+ fragment: { module, entryPoint: "fs", targets: [{ format: colorFormat }] },
231
+ primitive: { topology: "triangle-list", cullMode: "back", frontFace: "ccw" },
232
+ ...(depthFormat !== undefined
233
+ ? { depthStencil: { format: depthFormat, depthWriteEnabled: true, depthCompare: "less" } }
234
+ : {}),
235
+ });
236
+ const bindEntries = [
237
+ { binding: 0, resource: { buffer: globals } },
238
+ { binding: 1, resource: { buffer: drawHeap } },
239
+ { binding: 2, resource: { buffer: packed.positionsBuf } },
240
+ { binding: 3, resource: { buffer: packed.normalsBuf } },
241
+ ];
242
+ if (textureSet !== undefined) {
243
+ bindEntries.push({ binding: 4, resource: textureSet.textureView ?? textureSet.texture.createView() }, { binding: 5, resource: textureSet.sampler });
244
+ }
245
+ const bindGroup = device.createBindGroup({
246
+ label: `heapScene/${key}/bg`,
247
+ layout: bindGroupLayout,
248
+ entries: bindEntries,
249
+ });
250
+ return {
251
+ key, pipeline, bindGroup, globals, globalsStaging, drawHeap, drawStaging,
252
+ packed, trafos: myTrafos, colors: myColors, dirty, subs,
253
+ };
254
+ }
255
+ /**
256
+ * Build a multi-group heap-backed scene renderer. Buckets `draws` by
257
+ * `groupKey`, builds one pipeline + bind group + heap per bucket,
258
+ * subscribes per-RO avals so dirty marks propagate to per-slot
259
+ * `writeBuffer`s on the next `frame()`.
260
+ */
261
+ export function buildHeapScene(device, attach, draws, opts) {
262
+ const modelTrafos = draws.map(d => asAval(d.modelTrafo));
263
+ const colors = draws.map(d => asAval(d.color));
264
+ // Bucket by group key.
265
+ const buckets = new Map();
266
+ for (let i = 0; i < draws.length; i++) {
267
+ const d = draws[i];
268
+ let bucket = buckets.get(d.groupKey);
269
+ if (bucket === undefined) {
270
+ bucket = [];
271
+ buckets.set(d.groupKey, bucket);
272
+ }
273
+ bucket.push({ spec: d, sourceIndex: i });
274
+ }
275
+ const groups = [];
276
+ for (const [key, members] of buckets) {
277
+ const fs = opts.fragmentShaders.get(key);
278
+ if (fs === undefined) {
279
+ throw new Error(`buildHeapScene: no fragment shader supplied for groupKey '${key}'`);
280
+ }
281
+ const textureSet = opts.texturesByGroupKey?.get(key);
282
+ groups.push(buildGroup(device, attach, key, fs, textureSet, members, modelTrafos, colors));
283
+ }
284
+ const stats = {
285
+ groups: groups.length,
286
+ totalDraws: draws.length,
287
+ globalsBytes: GLOBALS_BYTES * groups.length,
288
+ drawBytes: 0,
289
+ geometryBytes: groups.reduce((acc, g) => acc + g.packed.bytes, 0),
290
+ };
291
+ function frame(viewProj, lightLocation) {
292
+ const fb = attach.framebuffer.force( /* allow-force */);
293
+ const colorAttachmentName = attach.signature.colorNames[0];
294
+ const colorView = fb.colors.tryFind(colorAttachmentName);
295
+ const depthFormat = attach.signature.depthStencil?.format;
296
+ const depthView = fb.depthStencil;
297
+ let totalDirtyBytes = 0;
298
+ const enc = device.createCommandEncoder({ label: "heapScene: encoder" });
299
+ let firstPass = true;
300
+ for (const g of groups) {
301
+ packGlobals(viewProj, lightLocation, g.globalsStaging);
302
+ device.queue.writeBuffer(g.globals, 0, g.globalsStaging.buffer, g.globalsStaging.byteOffset, GLOBALS_BYTES);
303
+ if (g.dirty.size > 0) {
304
+ for (const i of g.dirty) {
305
+ packDrawHeader(g.trafos[i].force( /* allow-force */), g.colors[i].force( /* allow-force */), g.packed.entries[i].vertexBase, g.drawStaging, i);
306
+ const byteOff = i * DRAW_HEADER_BYTES;
307
+ device.queue.writeBuffer(g.drawHeap, byteOff, g.drawStaging.buffer, g.drawStaging.byteOffset + byteOff, DRAW_HEADER_BYTES);
308
+ totalDirtyBytes += DRAW_HEADER_BYTES;
309
+ }
310
+ g.dirty.clear();
311
+ }
312
+ const pass = enc.beginRenderPass({
313
+ colorAttachments: [{
314
+ view: colorView,
315
+ clearValue: { r: 0.07, g: 0.07, b: 0.08, a: 1.0 },
316
+ loadOp: firstPass ? "clear" : "load",
317
+ storeOp: "store",
318
+ }],
319
+ ...(depthView !== undefined && depthFormat !== undefined ? {
320
+ depthStencilAttachment: {
321
+ view: depthView,
322
+ depthClearValue: 1.0,
323
+ depthLoadOp: firstPass ? "clear" : "load",
324
+ depthStoreOp: "store",
325
+ },
326
+ } : {}),
327
+ });
328
+ pass.setPipeline(g.pipeline);
329
+ pass.setBindGroup(0, g.bindGroup);
330
+ pass.setIndexBuffer(g.packed.indexBuf, "uint32");
331
+ for (let i = 0; i < g.packed.entries.length; i++) {
332
+ const e = g.packed.entries[i];
333
+ pass.drawIndexed(e.indexCount, 1, e.firstIndex, 0, i);
334
+ }
335
+ pass.end();
336
+ firstPass = false;
337
+ }
338
+ stats.drawBytes = totalDirtyBytes;
339
+ device.queue.submit([enc.finish()]);
340
+ }
341
+ function dispose() {
342
+ for (const g of groups) {
343
+ for (const s of g.subs)
344
+ s.dispose();
345
+ g.globals.destroy();
346
+ g.drawHeap.destroy();
347
+ g.packed.positionsBuf.destroy();
348
+ g.packed.normalsBuf.destroy();
349
+ g.packed.indexBuf.destroy();
350
+ }
351
+ }
352
+ return { frame, stats, dispose };
353
+ }
354
+ //# sourceMappingURL=heapScene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heapScene.js","sourceRoot":"","sources":["../../src/runtime/heapScene.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export { compileRenderTask, type RuntimeContext, } from "./renderTask.js";
3
3
  export { copy } from "./copy.js";
4
4
  export { renderTo, type RenderToOptions, type RenderToResult, } from "./renderTo.js";
5
5
  export { ScenePass, type WalkerStats, } from "./scenePass.js";
6
+ export { buildHeapScene, type HeapScene, type HeapSceneStats, type HeapDrawSpec, type HeapGeometry, type HeapTextureSet, type BuildHeapSceneOptions, } from "./heapScene.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
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"}
@@ -4,4 +4,5 @@ export { compileRenderTask, } from "./renderTask.js";
4
4
  export { copy } from "./copy.js";
5
5
  export { renderTo, } from "./renderTo.js";
6
6
  export { ScenePass, } from "./scenePass.js";
7
+ export { buildHeapScene, } from "./heapScene.js";
7
8
  //# sourceMappingURL=index.js.map
@@ -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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aardworx/wombat.rendering",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "WebGPU rendering layer for the Wombat TypeScript stack \u2014 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",
@@ -55,7 +55,7 @@
55
55
  ],
56
56
  "dependencies": {
57
57
  "@aardworx/wombat.adaptive": "^0.2.2",
58
- "@aardworx/wombat.base": "^0.4.0",
58
+ "@aardworx/wombat.base": "^0.4.2",
59
59
  "@aardworx/wombat.shader": "^0.5.0"
60
60
  },
61
61
  "devDependencies": {
@@ -544,7 +544,15 @@ export function prepareRenderObject(
544
544
 
545
545
  const view = (fromVertex ?? fromInstance)!;
546
546
  const format = ElementType.toVertexFormat(view.elementType);
547
- const stride = BufferView.strideOf(view);
547
+ // Single-value broadcast — `BufferView.ofValue(...)` allocates a
548
+ // tight one-element buffer and asks every vertex/instance to read
549
+ // it. WebGPU reads the same element when arrayStride is 0
550
+ // (regardless of stepMode), so override the default tight stride
551
+ // here. Without this the second vertex would read past the end of
552
+ // the 16-byte buffer and pick up zeros — colorAval would tint
553
+ // only the first vertex of a draw.
554
+ const isBroadcast = view.singleValue !== undefined;
555
+ const stride = isBroadcast ? 0 : BufferView.strideOf(view);
548
556
  const offset = BufferView.offsetOf(view);
549
557
  resolved.push({
550
558
  name: vb.name,
@@ -0,0 +1,510 @@
1
+ // heapScene — multi-group heap-everything render path.
2
+ //
3
+ // Public-API extraction of the experimental heap-demo (commits in
4
+ // the `experimental/heap-arch` branch document the design). One
5
+ // shared GPURenderPipeline + GPUBindGroup per pipeline-state group,
6
+ // per-draw uniforms in a storage buffer, vertex pulling from packed
7
+ // position / normal slabs, indexed draws via a shared index buffer
8
+ // and `firstInstance` routing into the heap.
9
+ //
10
+ // Per-frame uploads:
11
+ // - Globals (one UBO per group): viewProj + lightLocation. ~80 B.
12
+ // Independent of draw count.
13
+ // - DrawHeader (one storage buffer per group): only slots whose
14
+ // `aval<Trafo3d>` or `aval<V4f>` were marked since last frame
15
+ // are re-uploaded — 160 B per dirty slot.
16
+ //
17
+ // Geometry is uploaded ONCE at construction (positions + normals +
18
+ // indices, packed across all draws in a group).
19
+ //
20
+ // The user supplies a fragment-shader body per group key. The vertex
21
+ // stage is provided by this module and reads from a fixed layout:
22
+ //
23
+ // @group(0) @binding(0) var<uniform> globals: Globals;
24
+ // @group(0) @binding(1) var<storage, read> draws: array<DrawHeader>;
25
+ // @group(0) @binding(2) var<storage, read> positions: array<f32>;
26
+ // @group(0) @binding(3) var<storage, read> normals: array<f32>;
27
+ //
28
+ // struct VsOut {
29
+ // @builtin(position) clipPos: vec4<f32>,
30
+ // @location(0) worldPos: vec3<f32>,
31
+ // @location(1) normal: vec3<f32>,
32
+ // @location(2) color: vec4<f32>,
33
+ // @location(3) lightLoc: vec3<f32>,
34
+ // };
35
+ //
36
+ // User WGSL must declare `@fragment fn fs(in: VsOut) -> @location(0) vec4<f32>`.
37
+ //
38
+ // Per-group texture sets. WebGPU 1.0 has no bindless, so texture-set
39
+ // is a wedge in the group key: groups with different texture sets
40
+ // can't share a bind group. Pass a `textures: { texture, sampler }`
41
+ // per groupKey via `BuildHeapSceneOptions.texturesByGroupKey`. The
42
+ // package adds the texture (binding 4) + sampler (binding 5) to that
43
+ // group's bind-group layout; the user's FS WGSL declares them.
44
+
45
+ import { Trafo3d, V3d, V4f, type M44d } from "@aardworx/wombat.base";
46
+ import { AVal, addMarkingCallback } from "@aardworx/wombat.adaptive";
47
+ import type { aval, IDisposable } from "@aardworx/wombat.adaptive";
48
+ import type { CanvasAttachment } from "../window/index.js";
49
+
50
+ // ---------------------------------------------------------------------------
51
+ // Layouts
52
+ // ---------------------------------------------------------------------------
53
+
54
+ const GLOBALS_BYTES = 64 + 16; // mat4 + vec4
55
+ const GLOBALS_FLOATS = GLOBALS_BYTES / 4;
56
+ const DRAW_HEADER_BYTES = 64 * 2 + 16 + 16; // 2 mat4 + vec4 + (u32 + 3*pad)
57
+ const DRAW_HEADER_FLOATS = DRAW_HEADER_BYTES / 4;
58
+
59
+ function packMat44(m: M44d, dst: Float32Array, off: number): void {
60
+ // M44d._data is the row-major Float64Array; not part of the public
61
+ // type surface. toArray() round-trips through a fresh number[] which
62
+ // we copy into the f32 staging buffer below.
63
+ const r = m.toArray();
64
+ for (let i = 0; i < 16; i++) dst[off + i] = r[i]!;
65
+ }
66
+
67
+ function packGlobals(viewProj: Trafo3d, lightLocation: V3d, dst: Float32Array): void {
68
+ packMat44(viewProj.forward, dst, 0);
69
+ dst[16] = lightLocation.x as number;
70
+ dst[17] = lightLocation.y as number;
71
+ dst[18] = lightLocation.z as number;
72
+ dst[19] = 0;
73
+ }
74
+
75
+ function packDrawHeader(
76
+ modelTrafo: Trafo3d,
77
+ color: V4f,
78
+ vertexBase: number,
79
+ dst: Float32Array,
80
+ drawIndex: number,
81
+ ): void {
82
+ const off = drawIndex * DRAW_HEADER_FLOATS;
83
+ packMat44(modelTrafo.forward, dst, off + 0);
84
+ packMat44(modelTrafo.backward, dst, off + 16);
85
+ dst[off + 32] = color.x; dst[off + 33] = color.y;
86
+ dst[off + 34] = color.z; dst[off + 35] = color.w;
87
+ new Uint32Array(dst.buffer, dst.byteOffset, dst.length)[off + 36] = vertexBase;
88
+ }
89
+
90
+ // ---------------------------------------------------------------------------
91
+ // Shared WGSL prelude (struct + bindings + VS)
92
+ // ---------------------------------------------------------------------------
93
+
94
+ const SHADER_PRELUDE = /* wgsl */`
95
+ struct Globals {
96
+ viewProj: mat4x4<f32>,
97
+ lightLocation: vec4<f32>,
98
+ };
99
+ struct DrawHeader {
100
+ modelTrafo: mat4x4<f32>,
101
+ modelTrafoInv: mat4x4<f32>,
102
+ color: vec4<f32>,
103
+ vertexBase: u32,
104
+ _pad0: u32, _pad1: u32, _pad2: u32,
105
+ };
106
+ @group(0) @binding(0) var<uniform> globals: Globals;
107
+ @group(0) @binding(1) var<storage, read> draws: array<DrawHeader>;
108
+ @group(0) @binding(2) var<storage, read> positions: array<f32>;
109
+ @group(0) @binding(3) var<storage, read> normals: array<f32>;
110
+
111
+ struct VsOut {
112
+ @builtin(position) clipPos: vec4<f32>,
113
+ @location(0) worldPos: vec3<f32>,
114
+ @location(1) normal: vec3<f32>,
115
+ @location(2) color: vec4<f32>,
116
+ @location(3) lightLoc: vec3<f32>,
117
+ };
118
+
119
+ fn fetchVec3(buf: ptr<storage, array<f32>, read>, base: u32) -> vec3<f32> {
120
+ return vec3<f32>((*buf)[base + 0u], (*buf)[base + 1u], (*buf)[base + 2u]);
121
+ }
122
+
123
+ @vertex
124
+ fn vs(@builtin(vertex_index) vid: u32, @builtin(instance_index) drawIdx: u32) -> VsOut {
125
+ let d = draws[drawIdx];
126
+ let base = (d.vertexBase + vid) * 3u;
127
+ let pos = fetchVec3(&positions, base);
128
+ let nor = fetchVec3(&normals, base);
129
+ // wombat.shader convention: matrices uploaded row-major; WGSL reads
130
+ // them as col-major = transposed. v * M is the row-vec dual of
131
+ // M.mul(v) (= M*v math).
132
+ let wp = vec4<f32>(pos, 1.0) * d.modelTrafo;
133
+ let n = (vec4<f32>(nor, 0.0) * d.modelTrafo).xyz;
134
+ var out: VsOut;
135
+ out.clipPos = wp * globals.viewProj;
136
+ out.worldPos = wp.xyz;
137
+ out.normal = n;
138
+ out.color = d.color;
139
+ out.lightLoc = globals.lightLocation.xyz;
140
+ return out;
141
+ }
142
+ `;
143
+
144
+ // ---------------------------------------------------------------------------
145
+ // Geometry packing
146
+ // ---------------------------------------------------------------------------
147
+
148
+ interface PackedGeometry {
149
+ readonly positionsBuf: GPUBuffer;
150
+ readonly normalsBuf: GPUBuffer;
151
+ readonly indexBuf: GPUBuffer;
152
+ readonly entries: ReadonlyArray<{ vertexBase: number; indexCount: number; firstIndex: number }>;
153
+ readonly bytes: number;
154
+ }
155
+
156
+ /**
157
+ * Geometry triple. Tightly-packed Float32 positions / normals (3
158
+ * floats per vertex) plus Uint32 indices. The heap-scene packer
159
+ * concatenates all draws' geometry into per-group slabs.
160
+ */
161
+ export interface HeapGeometry {
162
+ readonly positions: Float32Array;
163
+ readonly normals: Float32Array;
164
+ readonly indices: Uint32Array;
165
+ }
166
+
167
+ function packGeometry(device: GPUDevice, geos: readonly HeapGeometry[], label: string): PackedGeometry {
168
+ let totalVerts = 0, totalIndices = 0;
169
+ for (const g of geos) {
170
+ totalVerts += g.positions.length / 3;
171
+ totalIndices += g.indices.length;
172
+ }
173
+ const positions = new Float32Array(totalVerts * 3);
174
+ const normals = new Float32Array(totalVerts * 3);
175
+ const indices = new Uint32Array(totalIndices);
176
+ const entries: { vertexBase: number; indexCount: number; firstIndex: number }[] = [];
177
+ let vOff = 0, iOff = 0;
178
+ for (const g of geos) {
179
+ const vCount = g.positions.length / 3;
180
+ positions.set(g.positions, vOff * 3);
181
+ normals.set(g.normals, vOff * 3);
182
+ indices.set(g.indices, iOff);
183
+ entries.push({ vertexBase: vOff, indexCount: g.indices.length, firstIndex: iOff });
184
+ vOff += vCount;
185
+ iOff += g.indices.length;
186
+ }
187
+ const mk = (data: ArrayBufferView, usage: GPUBufferUsageFlags, lbl: string): GPUBuffer => {
188
+ const buf = device.createBuffer({
189
+ size: alignUp(data.byteLength, 4),
190
+ usage: usage | GPUBufferUsage.COPY_DST,
191
+ label: lbl,
192
+ });
193
+ device.queue.writeBuffer(buf, 0, data.buffer, data.byteOffset, data.byteLength);
194
+ return buf;
195
+ };
196
+ return {
197
+ positionsBuf: mk(positions, GPUBufferUsage.STORAGE, `${label}/pos`),
198
+ normalsBuf: mk(normals, GPUBufferUsage.STORAGE, `${label}/nor`),
199
+ indexBuf: mk(indices, GPUBufferUsage.INDEX, `${label}/idx`),
200
+ entries,
201
+ bytes: positions.byteLength + normals.byteLength + indices.byteLength,
202
+ };
203
+ }
204
+
205
+ function alignUp(n: number, a: number): number { return (n + a - 1) & ~(a - 1); }
206
+
207
+ function asAval<T>(v: aval<T> | T): aval<T> {
208
+ return (typeof v === "object" && v !== null && typeof (v as { getValue?: unknown }).getValue === "function")
209
+ ? (v as aval<T>)
210
+ : AVal.constant(v as T);
211
+ }
212
+
213
+ // ---------------------------------------------------------------------------
214
+ // Per-group internal state
215
+ // ---------------------------------------------------------------------------
216
+
217
+ interface Group {
218
+ readonly key: string;
219
+ readonly pipeline: GPURenderPipeline;
220
+ readonly bindGroup: GPUBindGroup;
221
+ readonly globals: GPUBuffer;
222
+ readonly globalsStaging: Float32Array;
223
+ readonly drawHeap: GPUBuffer;
224
+ readonly drawStaging: Float32Array;
225
+ readonly packed: PackedGeometry;
226
+ readonly trafos: aval<Trafo3d>[];
227
+ readonly colors: aval<V4f>[];
228
+ readonly dirty: Set<number>;
229
+ readonly subs: IDisposable[];
230
+ }
231
+
232
+ function buildGroup(
233
+ device: GPUDevice,
234
+ attach: CanvasAttachment,
235
+ key: string,
236
+ fragmentWgsl: string,
237
+ textureSet: HeapTextureSet | undefined,
238
+ draws: readonly { spec: HeapDrawSpec; sourceIndex: number }[],
239
+ modelTrafos: aval<Trafo3d>[],
240
+ colors: aval<V4f>[],
241
+ ): Group {
242
+ const sig = attach.signature;
243
+ const colorAttachmentName = sig.colorNames[0];
244
+ if (colorAttachmentName === undefined) {
245
+ throw new Error("buildHeapScene: framebuffer signature has no color attachment");
246
+ }
247
+ const colorFormat = sig.colors.tryFind(colorAttachmentName)!;
248
+ const depthFormat = sig.depthStencil?.format;
249
+
250
+ const memberIndices = draws.map(d => d.sourceIndex);
251
+ const myTrafos = memberIndices.map(i => modelTrafos[i]!);
252
+ const myColors = memberIndices.map(i => colors[i]!);
253
+
254
+ const packed = packGeometry(device, draws.map(d => d.spec.geo), `heapScene/${key}`);
255
+
256
+ const globals = device.createBuffer({
257
+ size: alignUp(GLOBALS_BYTES, 16),
258
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
259
+ label: `heapScene/${key}/globals`,
260
+ });
261
+ const globalsStaging = new Float32Array(GLOBALS_FLOATS);
262
+
263
+ const heapBytes = DRAW_HEADER_BYTES * draws.length;
264
+ const drawHeap = device.createBuffer({
265
+ size: alignUp(heapBytes, 16),
266
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
267
+ label: `heapScene/${key}/draws`,
268
+ });
269
+ const drawStaging = new Float32Array(DRAW_HEADER_FLOATS * draws.length);
270
+ for (let i = 0; i < draws.length; i++) {
271
+ packDrawHeader(
272
+ myTrafos[i]!.force(/* allow-force */),
273
+ myColors[i]!.force(/* allow-force */),
274
+ packed.entries[i]!.vertexBase, drawStaging, i,
275
+ );
276
+ }
277
+ device.queue.writeBuffer(drawHeap, 0, drawStaging.buffer, drawStaging.byteOffset, heapBytes);
278
+
279
+ const dirty = new Set<number>();
280
+ const subs: IDisposable[] = [];
281
+ for (let i = 0; i < draws.length; i++) {
282
+ subs.push(addMarkingCallback(myTrafos[i] as never, () => dirty.add(i)));
283
+ subs.push(addMarkingCallback(myColors[i] as never, () => dirty.add(i)));
284
+ }
285
+
286
+ const module = device.createShaderModule({
287
+ code: SHADER_PRELUDE + fragmentWgsl,
288
+ label: `heapScene/${key}/shader`,
289
+ });
290
+ const bindLayoutEntries: GPUBindGroupLayoutEntry[] = [
291
+ { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: "uniform" } },
292
+ { binding: 1, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
293
+ { binding: 2, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
294
+ { binding: 3, visibility: GPUShaderStage.VERTEX, buffer: { type: "read-only-storage" } },
295
+ ];
296
+ if (textureSet !== undefined) {
297
+ bindLayoutEntries.push(
298
+ { binding: 4, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: "float" } },
299
+ { binding: 5, visibility: GPUShaderStage.FRAGMENT, sampler: { type: "filtering" } },
300
+ );
301
+ }
302
+ const bindGroupLayout = device.createBindGroupLayout({
303
+ label: `heapScene/${key}/bgl`,
304
+ entries: bindLayoutEntries,
305
+ });
306
+ const pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });
307
+ const pipeline = device.createRenderPipeline({
308
+ label: `heapScene/${key}/pipeline`,
309
+ layout: pipelineLayout,
310
+ vertex: { module, entryPoint: "vs", buffers: [] },
311
+ fragment: { module, entryPoint: "fs", targets: [{ format: colorFormat }] },
312
+ primitive: { topology: "triangle-list", cullMode: "back", frontFace: "ccw" },
313
+ ...(depthFormat !== undefined
314
+ ? { depthStencil: { format: depthFormat, depthWriteEnabled: true, depthCompare: "less" as GPUCompareFunction } }
315
+ : {}),
316
+ });
317
+ const bindEntries: GPUBindGroupEntry[] = [
318
+ { binding: 0, resource: { buffer: globals } },
319
+ { binding: 1, resource: { buffer: drawHeap } },
320
+ { binding: 2, resource: { buffer: packed.positionsBuf } },
321
+ { binding: 3, resource: { buffer: packed.normalsBuf } },
322
+ ];
323
+ if (textureSet !== undefined) {
324
+ bindEntries.push(
325
+ { binding: 4, resource: textureSet.textureView ?? textureSet.texture.createView() },
326
+ { binding: 5, resource: textureSet.sampler },
327
+ );
328
+ }
329
+ const bindGroup = device.createBindGroup({
330
+ label: `heapScene/${key}/bg`,
331
+ layout: bindGroupLayout,
332
+ entries: bindEntries,
333
+ });
334
+
335
+ return {
336
+ key, pipeline, bindGroup, globals, globalsStaging, drawHeap, drawStaging,
337
+ packed, trafos: myTrafos, colors: myColors, dirty, subs,
338
+ };
339
+ }
340
+
341
+ // ---------------------------------------------------------------------------
342
+ // Public API
343
+ // ---------------------------------------------------------------------------
344
+
345
+ export interface HeapDrawSpec {
346
+ readonly geo: HeapGeometry;
347
+ readonly modelTrafo: aval<Trafo3d> | Trafo3d;
348
+ readonly color: aval<V4f> | V4f;
349
+ /** Group key — selects which pipeline-state group this draw joins. */
350
+ readonly groupKey: string;
351
+ }
352
+
353
+ export interface HeapSceneStats {
354
+ readonly groups: number;
355
+ readonly totalDraws: number;
356
+ readonly globalsBytes: number;
357
+ drawBytes: number;
358
+ readonly geometryBytes: number;
359
+ }
360
+
361
+ export interface HeapScene {
362
+ /** Render one frame against the given globals. */
363
+ frame(viewProj: Trafo3d, lightLocation: V3d): void;
364
+ readonly stats: HeapSceneStats;
365
+ dispose(): void;
366
+ }
367
+
368
+ /**
369
+ * Per-group texture set. Bindless isn't standard WebGPU, so a group
370
+ * with sampled textures gets a distinct bind-group layout and is
371
+ * keyed separately from groups with no textures or different sets.
372
+ */
373
+ export interface HeapTextureSet {
374
+ readonly texture: GPUTexture;
375
+ readonly textureView?: GPUTextureView;
376
+ readonly sampler: GPUSampler;
377
+ }
378
+
379
+ export interface BuildHeapSceneOptions {
380
+ /** WGSL fragment-stage source per group key — must declare `fs(in: VsOut) -> @location(0) vec4<f32>`. */
381
+ readonly fragmentShaders: ReadonlyMap<string, string>;
382
+ /**
383
+ * Per-group texture set. When present, the group's bind-group
384
+ * layout adds a `texture_2d<f32>` at binding 4 and a sampler at
385
+ * binding 5. The user's FS WGSL must declare them.
386
+ */
387
+ readonly texturesByGroupKey?: ReadonlyMap<string, HeapTextureSet>;
388
+ }
389
+
390
+ /**
391
+ * Build a multi-group heap-backed scene renderer. Buckets `draws` by
392
+ * `groupKey`, builds one pipeline + bind group + heap per bucket,
393
+ * subscribes per-RO avals so dirty marks propagate to per-slot
394
+ * `writeBuffer`s on the next `frame()`.
395
+ */
396
+ export function buildHeapScene(
397
+ device: GPUDevice,
398
+ attach: CanvasAttachment,
399
+ draws: readonly HeapDrawSpec[],
400
+ opts: BuildHeapSceneOptions,
401
+ ): HeapScene {
402
+ const modelTrafos: aval<Trafo3d>[] = draws.map(d => asAval(d.modelTrafo));
403
+ const colors: aval<V4f>[] = draws.map(d => asAval(d.color));
404
+
405
+ // Bucket by group key.
406
+ const buckets = new Map<string, { spec: HeapDrawSpec; sourceIndex: number }[]>();
407
+ for (let i = 0; i < draws.length; i++) {
408
+ const d = draws[i]!;
409
+ let bucket = buckets.get(d.groupKey);
410
+ if (bucket === undefined) {
411
+ bucket = [];
412
+ buckets.set(d.groupKey, bucket);
413
+ }
414
+ bucket.push({ spec: d, sourceIndex: i });
415
+ }
416
+ const groups: Group[] = [];
417
+ for (const [key, members] of buckets) {
418
+ const fs = opts.fragmentShaders.get(key);
419
+ if (fs === undefined) {
420
+ throw new Error(`buildHeapScene: no fragment shader supplied for groupKey '${key}'`);
421
+ }
422
+ const textureSet = opts.texturesByGroupKey?.get(key);
423
+ groups.push(buildGroup(device, attach, key, fs, textureSet, members, modelTrafos, colors));
424
+ }
425
+
426
+ const stats: HeapSceneStats = {
427
+ groups: groups.length,
428
+ totalDraws: draws.length,
429
+ globalsBytes: GLOBALS_BYTES * groups.length,
430
+ drawBytes: 0,
431
+ geometryBytes: groups.reduce((acc, g) => acc + g.packed.bytes, 0),
432
+ };
433
+
434
+ function frame(viewProj: Trafo3d, lightLocation: V3d): void {
435
+ const fb = (attach.framebuffer as aval<import("../core/index.js").IFramebuffer>).force(/* allow-force */);
436
+ const colorAttachmentName = attach.signature.colorNames[0]!;
437
+ const colorView = fb.colors.tryFind(colorAttachmentName)!;
438
+ const depthFormat = attach.signature.depthStencil?.format;
439
+ const depthView = fb.depthStencil;
440
+
441
+ let totalDirtyBytes = 0;
442
+
443
+ const enc = device.createCommandEncoder({ label: "heapScene: encoder" });
444
+ let firstPass = true;
445
+ for (const g of groups) {
446
+ packGlobals(viewProj, lightLocation, g.globalsStaging);
447
+ device.queue.writeBuffer(g.globals, 0, g.globalsStaging.buffer, g.globalsStaging.byteOffset, GLOBALS_BYTES);
448
+
449
+ if (g.dirty.size > 0) {
450
+ for (const i of g.dirty) {
451
+ packDrawHeader(
452
+ g.trafos[i]!.force(/* allow-force */),
453
+ g.colors[i]!.force(/* allow-force */),
454
+ g.packed.entries[i]!.vertexBase, g.drawStaging, i,
455
+ );
456
+ const byteOff = i * DRAW_HEADER_BYTES;
457
+ device.queue.writeBuffer(
458
+ g.drawHeap, byteOff,
459
+ g.drawStaging.buffer, g.drawStaging.byteOffset + byteOff,
460
+ DRAW_HEADER_BYTES,
461
+ );
462
+ totalDirtyBytes += DRAW_HEADER_BYTES;
463
+ }
464
+ g.dirty.clear();
465
+ }
466
+
467
+ const pass = enc.beginRenderPass({
468
+ colorAttachments: [{
469
+ view: colorView,
470
+ clearValue: { r: 0.07, g: 0.07, b: 0.08, a: 1.0 },
471
+ loadOp: firstPass ? "clear" : "load",
472
+ storeOp: "store",
473
+ }],
474
+ ...(depthView !== undefined && depthFormat !== undefined ? {
475
+ depthStencilAttachment: {
476
+ view: depthView,
477
+ depthClearValue: 1.0,
478
+ depthLoadOp: firstPass ? "clear" : "load",
479
+ depthStoreOp: "store",
480
+ } satisfies GPURenderPassDepthStencilAttachment,
481
+ } : {}),
482
+ });
483
+ pass.setPipeline(g.pipeline);
484
+ pass.setBindGroup(0, g.bindGroup);
485
+ pass.setIndexBuffer(g.packed.indexBuf, "uint32");
486
+ for (let i = 0; i < g.packed.entries.length; i++) {
487
+ const e = g.packed.entries[i]!;
488
+ pass.drawIndexed(e.indexCount, 1, e.firstIndex, 0, i);
489
+ }
490
+ pass.end();
491
+ firstPass = false;
492
+ }
493
+
494
+ stats.drawBytes = totalDirtyBytes;
495
+ device.queue.submit([enc.finish()]);
496
+ }
497
+
498
+ function dispose(): void {
499
+ for (const g of groups) {
500
+ for (const s of g.subs) s.dispose();
501
+ g.globals.destroy();
502
+ g.drawHeap.destroy();
503
+ g.packed.positionsBuf.destroy();
504
+ g.packed.normalsBuf.destroy();
505
+ g.packed.indexBuf.destroy();
506
+ }
507
+ }
508
+
509
+ return { frame, stats, dispose };
510
+ }
@@ -22,3 +22,13 @@ export {
22
22
  ScenePass,
23
23
  type WalkerStats,
24
24
  } from "./scenePass.js";
25
+
26
+ export {
27
+ buildHeapScene,
28
+ type HeapScene,
29
+ type HeapSceneStats,
30
+ type HeapDrawSpec,
31
+ type HeapGeometry,
32
+ type HeapTextureSet,
33
+ type BuildHeapSceneOptions,
34
+ } from "./heapScene.js";