Skip to content

Commit ac29bdf

Browse files
authored
Fix pass_span drop panic obscuring transparent 2d render errors (#14758)
# Objective When an item in the transparent 2d phase fails to render, bevy crashes with _"PassSpanScope::end was never called"_ instead of outputting the actual error to the console. This PR fixes this so that phase errors are output to the console. It also makes bevy not crash. ``` thread '<unnamed>' panicked at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/diagnostic/mod.rs:157:9: PassSpanScope::end was never called stack backtrace: 0: rust_begin_unwind at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/std/src/panicking.rs:652:5 1: core::panicking::panic_fmt at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/panicking.rs:72:14 2: <bevy_render::diagnostic::PassSpanGuard<R,P> as core::ops::drop::Drop>::drop at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/diagnostic/mod.rs:157:9 3: core::ptr::drop_in_place<bevy_render::diagnostic::PassSpanGuard<core::option::Option<alloc::sync::Arc<bevy_render::diagnostic::internal::DiagnosticsRecorder>>,bevy_render::render_phase::draw_state::TrackedRenderPass>> at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ptr/mod.rs:514:1 4: <bevy_core_pipeline::core_2d::main_transparent_pass_2d_node::MainTransparentPass2dNode as bevy_render::render_graph::node::ViewNode>::run at /Users/brianreavis/Repositories/project/bevy/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs:75:9 5: <bevy_render::render_graph::node::ViewNodeRunner<T> as bevy_render::render_graph::node::Node>::run at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/render_graph/node.rs:406:9 6: bevy_render::renderer::graph_runner::RenderGraphRunner::run_graph at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/renderer/graph_runner.rs:226:21 7: bevy_render::renderer::graph_runner::RenderGraphRunner::run_graph at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/renderer/graph_runner.rs:233:21 8: bevy_render::renderer::graph_runner::RenderGraphRunner::run at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/renderer/graph_runner.rs:81:9 9: bevy_render::renderer::render_system at /Users/brianreavis/Repositories/project/bevy/crates/bevy_render/src/renderer/mod.rs:40:15 10: core::ops::function::FnMut::call_mut at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ops/function.rs:166:5 11: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ops/function.rs:294:13 12: <Func as bevy_ecs::system::exclusive_function_system::ExclusiveSystemParamFunction<fn(F0) .> Out>>::run::call_inner at /Users/brianreavis/Repositories/project/bevy/crates/bevy_ecs/src/system/exclusive_function_system.rs:229:21 13: <Func as bevy_ecs::system::exclusive_function_system::ExclusiveSystemParamFunction<fn(F0) .> Out>>::run at /Users/brianreavis/Repositories/project/bevy/crates/bevy_ecs/src/system/exclusive_function_system.rs:232:17 14: <bevy_ecs::system::exclusive_function_system::ExclusiveFunctionSystem<Marker,F> as bevy_ecs::system::system::System>::run::{{closure}} at /Users/brianreavis/Repositories/project/bevy/crates/bevy_ecs/src/system/exclusive_function_system.rs:124:23 15: bevy_ecs::world::World::last_change_tick_scope at /Users/brianreavis/Repositories/project/bevy/crates/bevy_ecs/src/world/mod.rs:2383:9 16: <bevy_ecs::system::exclusive_function_system::ExclusiveFunctionSystem<Marker,F> as bevy_ecs::system::system::System>::run at /Users/brianreavis/Repositories/project/bevy/crates/bevy_ecs/src/system/exclusive_function_system.rs:116:9 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ``` ## Solution Matched the behavior of the other render phases ([like here](https://github.com/bevyengine/bevy/blob/9ca5540b759c9e2571147c26b484029d93976be8/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs#L98-L101))
1 parent 0c126ee commit ac29bdf

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use bevy_render::{
99
renderer::RenderContext,
1010
view::{ViewDepthTexture, ViewTarget},
1111
};
12+
use bevy_utils::tracing::error;
1213
#[cfg(feature = "trace")]
1314
use bevy_utils::tracing::info_span;
1415

@@ -68,7 +69,12 @@ impl ViewNode for MainTransparentPass2dNode {
6869
}
6970

7071
if !transparent_phase.items.is_empty() {
71-
transparent_phase.render(&mut render_pass, world, view_entity)?;
72+
#[cfg(feature = "trace")]
73+
let _transparent_main_pass_2d_span =
74+
info_span!("transparent_main_pass_2d").entered();
75+
if let Err(err) = transparent_phase.render(&mut render_pass, world, view_entity) {
76+
error!("Error encountered while rendering the transparent 2D phase {err:?}");
77+
}
7278
}
7379

7480
pass_span.end(&mut render_pass);

0 commit comments

Comments
 (0)