From d9976b93392a78d4ddd4c98a9e601143f4f4407b Mon Sep 17 00:00:00 2001 From: Ralph Kuepper Date: Sat, 4 Jul 2026 09:55:45 +0200 Subject: [PATCH] fix(profiler): honest readouts + crash-triage kit + test repairs (round-2 audit) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Profiler correctness (audit F9 — these skewed every round-1 measurement): - Rolling stats expire: a pass that stops running (feature toggled off) drops out of snapshot/summary/overlay after one window instead of showing a frozen average forever; entries evict after 4 windows. - Re-enabling the profiler starts a fresh session (clears rolling stats + frame histogram) instead of blending pre-disable numbers in. - One-shot warning when the 32-pair GPU timestamp budget is exhausted (was a silent truncation of later passes). - Restore the orphaned `post_fx` CPU bracket — begin() was lost at some point, leaving end() a no-op while a comment claimed the phase covered the composite tail's cost. - frame_end doc no longer claims the readback is non-blocking: it map_asyncs + poll(Wait)s every frame, serialising CPU<->GPU, so wall fps is pessimistic while profiling (measured ~3 fps at combat load). - Unit tests for the expiry + fresh-session semantics. Boot observability (audit F4 — the silent HW->SW GI fallback cost a debugger day): - windows: log adapter name/backend + ray_query/timestamp feature flags at device creation. - One-shot "bloom: ssgi trace backend = hw-ray-query|sdf-clipmap| hiz-screen" when the trace tier is chosen (re-logs on promotion). Crash-triage kit (audit F1, EN-020): - native/windows release profile carries line-tables-only debug info so `perry compile --debug-symbols` yields a usable PDB. - docs/crash-triage-windows.md: the standing WER LocalDumps + symbols + llvm-symbolizer workflow, and everything known about the layout- sensitive heap-read AV (3x reproduced pre-relink, gone after relink). - docs/tickets.md: EN-020 filed with repro history and ruled-out causes. Test repairs (pre-existing breakage from the round-1 merge): - material_system_tests: MaterialDrawCommand fixture gained the `model` field Tier 2 added — cargo test has not compiled since. - Regenerate the two golden references (lit_primitives_3d, many_point_lights_clustered_scene) that still encoded pre-round-1 shading; the other goldens pass unchanged and stay untouched. --- docs/crash-triage-windows.md | 59 +++++++++++ docs/tickets.md | 28 ++++++ native/shared/src/profiler.rs | 92 ++++++++++++++++-- .../src/renderer/material_system_tests.rs | 7 ++ native/shared/src/renderer/mod.rs | 11 +++ native/shared/src/renderer/ssgi_pass.rs | 8 ++ .../shared/tests/golden/lit_primitives_3d.png | Bin 24840 -> 45671 bytes .../many_point_lights_clustered_scene.png | Bin 4754 -> 43927 bytes native/windows/Cargo.toml | 4 + native/windows/src/lib.rs | 14 +++ 10 files changed, 215 insertions(+), 8 deletions(-) create mode 100644 docs/crash-triage-windows.md diff --git a/docs/crash-triage-windows.md b/docs/crash-triage-windows.md new file mode 100644 index 0000000..e7b26f0 --- /dev/null +++ b/docs/crash-triage-windows.md @@ -0,0 +1,59 @@ +# Windows crash triage — native AVs in Perry-compiled games + +Written after the 2026-07-04 round-2 audit, where the Bloom Shooter hit the +same access violation in three scripted runs (`main.exe+0xe8e5`, read of an +address 8 bytes below a page boundary, exception c0000005) and the fault +could not be reproduced after a relink. Everything below is the kit that +makes the *next* occurrence a five-minute diagnosis instead of a hunt. + +## What we know about the 2026-07 AV (EN-020) + +- Same faulting instruction offset in all three crashes; faulting address + `0x…FFF8` = a read that walked off the end of a heap allocation onto an + unmapped page. Classic buffer-overrun-read signature: the overrun likely + happens often and only faults when the allocator places the buffer at + the end of a page — which makes it **layout-sensitive**: any relink + reshuffles the odds. Our fishing runs on a rebuilt binary (60 s with the + same workloads, plus a 19-transition feature-toggle gauntlet) did not + reproduce. +- Crash contexts (shooter audit tour): 20–56 s into runs that combined the + profiler (enabled), profiler-string FFI reads (`getProfilerOverlay` / + `getProfilerFrameHistory`), stage transitions, and in two cases runtime + feature disables. Toggles alone were exonerated by the gauntlet run; + string churn alone was exonerated by run 3 (crashed with only ~8 tiny + prints). No Rust panic output on stderr — this is raw UB, not a panic + (the engine builds with `panic = "abort"`, which would print first). +- Suspect space: Perry runtime heap/string handling at the FFI boundary, + or an engine-side out-of-bounds read into a heap buffer. The faulting + module offset (0xe8e5, very low in `.text`) is consistent with a small + shared helper (memcpy-class) rather than a leaf feature. + +## Standing infrastructure on the dev box + +- **WER LocalDumps** (HKCU, no admin needed): full dumps for `main.exe` + land in `shooter/tools/.testout/dumps/`, dialog suppressed + (`Windows Error Reporting\DontShowUI = 1`). Configured 2026-07-04; + survives reboots. Every crash from now on leaves a `.dmp`. +- **Symbols**: `native/windows/Cargo.toml` sets + `[profile.release] debug = "line-tables-only"`, so the staticlib carries + line tables at negligible cost. Link the game with + `perry compile src/main.ts -o main --debug-symbols` to get `main.pdb` + next to the exe (lld `/DEBUG`). Keep the exe+pdb pair that produced any + dump. +- **Symbolisation** (LLVM is installed at `C:\Program Files\LLVM`): + `llvm-symbolizer --obj=main.exe --use-native-pdb-reader 0x` maps + the WER event's module offset to a function/line. For a full stack, + open the `.dmp` in WinDbg (`winget install Microsoft.WinDbg`) with + `.sympath` pointing at the exe's folder, then `!analyze -v`. +- The WER Application-log event (Id 1000) alone already gives the module + + offset — check it first: + `Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 3`. + +## Repro harness + +The shooter's audit tour (`AUDIT` block for `src/main.ts`, preserved with +the round-2 artifacts) drives the game unattended: scripted combat at the +enemy-pool max, camera pose hops, profiler-string churn every 2 s, and an +optional feature-toggle gauntlet. Historical crash probability was 3/3 +within 60 s on the af98dbe-era binary; treat every future tour run as a +fishing run — the dump infrastructure is armed. diff --git a/docs/tickets.md b/docs/tickets.md index 3d05c36..e227841 100644 --- a/docs/tickets.md +++ b/docs/tickets.md @@ -661,3 +661,31 @@ test. **Blocked on:** access to a Windows 11 box with a HiDPI display (or a VM forwarding DPI), and a Linux dev with X11. Web checks can be done from any modern browser on the macOS dev box. + +## EN-020 — Native AV: heap read overrun, layout-sensitive 🔴 + +**Symptom.** Bloom Shooter round-2 audit (2026-07-04): three scripted runs +crashed with c0000005 at the same instruction (`main.exe+0xe8e5` on the +af98dbe-era link), reading `0x…FFF8` — 8 bytes below a page boundary. +No Rust panic output (engine builds `panic = "abort"`, which would print), +so this is raw UB: something reads past the end of a heap allocation and +faults only when the allocation abuts an unmapped page. + +**What is ruled out.** Runtime feature toggles alone (a 19-transition +ssgi/shadows/profiler gauntlet under combat load survived); profiler +string churn alone (one crash happened with only ~8 small prints); +specific stages (three different ones). The fault did not reproduce after +a relink (two 60 s fishing runs) — consistent with layout sensitivity, +not with a fixed trigger. + +**Standing kit.** WER LocalDumps armed on the dev box (dumps → +`shooter/tools/.testout/dumps/`, dialog suppressed), line tables in the +staticlib (`debug = "line-tables-only"`), `perry compile --debug-symbols` +emits `main.pdb`, LLVM symbolizer available. See +[crash-triage-windows.md](crash-triage-windows.md). Next occurrence = +symbolized stack; fix then. + +**Suspect space.** Perry-runtime heap/string handling at the FFI boundary +(profiler overlay/history strings are the heaviest string traffic in the +crashing runs), or an engine-side heap read overrun in a small shared +helper. Audit report: `shooter/docs/audit-round2.md` finding F1. diff --git a/native/shared/src/profiler.rs b/native/shared/src/profiler.rs index cdc54d2..3e41629 100644 --- a/native/shared/src/profiler.rs +++ b/native/shared/src/profiler.rs @@ -57,6 +57,8 @@ pub struct Profiler { next_query: u32, // label -> (begin_index, end_index) pending_gpu: Vec<(&'static str, u32, u32)>, + /// One-shot warning guard for GPU timestamp-pair exhaustion. + budget_warned: bool, /// Phase 8 — last `ROLLING_FRAMES` frame totals (sum of all /// samples in `frame` at frame_end), in microseconds. Ring @@ -74,11 +76,15 @@ struct RollingStats { has_gpu: bool, idx: usize, filled: usize, + /// Frame index of the most recent sample. A pass that stops running + /// (feature toggled off) must drop out of the readouts instead of + /// showing its frozen average forever. + last_frame: u64, } impl RollingStats { fn new() -> Self { - Self { cpu: [0.0; ROLLING_FRAMES], gpu: [0.0; ROLLING_FRAMES], has_gpu: false, idx: 0, filled: 0 } + Self { cpu: [0.0; ROLLING_FRAMES], gpu: [0.0; ROLLING_FRAMES], has_gpu: false, idx: 0, filled: 0, last_frame: 0 } } fn push(&mut self, cpu: f64, gpu: Option) { self.cpu[self.idx] = cpu; @@ -113,6 +119,7 @@ impl Profiler { timestamp_period_ns: 1.0, next_query: 0, pending_gpu: Vec::new(), + budget_warned: false, frame_total_cpu_us: [0.0; ROLLING_FRAMES], frame_total_gpu_us: [0.0; ROLLING_FRAMES], histogram_idx: 0, @@ -151,7 +158,20 @@ impl Profiler { self.gpu_enabled = true; } - pub fn set_enabled(&mut self, on: bool) { self.enabled = on; } + pub fn set_enabled(&mut self, on: bool) { + if on && !self.enabled { + // Fresh measuring session: without this, stats captured before + // a disable (potentially under a different feature set) show + // until the rolling window refills and skew the first seconds + // of every new session. + self.rolling.clear(); + self.frame_total_cpu_us = [0.0; ROLLING_FRAMES]; + self.frame_total_gpu_us = [0.0; ROLLING_FRAMES]; + self.histogram_idx = 0; + self.histogram_filled = 0; + } + self.enabled = on; + } pub fn is_enabled(&self) -> bool { self.enabled } pub fn has_gpu(&self) -> bool { self.gpu_enabled } @@ -175,7 +195,16 @@ impl Profiler { pub fn reserve_gpu_pair(&mut self, label: &'static str) -> Option<(u32, u32)> { if !self.enabled || !self.gpu_enabled { return None; } self.query_set.as_ref()?; - if self.next_query + 2 > MAX_GPU_PAIRS * 2 { return None; } + if self.next_query + 2 > MAX_GPU_PAIRS * 2 { + if !self.budget_warned { + self.budget_warned = true; + eprintln!( + "bloom profiler: GPU timestamp budget ({} pairs) exhausted — later passes report CPU time only", + MAX_GPU_PAIRS + ); + } + return None; + } let begin = self.next_query; let end = self.next_query + 1; self.next_query += 2; @@ -223,9 +252,11 @@ impl Profiler { } } - /// End-of-frame bookkeeping. Reads back GPU timestamps from the - /// previous frame (non-blocking map), folds samples into rolling - /// stats, and clears per-frame state for the next frame. + /// End-of-frame bookkeeping. Resolves this frame's GPU timestamps via + /// a BLOCKING map (map_async + poll(Wait) — serialises CPU⇄GPU, so + /// wall-clock fps is pessimistic while the profiler is enabled; see + /// docs/crash-triage-windows.md), folds samples into rolling stats, + /// and clears per-frame state for the next frame. pub fn frame_end(&mut self, device: &wgpu::Device) { if !self.enabled { self.frame.clear(); @@ -287,10 +318,15 @@ impl Profiler { self.histogram_idx = (self.histogram_idx + 1) % ROLLING_FRAMES; self.histogram_filled = (self.histogram_filled + 1).min(ROLLING_FRAMES); + let fc = self.frame_count; for s in self.frame.drain(..) { let entry = self.rolling.entry(s.label).or_insert_with(RollingStats::new); entry.push(s.cpu_us, s.gpu_us); + entry.last_frame = fc; } + // Drop entries that have not reported for several windows so a + // disabled feature's passes leave the map instead of lingering. + self.rolling.retain(|_, s| fc.saturating_sub(s.last_frame) <= (4 * ROLLING_FRAMES) as u64); self.open_cpu.clear(); self.next_query = 0; self.pending_gpu.clear(); @@ -316,7 +352,9 @@ impl Profiler { if !self.enabled { return String::from("profiler: disabled\n"); } + let fc = self.frame_count; let mut entries: Vec<(&&str, &RollingStats)> = self.rolling.iter() + .filter(|(_, s)| fc.saturating_sub(s.last_frame) <= ROLLING_FRAMES as u64) .map(|(k, v)| (k, v)) .collect(); entries.sort_by(|a, b| b.1.avg_cpu().partial_cmp(&a.1.avg_cpu()).unwrap_or(std::cmp::Ordering::Equal)); @@ -338,12 +376,18 @@ impl Profiler { /// Average total CPU frame time across the rolling window (sum of /// all phases). Useful for a single headline number. pub fn avg_frame_cpu_us(&self) -> f64 { - self.rolling.values().map(|s| s.avg_cpu()).sum() + let fc = self.frame_count; + self.rolling.values() + .filter(|s| fc.saturating_sub(s.last_frame) <= ROLLING_FRAMES as u64) + .map(|s| s.avg_cpu()).sum() } /// Average total GPU frame time where available. pub fn avg_frame_gpu_us(&self) -> f64 { - self.rolling.values().filter_map(|s| s.avg_gpu()).sum() + let fc = self.frame_count; + self.rolling.values() + .filter(|s| fc.saturating_sub(s.last_frame) <= ROLLING_FRAMES as u64) + .filter_map(|s| s.avg_gpu()).sum() } /// Snapshot the rolling averages in a stable, CPU-time-descending @@ -351,7 +395,9 @@ impl Profiler { /// label/cpu/gpu out via the accessors below — HashMap iteration /// order would jitter the overlay otherwise. pub fn snapshot(&mut self) -> Vec<(&'static str, f64, Option)> { + let fc = self.frame_count; let mut v: Vec<(&'static str, f64, Option)> = self.rolling.iter() + .filter(|(_, s)| fc.saturating_sub(s.last_frame) <= ROLLING_FRAMES as u64) .map(|(k, s)| (*k, s.avg_cpu(), s.avg_gpu())) .collect(); v.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); @@ -394,6 +440,36 @@ mod tests { assert_eq!(h[4].0, 500.0); } + #[test] + fn stale_labels_drop_out_of_snapshot_and_evict() { + let mut p = Profiler::new(); + p.set_enabled(true); + // One label reports once, another keeps reporting. + p.frame.push(FrameSample { label: "once", cpu_us: 5.0, gpu_us: None }); + p.frame_end_cpu(); + for _ in 0..(ROLLING_FRAMES + 1) { fake_frame(&mut p, 1.0); } + let snap = p.snapshot(); + assert!(snap.iter().any(|(l, _, _)| *l == "fake")); + assert!( + !snap.iter().any(|(l, _, _)| *l == "once"), + "a pass that stopped reporting must leave the snapshot" + ); + for _ in 0..(4 * ROLLING_FRAMES) { fake_frame(&mut p, 1.0); } + assert!(!p.rolling.contains_key("once"), "stale label must eventually evict"); + } + + #[test] + fn reenable_starts_fresh_session() { + let mut p = Profiler::new(); + p.set_enabled(true); + fake_frame(&mut p, 100.0); + assert!(!p.frame_history().is_empty()); + p.set_enabled(false); + p.set_enabled(true); + assert!(p.frame_history().is_empty(), "histogram must clear on re-enable"); + assert!(p.snapshot().is_empty(), "rolling stats must clear on re-enable"); + } + #[test] fn frame_history_wraps_oldest_first_at_capacity() { let mut p = Profiler::new(); diff --git a/native/shared/src/renderer/material_system_tests.rs b/native/shared/src/renderer/material_system_tests.rs index 6266cbf..54583d9 100644 --- a/native/shared/src/renderer/material_system_tests.rs +++ b/native/shared/src/renderer/material_system_tests.rs @@ -378,6 +378,13 @@ mod translucent_sort_tests { draw_slot: 0, view_depth, instance: None, + // Identity — the sort under test only reads view_depth. + model: [ + [1.0, 0.0, 0.0, 0.0], + [0.0, 1.0, 0.0, 0.0], + [0.0, 0.0, 1.0, 0.0], + [0.0, 0.0, 0.0, 1.0], + ], } } diff --git a/native/shared/src/renderer/mod.rs b/native/shared/src/renderer/mod.rs index 3bc9933..ad66ec3 100644 --- a/native/shared/src/renderer/mod.rs +++ b/native/shared/src/renderer/mod.rs @@ -979,6 +979,11 @@ pub struct Renderer { pub ssgi_radius: f32, /// SSGI master switch. pub ssgi_enabled: bool, + /// One-shot log guard: which SSGI trace backend was last reported to + /// stderr (hw-ray-query / sdf-clipmap / hiz-screen). The silent HW→SW + /// fallback made "why is bounce gray?" a debugger question during the + /// round-2 audit — keep it answerable from the log. + pub ssgi_backend_logged: Option<&'static str>, // --- Ticket 007a: Lumen-style screen-probe SSGI --- @@ -6022,6 +6027,7 @@ impl Renderer { ssgi_intensity: 1.0, ssgi_radius: 20.0, ssgi_enabled: true, + ssgi_backend_logged: None, probe_grid_w, probe_grid_h, probe_header_buffer, @@ -9426,6 +9432,11 @@ impl Renderer { } } + // CPU bracket over the composite + custom post-pass encode tail. + // The matching `end("post_fx")` below predates this begin — it was + // orphaned (a no-op) for months while comments claimed the phase + // covered scene_compose's cost. + profiler.begin("post_fx"); let composite_src_view = self.composite_source_view(); // composite_uniform_buffer carries per-frame composite state. diff --git a/native/shared/src/renderer/ssgi_pass.rs b/native/shared/src/renderer/ssgi_pass.rs index 203dcd9..2e18295 100644 --- a/native/shared/src/renderer/ssgi_pass.rs +++ b/native/shared/src/renderer/ssgi_pass.rs @@ -189,6 +189,14 @@ impl Renderer { let use_sdf = !use_hw && self.scene_sdf_clipmap_built && self.tlas_instance_data_buffer.is_some(); + // Log the backend once (and again if it changes, e.g. clipmap + // finishing its first bake promotes hiz → sdf). Nothing else in + // the engine reveals which tier actually runs. + let backend = if use_hw { "hw-ray-query" } else if use_sdf { "sdf-clipmap" } else { "hiz-screen" }; + if self.ssgi_backend_logged != Some(backend) { + self.ssgi_backend_logged = Some(backend); + eprintln!("bloom: ssgi trace backend = {}", backend); + } if use_hw { // Build the HW bind group lazily. V3 uses a per- diff --git a/native/shared/tests/golden/lit_primitives_3d.png b/native/shared/tests/golden/lit_primitives_3d.png index 271c1b433964cf8902a7efbabc90610ceb9ca519..c42d8b742ed6c696a01d70d6a054f73c387d9128 100644 GIT binary patch literal 45671 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 U%1&N&i2(>aUHx3vIVCg!0COUWC;$Ke diff --git a/native/shared/tests/golden/many_point_lights_clustered_scene.png b/native/shared/tests/golden/many_point_lights_clustered_scene.png index 23e65aa007b3791ac95291dc147e603b91e4a1cf..d81c9fb13e2f37abf282e87d9c06cfb40bf22189 100644 GIT binary patch literal 43927 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 literal 4754 zcmeHLe^gWF8NLAlCq;JLCQPYpT5Y>ZL#+jDhpAMhj$>I{)5y=DSW$sSp*RHLqRx6+ zS~;gXg;hJ_*5hnRlc4+(1ViUR?9j&JS%4TvI3Qw!7&L}Je%x>G_vOajQ6@Z|lT_j#W8{Vsg?+c%QK<}8>)QB>H5*Vn#9Q37}?pk@cdOJ>nm+bL>Z+J?1j zHkAq{x&lu=l~#M{KKk9gPcC0MU6himDm1jPKRZ7@QTrS9i4`v{zBjYCbywM6kGztv zQ-7b=e@vljH=!j5$;)$(U;djC{7T}|G^ZOwyY}ymfwyZ%>yhN0@$xpK(B;$yOfHi# zwKrv}&(|s#^s-(#{4!Dy>z8KD_>=o<~CobbGWW+(ejXx5bExP*&^M^>GD$t zv{$4<3wEqN-4eqKCQl2g;Xw#Y6(AXK)#a923Tiu!?aL83LTB7W;6=|gQ8TshY zP*ta^f_d7YAKadwUmd^C(t4|s@D|N;^R79=a&48$_H#iEB*Hb4YfO z*eN{AlSPb5xSh5c@o;rszP5j_vdtugAcl6~@$#fx;<9nMvlgv$3$x!hEGoM^Kd<~a zJ8x_fEr$sg?OETjK&ETBjoyowXZ4D;ZtCCk*#ah6^NF8gjA2{|%au27Y&;n7GYG-y9G6xo}2iAAqrV`fA-zLNvDkP)Qz z-fc`cSwHmGT-Wg|h$XH(-;g+k#22)fOPg}@wyV!_Rs>l-ptTYD=vDSMuMDOwZ2_>nLZ{zI~u_Te^QF)5g z4)I4tEIh`W9Qqgdf?xvqlOxHpnj1NWlAVtPBwF!a<=wJ~(JG!r>j|0Xp!lQffvj){ zV!fZMkPgCRvS<0R2v*7s&N?J3B|?Cgrx1^u_aG}^rNHgxwNf4g5E-%kkLHaPz1>6~ z;RzFn;r?aO7<{LhnjPy|fMmO7f$tkR)=+nPDyKuj+*6fhMHg{_5;E=ZU|0t?CiOpj zDr8dcv>yeHB#Y0P=w{XUz~<%C)tc#)xcQ-AjP$@zJ!*#c3}Z$IdJ>uYU#zb9NMj$@ zY{@-ya{Oh0ta}yixsrC(mx|BG=jG+qjzXF2{<$8}32WKVyV>?r3F*(n)J7bHS}(P$ za&ylNnGq9RdUGUNJ2f?5t2CFlw6;zwG|WOcsa-WvugIq0(M{cOX7i+kcEw-Wo@g*+ zI8y*czEqYtxkBiAD=MZACb0OIK)lIK9G3vl9mk0XvC&olEb!M0md}4bs|N;z`b@zj zo7#`6-eF8?^nw1HJRnOeCMIGQ*`|9Mv%@>Cq-cIRvhszaOWjwvi zMM*~6!wT)lB2?NpexPpO4|T&k+HTdO{;%LcX?=f*(`7_~jcK?q^mF@#)8=w=6b5en zV%eoV0Ii#?veP@^WGpAaFRTv2Pp7+eC~_p>!LX3o`s=9|YPQg*3Kdis8#_C@r7o)x z)VNmiBmk2D_{>N`QB&pvEW=%M^rUnPzup>vy`J2=RA{*_>}D9j#n?$XUut9lI??0M zM7Px0U3xcn(M7vV0ws+~IX{>=S`VZ@++r^lnFv+nIxpXNHBBa-%Jg zQ?~GF^)(x@QYS@W&~;Y-9vymi7FZ3EdsFq(ksNpQ@_$mY43}K#RT7Ck9YLGY>sUzj zdZ@R{`&fBlWH1;jsXQgw7L^Ro%AfpQjK-ggsq28Lh|E$tF>@ToyaA(#ggf%|hhL6< zs$lw;oHL={?}=KK{`|hr>nfjxb|XJHfS$P++n}MldOIGb>}kqefs-Z26Z7`b+LUZy z@-Z7m2qBXQ-zml4y|mMvs<*)#QC?Is#@;?9{mA7CWRxBdd`R+Cj6v8yJZiuyCo(vD zlh>*6ET6UsKohLXcXo}c8M|x%@_bnD(?%+8qr#l_@xZ{cEk2bl5+e+!5->FOMZa|GyGU bC+91FEXt3&@e}x86SZO88*5cbIS2m*4BS_t diff --git a/native/windows/Cargo.toml b/native/windows/Cargo.toml index a76ecf8..0b472b1 100644 --- a/native/windows/Cargo.toml +++ b/native/windows/Cargo.toml @@ -33,6 +33,10 @@ image-extras = ["bloom-shared/image-extras"] # in native/macos/Cargo.toml. [profile.release] panic = "abort" +# Line tables in the staticlib objects so `perry compile --debug-symbols` +# can emit a usable PDB for crash triage (negligible runtime cost; the +# symbols stay out of the exe unless /DEBUG is requested at link). +debug = "line-tables-only" [dependencies] bloom-shared = { path = "../shared", default-features = false, features = ["mp3"] } diff --git a/native/windows/src/lib.rs b/native/windows/src/lib.rs index c3cf180..eee9783 100644 --- a/native/windows/src/lib.rs +++ b/native/windows/src/lib.rs @@ -446,6 +446,20 @@ unsafe fn init_engine_for_hwnd( ..Default::default() })).expect("No adapter found"); + { + // One line of boot truth: which GPU we got and whether the + // features that silently reshape the frame (HW ray query for + // GI, timestamps for the profiler) are available on it. + let info = adapter.get_info(); + eprintln!( + "bloom: adapter '{}' ({:?}), ray_query={}, timestamps={}", + info.name, + info.backend, + adapter.features().contains(wgpu::Features::EXPERIMENTAL_RAY_QUERY), + adapter.features().contains(wgpu::Features::TIMESTAMP_QUERY), + ); + } + // Ticket 007b: HW ray-query via DXR 1.1 / VK_KHR_ray_query. let supported = adapter.features(); let force_sw_gi = std::env::var("BLOOM_FORCE_SW_GI")