1# pathtrace: a deterministic path tracer, one work item (a tile of 32 x 24, one pass) a task, one column a lane
2# (renderer: crates/pathtrace-core; view layout: pathtrace_core::view; README "Pathtrace").
3# The image is bit for bit the same on every backend and machine (the cluster float
4# mode; counter-based random numbers; a fixed accumulation order), checked by kcheck's
5# PT checks against mesh-ref's CPU reference.
6# A job program: OP_JOB renders item job_base + arg = pass x tiles + tile (`job submit
7# pathtrace items 9600`: the default 640x360 scene's 300 tiles x 32 passes of 8 samples),
8# folded into its tile in pass order; the item's digests in its job_out record. pathtrace-live (variants/) renders the same
9# image progressively, pass by pass, on one meshd.
10# OP_PASS (op 6) renders an item's pass sums only (no fold, no wait) into its job_payload
11# slot: a fleet job (`job submit pathtrace items N op 6 setup 5:0,7:..`), whose items meshd keeps as
12# blobs and any member assembles (README "Pathtrace across the fleet").
13# fanout = 32: a Metal member's tickets in flight (one command buffer of 32 items, ~15-30 ms).
14name = "pathtrace"
15abi = 6
16view_bytes = 0x41a000
17view_abi = 2
18snap_bytes = 0x5600
19nodes = "fit"
20warps = 24
21shared_bytes = 0x3400
22policy = "job"
23fanout = 32
24job_base = 0x100
25job_out = "0x200:32"
26job_payload = "0x6000:9216"
27request = "0xa00:0x1000,0x1a00:0x100"
28counters = ["items", "tiles", "passes", "retones"]
29fields = ["tiles:u32:0x10", "done:u32:0x14", "next:u32:0x4", "tonemap:u32:0x8", "gen:u32:0xc", "width:u32:0x18", "height:u32:0x1c", "spp:u32:0x20", "passes:u32:0x24", "last_tile:u32:0x28", "last_system:u32:0x2c", "items:u32:0x38"]
30autostart = false
31backends = ["cuda", "metal", "wasm"]
32# wasm: a whole tile on one CPU lane.
33task_ms = 20000