diff --git a/crates/bevy_render/src/pipelined_rendering.rs b/crates/bevy_render/src/pipelined_rendering.rs index 9806ff45015cd..d643e48f93d2f 100644 --- a/crates/bevy_render/src/pipelined_rendering.rs +++ b/crates/bevy_render/src/pipelined_rendering.rs @@ -146,36 +146,39 @@ impl Plugin for PipelinedRenderingPlugin { render_to_app_receiver, )); - std::thread::spawn(move || { - #[cfg(feature = "trace")] - let _span = bevy_log::info_span!("render thread").entered(); - - let compute_task_pool = ComputeTaskPool::get(); - loop { - // run a scope here to allow main world to use this thread while it's waiting for the render app - let sent_app = compute_task_pool - .scope(|s| { - s.spawn(async { app_to_render_receiver.recv().await }); - }) - .pop(); - let Some(Ok(mut render_app)) = sent_app else { - break; - }; - - { - #[cfg(feature = "trace")] - let _sub_app_span = - bevy_log::info_span!("sub app", name = ?RenderApp).entered(); - render_app.update(); + std::thread::Builder::new() + .name("Render thread".into()) + .spawn(move || { + #[cfg(feature = "trace")] + let _span = bevy_log::info_span!("render thread").entered(); + + let compute_task_pool = ComputeTaskPool::get(); + loop { + // run a scope here to allow main world to use this thread while it's waiting for the render app + let sent_app = compute_task_pool + .scope(|s| { + s.spawn(async { app_to_render_receiver.recv().await }); + }) + .pop(); + let Some(Ok(mut render_app)) = sent_app else { + break; + }; + + { + #[cfg(feature = "trace")] + let _sub_app_span = + bevy_log::info_span!("sub app", name = ?RenderApp).entered(); + render_app.update(); + } + + if render_to_app_sender.send_blocking(render_app).is_err() { + break; + } } - if render_to_app_sender.send_blocking(render_app).is_err() { - break; - } - } - - bevy_log::debug!("exiting pipelined rendering thread"); - }); + bevy_log::debug!("exiting pipelined rendering thread"); + }) + .expect("Failed to create render thread"); } }