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 <noreply@anthropic.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user