From 66388278d4156c6fdb1c44d39cb1726e3255c56a Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 16 Sep 2026 06:44:38 +0700 Subject: [PATCH] entering the world no longer crashes on Linux and Windows - entering the world no longer aborts on Vulkan, which is every Linux build and Windows by default: the world's draw inside the UI pass had opened a second GPU query span, and wgpu allows one at a time (2258) Co-Authored-By: Claude Fable 5.1 --- crates/benilla-app/src/perf/journal.rs | 3 ++- crates/benilla-world/src/ffx_glow.rs | 12 +++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/crates/benilla-app/src/perf/journal.rs b/crates/benilla-app/src/perf/journal.rs index e17c2fd3..206ce403 100644 --- a/crates/benilla-app/src/perf/journal.rs +++ b/crates/benilla-app/src/perf/journal.rs @@ -120,7 +120,8 @@ enum GpuBucket { Transparent, /// The `ffx_glow` chain: the quarter-res downsample, the two Gauss taps — and a bake's /// combine. The world's combine is the first draw of the UI camera's main pass since 2234, - /// nested under `main_transparent_pass_2d`, so it lands in [`Self::Ui`] with that pass. + /// inside `main_transparent_pass_2d`'s own span (it has none of its own — 2258), so it lands + /// in [`Self::Ui`] with that pass. Glow, /// The full-screen tail on every camera: tonemapping, upscaling, the MSAA writeback. Post, diff --git a/crates/benilla-world/src/ffx_glow.rs b/crates/benilla-world/src/ffx_glow.rs index 8a9e26a2..eda089f3 100644 --- a/crates/benilla-world/src/ffx_glow.rs +++ b/crates/benilla-world/src/ffx_glow.rs @@ -1366,14 +1366,16 @@ impl ViewNode for FfxTransparent2dNode { render_pass.set_camera_viewport(viewport); } if let Some((combine, bind)) = ground.as_ref() { - // Its own span inside the pass, so the per-pass split (`WOW_GPU_PASSES`) - // still reads one `ffx_glow_combine` a frame on a device that times inside - // a pass; on one that does not, the transparent pass carries it. - let ground_span = diagnostics.pass_span(&mut render_pass, "ffx_glow_combine"); + // No span of its own. A `pass_span` is a pipeline-statistics query as well + // as a timestamp pair, and wgpu allows ONE such query active at a time: a + // second one opened inside the pass's own was the validation error that + // aborted every Vulkan build of the 09-15 sync on its first world frame + // (B390, 2258) — and only Vulkan exposes the feature, so Metal and DX12 + // never nested anything and no gate saw it. The transparent pass's number + // carries the combine; the journal never read a nested span. render_pass.set_render_pipeline(combine); render_pass.set_bind_group(0, bind, &[]); render_pass.draw(0..3, 0..1); - ground_span.end(&mut render_pass); } if !transparent_phase.items.is_empty() { if let Err(err) = transparent_phase.render(&mut render_pass, world, view_entity)