From 5165a5e6843c06e2be1bc52354358043c575689f Mon Sep 17 00:00:00 2001 From: jf908 Date: Mon, 12 May 2025 18:48:45 +0100 Subject: [PATCH 01/11] Record render diagnostics for all engine passes --- .../src/contrast_adaptive_sharpening/node.rs | 6 +++ crates/bevy_anti_aliasing/src/fxaa/node.rs | 6 +++ crates/bevy_anti_aliasing/src/smaa/mod.rs | 8 ++++ crates/bevy_anti_aliasing/src/taa/mod.rs | 8 ++++ .../src/auto_exposure/node.rs | 6 +++ .../core_3d/main_transmissive_pass_3d_node.rs | 11 +++++ .../src/deferred/copy_lighting_id.rs | 7 ++++ .../bevy_core_pipeline/src/deferred/node.rs | 5 +++ crates/bevy_core_pipeline/src/dof/mod.rs | 8 ++++ .../src/motion_blur/node.rs | 6 +++ .../bevy_core_pipeline/src/msaa_writeback.rs | 6 +++ .../src/oit/resolve/node.rs | 6 +++ .../src/post_process/mod.rs | 6 +++ .../src/tonemapping/node.rs | 6 +++ .../bevy_core_pipeline/src/upscaling/node.rs | 6 +++ crates/bevy_pbr/src/atmosphere/node.rs | 11 +++++ crates/bevy_pbr/src/deferred/mod.rs | 6 +++ .../src/meshlet/material_shade_nodes.rs | 16 ++++++++ .../meshlet/visibility_buffer_raster_node.rs | 14 +++++++ crates/bevy_pbr/src/render/gpu_preprocess.rs | 26 ++++++++++-- crates/bevy_pbr/src/ssao/mod.rs | 41 +++++++++---------- crates/bevy_pbr/src/ssr/mod.rs | 7 +++- crates/bevy_pbr/src/volumetric_fog/render.rs | 11 +++++ crates/bevy_pbr/src/wireframe.rs | 9 +++- crates/bevy_sprite/src/mesh2d/wireframe2d.rs | 6 +++ crates/bevy_ui/src/render/render_pass.rs | 8 +++- 26 files changed, 228 insertions(+), 28 deletions(-) diff --git a/crates/bevy_anti_aliasing/src/contrast_adaptive_sharpening/node.rs b/crates/bevy_anti_aliasing/src/contrast_adaptive_sharpening/node.rs index 663d481e887bd..ae86792cd1067 100644 --- a/crates/bevy_anti_aliasing/src/contrast_adaptive_sharpening/node.rs +++ b/crates/bevy_anti_aliasing/src/contrast_adaptive_sharpening/node.rs @@ -3,6 +3,7 @@ use std::sync::Mutex; use crate::contrast_adaptive_sharpening::ViewCasPipeline; use bevy_ecs::prelude::*; use bevy_render::{ + diagnostic::RecordDiagnostics, extract_component::{ComponentUniforms, DynamicUniformIndex}, render_graph::{Node, NodeRunError, RenderGraphContext}, render_resource::{ @@ -66,6 +67,8 @@ impl Node for CasNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let view_target = target.post_process_write(); let source = view_target.source; let destination = view_target.destination; @@ -109,11 +112,14 @@ impl Node for CasNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.time_span(&mut render_pass, "contrast_adaptive_sharpening"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, bind_group, &[uniform_index.index()]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_anti_aliasing/src/fxaa/node.rs b/crates/bevy_anti_aliasing/src/fxaa/node.rs index a58f21d9a7746..55dd226842383 100644 --- a/crates/bevy_anti_aliasing/src/fxaa/node.rs +++ b/crates/bevy_anti_aliasing/src/fxaa/node.rs @@ -3,6 +3,7 @@ use std::sync::Mutex; use crate::fxaa::{CameraFxaaPipeline, Fxaa, FxaaPipeline}; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, render_resource::{ BindGroup, BindGroupEntries, Operations, PipelineCache, RenderPassColorAttachment, @@ -42,6 +43,8 @@ impl ViewNode for FxaaNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let post_process = target.post_process_write(); let source = post_process.source; let destination = post_process.destination; @@ -75,11 +78,14 @@ impl ViewNode for FxaaNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.pass_span(&mut render_pass, "fxaa_pass"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_anti_aliasing/src/smaa/mod.rs b/crates/bevy_anti_aliasing/src/smaa/mod.rs index 4259b5e33dd4f..ceb2a08210bf4 100644 --- a/crates/bevy_anti_aliasing/src/smaa/mod.rs +++ b/crates/bevy_anti_aliasing/src/smaa/mod.rs @@ -55,6 +55,7 @@ use bevy_math::{vec4, Vec4}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, extract_component::{ExtractComponent, ExtractComponentPlugin}, render_asset::RenderAssets, render_graph::{ @@ -860,6 +861,10 @@ impl ViewNode for SmaaNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + render_context.command_encoder().push_debug_group("smaa"); + let time_span = diagnostics.time_span(render_context.command_encoder(), "smaa"); + // Fetch the framebuffer textures. let postprocess = view_target.post_process_write(); let (source, destination) = (postprocess.source, postprocess.destination); @@ -900,6 +905,9 @@ impl ViewNode for SmaaNode { destination, ); + time_span.end(render_context.command_encoder()); + render_context.command_encoder().pop_debug_group(); + Ok(()) } } diff --git a/crates/bevy_anti_aliasing/src/taa/mod.rs b/crates/bevy_anti_aliasing/src/taa/mod.rs index dc12d34423b12..1be618ed28e54 100644 --- a/crates/bevy_anti_aliasing/src/taa/mod.rs +++ b/crates/bevy_anti_aliasing/src/taa/mod.rs @@ -20,6 +20,7 @@ use bevy_math::vec2; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::{ExtractedCamera, MipBias, TemporalJitter}, + diagnostic::RecordDiagnostics, prelude::{Camera, Projection}, render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner}, render_resource::{ @@ -192,6 +193,9 @@ impl ViewNode for TemporalAntiAliasNode { ) else { return Ok(()); }; + + let diagnostics = render_context.diagnostic_recorder(); + let view_target = view_target.post_process_write(); let taa_bind_group = render_context.render_device().create_bind_group( @@ -226,12 +230,16 @@ impl ViewNode for TemporalAntiAliasNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut taa_pass, "taa_pass"); + taa_pass.set_render_pipeline(taa_pipeline); taa_pass.set_bind_group(0, &taa_bind_group, &[]); if let Some(viewport) = camera.viewport.as_ref() { taa_pass.set_camera_viewport(viewport); } taa_pass.draw(0..3, 0..1); + + pass_span.end(&mut taa_pass); } Ok(()) diff --git a/crates/bevy_core_pipeline/src/auto_exposure/node.rs b/crates/bevy_core_pipeline/src/auto_exposure/node.rs index 222efe5c62bd0..57cdcd6d42ed6 100644 --- a/crates/bevy_core_pipeline/src/auto_exposure/node.rs +++ b/crates/bevy_core_pipeline/src/auto_exposure/node.rs @@ -10,6 +10,7 @@ use bevy_ecs::{ world::{FromWorld, World}, }; use bevy_render::{ + diagnostic::RecordDiagnostics, globals::GlobalsBuffer, render_asset::RenderAssets, render_graph::*, @@ -98,6 +99,8 @@ impl Node for AutoExposureNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let compute_bind_group = render_context.render_device().create_bind_group( None, &pipeline.histogram_layout, @@ -125,6 +128,7 @@ impl Node for AutoExposureNode { label: Some("auto_exposure_pass"), timestamp_writes: None, }); + let pass_span = diagnostics.time_span(&mut compute_pass, "auto_exposure_pass"); compute_pass.set_bind_group(0, &compute_bind_group, &[view_uniform_offset.offset]); compute_pass.set_pipeline(histogram_pipeline); @@ -136,6 +140,8 @@ impl Node for AutoExposureNode { compute_pass.set_pipeline(average_pipeline); compute_pass.dispatch_workgroups(1, 1, 1); + pass_span.end(&mut compute_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs index 0a2e98f0bf9ac..2e183423e4164 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs @@ -3,6 +3,7 @@ use crate::core_3d::Transmissive3d; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, render_phase::ViewSortedRenderPhases, render_resource::{Extent3d, RenderPassDescriptor, StoreOp}, @@ -48,6 +49,8 @@ impl ViewNode for MainTransmissivePass3dNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let physical_target_size = camera.physical_target_size.unwrap(); let render_pass_descriptor = RenderPassDescriptor { @@ -94,6 +97,8 @@ impl ViewNode for MainTransmissivePass3dNode { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor.clone()); + let pass_span = + diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -105,10 +110,14 @@ impl ViewNode for MainTransmissivePass3dNode { { error!("Error encountered while rendering the transmissive phase {err:?}"); } + + pass_span.end(&mut render_pass); } } else { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor); + let pass_span = + diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -117,6 +126,8 @@ impl ViewNode for MainTransmissivePass3dNode { if let Err(err) = transmissive_phase.render(&mut render_pass, world, view_entity) { error!("Error encountered while rendering the transmissive phase {err:?}"); } + + pass_span.end(&mut render_pass); } } diff --git a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs index 77430e0291d5e..e7c9bb4771191 100644 --- a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs +++ b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs @@ -8,6 +8,7 @@ use bevy_ecs::prelude::*; use bevy_math::UVec2; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_resource::{binding_types::texture_2d, *}, renderer::RenderDevice, texture::{CachedTexture, TextureCache}, @@ -90,6 +91,8 @@ impl ViewNode for CopyDeferredLightingIdNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let bind_group = render_context.render_device().create_bind_group( "copy_deferred_lighting_id_bind_group", ©_deferred_lighting_id_pipeline.layout, @@ -111,10 +114,14 @@ impl ViewNode for CopyDeferredLightingIdNode { occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "copy_deferred_lighting_id_pass"); + render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/deferred/node.rs b/crates/bevy_core_pipeline/src/deferred/node.rs index ffac1eec6de82..bca93dc393699 100644 --- a/crates/bevy_core_pipeline/src/deferred/node.rs +++ b/crates/bevy_core_pipeline/src/deferred/node.rs @@ -5,6 +5,7 @@ use bevy_render::render_graph::ViewNode; use bevy_render::view::{ExtractedView, NoIndirectDrawing}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext}, render_phase::{TrackedRenderPass, ViewBinnedRenderPhases}, render_resource::{CommandEncoderDescriptor, RenderPassDescriptor, StoreOp}, @@ -127,6 +128,8 @@ fn run_deferred_prepass<'w>( return Ok(()); }; + let diagnostic = render_context.diagnostic_recorder(); + let mut color_attachments = vec![]; color_attachments.push( view_prepass_textures @@ -218,6 +221,7 @@ fn run_deferred_prepass<'w>( occlusion_query_set: None, }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); + let pass_span = diagnostic.pass_span(&mut render_pass, label); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); } @@ -244,6 +248,7 @@ fn run_deferred_prepass<'w>( } } + pass_span.end(&mut render_pass); drop(render_pass); // After rendering to the view depth texture, copy it to the prepass depth texture diff --git a/crates/bevy_core_pipeline/src/dof/mod.rs b/crates/bevy_core_pipeline/src/dof/mod.rs index 5eee57b8bb338..ffa7df915f9ee 100644 --- a/crates/bevy_core_pipeline/src/dof/mod.rs +++ b/crates/bevy_core_pipeline/src/dof/mod.rs @@ -32,6 +32,7 @@ use bevy_math::ops; use bevy_reflect::{prelude::ReflectDefault, Reflect}; use bevy_render::{ camera::{PhysicalCameraParameters, Projection}, + diagnostic::RecordDiagnostics, extract_component::{ComponentUniforms, DynamicUniformIndex, UniformComponentPlugin}, render_graph::{ NodeRunError, RenderGraphApp as _, RenderGraphContext, ViewNode, ViewNodeRunner, @@ -359,6 +360,8 @@ impl ViewNode for DepthOfFieldNode { let view_uniforms = world.resource::(); let global_bind_group = world.resource::(); + let diagnostics = render_context.diagnostic_recorder(); + // We can be in either Gaussian blur or bokeh mode here. Both modes are // similar, consisting of two passes each. We factor out the information // specific to each pass into @@ -451,6 +454,9 @@ impl ViewNode for DepthOfFieldNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&render_pass_descriptor); + let pass_span = + diagnostics.pass_span(&mut render_pass, pipeline_render_info.pass_label); + render_pass.set_pipeline(render_pipeline); // Set the per-view bind group. render_pass.set_bind_group(0, &view_bind_group, &[view_uniform_offset.offset]); @@ -462,6 +468,8 @@ impl ViewNode for DepthOfFieldNode { ); // Render the full-screen pass. render_pass.draw(0..3, 0..1); + + pass_span.end(&mut render_pass); } Ok(()) diff --git a/crates/bevy_core_pipeline/src/motion_blur/node.rs b/crates/bevy_core_pipeline/src/motion_blur/node.rs index ade5f50d77466..817c7a9e86957 100644 --- a/crates/bevy_core_pipeline/src/motion_blur/node.rs +++ b/crates/bevy_core_pipeline/src/motion_blur/node.rs @@ -1,5 +1,6 @@ use bevy_ecs::{query::QueryItem, world::World}; use bevy_render::{ + diagnostic::RecordDiagnostics, extract_component::ComponentUniforms, globals::GlobalsBuffer, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, @@ -59,6 +60,8 @@ impl ViewNode for MotionBlurNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let post_process = view_target.post_process_write(); let layout = if msaa.samples() == 1 { @@ -91,11 +94,14 @@ impl ViewNode for MotionBlurNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "motion_blur_pass"); render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/msaa_writeback.rs b/crates/bevy_core_pipeline/src/msaa_writeback.rs index 8dc51e4ed552a..9d65d67117495 100644 --- a/crates/bevy_core_pipeline/src/msaa_writeback.rs +++ b/crates/bevy_core_pipeline/src/msaa_writeback.rs @@ -8,6 +8,7 @@ use bevy_color::LinearRgba; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner}, render_resource::*, renderer::RenderContext, @@ -74,6 +75,8 @@ impl ViewNode for MsaaWritebackNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + // The current "main texture" needs to be bound as an input resource, and we need the "other" // unused target to be the "resolve target" for the MSAA write. Therefore this is the same // as a post process write! @@ -107,11 +110,14 @@ impl ViewNode for MsaaWritebackNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.pass_span(&mut render_pass, "msaa_writeback"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/oit/resolve/node.rs b/crates/bevy_core_pipeline/src/oit/resolve/node.rs index 14d42235f12a9..1d9ec2a47f77f 100644 --- a/crates/bevy_core_pipeline/src/oit/resolve/node.rs +++ b/crates/bevy_core_pipeline/src/oit/resolve/node.rs @@ -1,6 +1,7 @@ use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext, RenderLabel, ViewNode}, render_resource::{BindGroupEntries, PipelineCache, RenderPassDescriptor}, renderer::RenderContext, @@ -48,6 +49,8 @@ impl ViewNode for OitResolveNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let depth_bind_group = render_context.render_device().create_bind_group( "oit_resolve_depth_bind_group", &resolve_pipeline.oit_depth_bind_group_layout, @@ -61,6 +64,7 @@ impl ViewNode for OitResolveNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "oit_resolve_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -71,6 +75,8 @@ impl ViewNode for OitResolveNode { render_pass.set_bind_group(1, &depth_bind_group, &[]); render_pass.draw(0..3, 0..1); + + pass_span.end(&mut render_pass); } Ok(()) diff --git a/crates/bevy_core_pipeline/src/post_process/mod.rs b/crates/bevy_core_pipeline/src/post_process/mod.rs index fddac95066002..a5c85f36f9bfd 100644 --- a/crates/bevy_core_pipeline/src/post_process/mod.rs +++ b/crates/bevy_core_pipeline/src/post_process/mod.rs @@ -19,6 +19,7 @@ use bevy_image::{BevyDefault, Image}; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::Camera, + diagnostic::RecordDiagnostics, extract_component::{ExtractComponent, ExtractComponentPlugin}, render_asset::{RenderAssetUsages, RenderAssets}, render_graph::{ @@ -391,6 +392,8 @@ impl ViewNode for PostProcessingNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + // Use the [`PostProcessWrite`] infrastructure, since this is a // full-screen pass. let post_process = view_target.post_process_write(); @@ -422,11 +425,14 @@ impl ViewNode for PostProcessingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.pass_span(&mut render_pass, "postprocessing pass"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[**post_processing_uniform_buffer_offsets]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/tonemapping/node.rs b/crates/bevy_core_pipeline/src/tonemapping/node.rs index 0f8f6edc49eb2..dbe019ffc7563 100644 --- a/crates/bevy_core_pipeline/src/tonemapping/node.rs +++ b/crates/bevy_core_pipeline/src/tonemapping/node.rs @@ -4,6 +4,7 @@ use crate::tonemapping::{TonemappingLuts, TonemappingPipeline, ViewTonemappingPi use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ + diagnostic::RecordDiagnostics, render_asset::RenderAssets, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, render_resource::{ @@ -60,6 +61,8 @@ impl ViewNode for TonemappingNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let post_process = target.post_process_write(); let source = post_process.source; let destination = post_process.destination; @@ -131,11 +134,14 @@ impl ViewNode for TonemappingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.pass_span(&mut render_pass, "tonemapping_pass"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, bind_group, &[view_uniform_offset.offset]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_core_pipeline/src/upscaling/node.rs b/crates/bevy_core_pipeline/src/upscaling/node.rs index ece71c194710c..c524edecbf7c3 100644 --- a/crates/bevy_core_pipeline/src/upscaling/node.rs +++ b/crates/bevy_core_pipeline/src/upscaling/node.rs @@ -2,6 +2,7 @@ use crate::{blit::BlitPipeline, upscaling::ViewUpscalingPipeline}; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_render::{ camera::{CameraOutputMode, ClearColor, ClearColorConfig, ExtractedCamera}, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, render_resource::{ BindGroup, BindGroupEntries, PipelineCache, RenderPassDescriptor, TextureViewId, @@ -34,6 +35,8 @@ impl ViewNode for UpscalingNode { let blit_pipeline = world.get_resource::().unwrap(); let clear_color_global = world.get_resource::().unwrap(); + let diagnostics = render_context.diagnostic_recorder(); + let clear_color = if let Some(camera) = camera { match camera.output_mode { CameraOutputMode::Write { clear_color, .. } => clear_color, @@ -82,6 +85,7 @@ impl ViewNode for UpscalingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); + let pass_span = diagnostics.pass_span(&mut render_pass, "upscaling_pass"); if let Some(camera) = camera { if let Some(viewport) = &camera.viewport { @@ -95,6 +99,8 @@ impl ViewNode for UpscalingNode { render_pass.set_bind_group(0, bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_pbr/src/atmosphere/node.rs b/crates/bevy_pbr/src/atmosphere/node.rs index 851447d760fc3..2a8f48de3cf42 100644 --- a/crates/bevy_pbr/src/atmosphere/node.rs +++ b/crates/bevy_pbr/src/atmosphere/node.rs @@ -1,6 +1,7 @@ use bevy_ecs::{query::QueryItem, system::lifetimeless::Read, world::World}; use bevy_math::{UVec2, Vec3Swizzles}; use bevy_render::{ + diagnostic::RecordDiagnostics, extract_component::DynamicUniformIndex, render_graph::{NodeRunError, RenderGraphContext, RenderLabel, ViewNode}, render_resource::{ComputePass, ComputePassDescriptor, PipelineCache, RenderPassDescriptor}, @@ -70,12 +71,15 @@ impl ViewNode for AtmosphereLutsNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let command_encoder = render_context.command_encoder(); let mut luts_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { label: Some("atmosphere_luts_pass"), timestamp_writes: None, }); + let pass_span = diagnostics.time_span(&mut luts_pass, "atmosphere_luts_pass"); fn dispatch_2d(compute_pass: &mut ComputePass, size: UVec2) { const WORKGROUP_SIZE: u32 = 16; @@ -149,6 +153,8 @@ impl ViewNode for AtmosphereLutsNode { dispatch_2d(&mut luts_pass, settings.aerial_view_lut_size.xy()); + pass_span.end(&mut luts_pass); + Ok(()) } } @@ -191,6 +197,8 @@ impl ViewNode for RenderSkyNode { return Ok(()); }; //TODO: warning + let diagnostics = render_context.diagnostic_recorder(); + let mut render_sky_pass = render_context .command_encoder() @@ -201,6 +209,7 @@ impl ViewNode for RenderSkyNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_sky_pass, "render_sky_pass"); render_sky_pass.set_pipeline(render_sky_pipeline); render_sky_pass.set_bind_group( @@ -216,6 +225,8 @@ impl ViewNode for RenderSkyNode { ); render_sky_pass.draw(0..3, 0..1); + pass_span.end(&mut render_sky_pass); + Ok(()) } } diff --git a/crates/bevy_pbr/src/deferred/mod.rs b/crates/bevy_pbr/src/deferred/mod.rs index eccf6404ad275..d692e6604288e 100644 --- a/crates/bevy_pbr/src/deferred/mod.rs +++ b/crates/bevy_pbr/src/deferred/mod.rs @@ -21,6 +21,7 @@ use bevy_core_pipeline::{ }; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_image::BevyDefault as _; +use bevy_render::diagnostic::RecordDiagnostics; use bevy_render::{ extract_component::{ ComponentUniforms, ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin, @@ -192,6 +193,8 @@ impl ViewNode for DeferredOpaquePass3dPbrLightingNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let bind_group_1 = render_context.render_device().create_bind_group( "deferred_lighting_layout_group_1", &deferred_lighting_layout.bind_group_layout_1, @@ -212,6 +215,7 @@ impl ViewNode for DeferredOpaquePass3dPbrLightingNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "deferred_lighting_pass"); render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group( @@ -229,6 +233,8 @@ impl ViewNode for DeferredOpaquePass3dPbrLightingNode { render_pass.set_bind_group(1, &bind_group_1, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs b/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs index 9c2d432d8856a..a20b3ae5ae71c 100644 --- a/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs +++ b/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs @@ -19,6 +19,7 @@ use bevy_ecs::{ }; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{NodeRunError, RenderGraphContext, ViewNode}, render_resource::{ LoadOp, Operations, PipelineCache, RenderPassDepthStencilAttachment, RenderPassDescriptor, @@ -86,6 +87,8 @@ impl ViewNode for MeshletMainOpaquePass3dNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { label: Some("meshlet_main_opaque_pass_3d"), color_attachments: &[Some(target.get_color_attachment())], @@ -100,6 +103,7 @@ impl ViewNode for MeshletMainOpaquePass3dNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_main_opaque_pass_3d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); } @@ -134,6 +138,8 @@ impl ViewNode for MeshletMainOpaquePass3dNode { } } + pass_span.end(&mut render_pass); + Ok(()) } } @@ -190,6 +196,8 @@ impl ViewNode for MeshletPrepassNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let color_attachments = vec![ view_prepass_textures .normal @@ -218,6 +226,7 @@ impl ViewNode for MeshletPrepassNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_prepass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); } @@ -257,6 +266,8 @@ impl ViewNode for MeshletPrepassNode { } } + pass_span.end(&mut render_pass); + Ok(()) } } @@ -332,6 +343,8 @@ impl ViewNode for MeshletDeferredGBufferPrepassNode { .map(|deferred_lighting_pass_id| deferred_lighting_pass_id.get_attachment()), ]; + let diagnostics = render_context.diagnostic_recorder(); + let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { label: Some("meshlet_deferred_prepass"), color_attachments: &color_attachments, @@ -346,6 +359,7 @@ impl ViewNode for MeshletDeferredGBufferPrepassNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_deferred_prepass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); } @@ -385,6 +399,8 @@ impl ViewNode for MeshletDeferredGBufferPrepassNode { } } + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs b/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs index 20054d2d2f53a..4b31bce520096 100644 --- a/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs +++ b/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs @@ -12,6 +12,7 @@ use bevy_ecs::{ use bevy_math::{ops, UVec2}; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::{Node, NodeRunError, RenderGraphContext}, render_resource::*, renderer::RenderContext, @@ -99,6 +100,8 @@ impl Node for MeshletVisibilityBufferRasterPassNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let first_node = meshlet_view_bind_groups .first_node .fetch_and(false, Ordering::SeqCst); @@ -109,6 +112,10 @@ impl Node for MeshletVisibilityBufferRasterPassNode { render_context .command_encoder() .push_debug_group("meshlet_visibility_buffer_raster"); + let time_span = diagnostics.time_span( + render_context.command_encoder(), + "meshlet_visibility_buffer_raster", + ); if first_node { fill_cluster_buffers_pass( render_context, @@ -242,6 +249,10 @@ impl Node for MeshletVisibilityBufferRasterPassNode { "meshlet_visibility_buffer_raster: {}", shadow_view.pass_name )); + let pass_span = diagnostics.time_span( + render_context.command_encoder(), + shadow_view.pass_name.clone(), + ); clear_visibility_buffer_pass( render_context, &meshlet_view_bind_groups.clear_visibility_buffer, @@ -335,8 +346,11 @@ impl Node for MeshletVisibilityBufferRasterPassNode { downsample_depth_second_shadow_view_pipeline, ); render_context.command_encoder().pop_debug_group(); + pass_span.end(render_context.command_encoder()); } + time_span.end(render_context.command_encoder()); + Ok(()) } } diff --git a/crates/bevy_pbr/src/render/gpu_preprocess.rs b/crates/bevy_pbr/src/render/gpu_preprocess.rs index 5356c7580e706..b42a4405dcce5 100644 --- a/crates/bevy_pbr/src/render/gpu_preprocess.rs +++ b/crates/bevy_pbr/src/render/gpu_preprocess.rs @@ -26,9 +26,6 @@ use bevy_ecs::{ system::{lifetimeless::Read, Commands, Query, Res, ResMut}, world::{FromWorld, World}, }; -use bevy_render::batching::gpu_preprocessing::{ - GpuPreprocessingMode, IndirectParametersGpuMetadata, UntypedPhaseIndirectParametersBuffers, -}; use bevy_render::{ batching::gpu_preprocessing::{ BatchedInstanceBuffers, GpuOcclusionCullingWorkItemBuffers, GpuPreprocessingSupport, @@ -52,6 +49,12 @@ use bevy_render::{ view::{ExtractedView, NoIndirectDrawing, ViewUniform, ViewUniformOffset, ViewUniforms}, Render, RenderApp, RenderSystems, }; +use bevy_render::{ + batching::gpu_preprocessing::{ + GpuPreprocessingMode, IndirectParametersGpuMetadata, UntypedPhaseIndirectParametersBuffers, + }, + diagnostic::RecordDiagnostics, +}; use bevy_utils::TypeIdMap; use bitflags::bitflags; use smallvec::{smallvec, SmallVec}; @@ -601,6 +604,8 @@ impl Node for EarlyGpuPreprocessNode { render_context: &mut RenderContext<'w>, world: &'w World, ) -> Result<(), NodeRunError> { + let diagnostics = render_context.diagnostic_recorder(); + // Grab the [`BatchedInstanceBuffers`]. let batched_instance_buffers = world.resource::>(); @@ -615,6 +620,7 @@ impl Node for EarlyGpuPreprocessNode { label: Some("early mesh preprocessing"), timestamp_writes: None, }); + let pass_span = diagnostics.time_span(&mut compute_pass, "early mesh preprocessing"); let mut all_views: SmallVec<[_; 8]> = SmallVec::new(); all_views.push(graph.view_entity()); @@ -790,6 +796,8 @@ impl Node for EarlyGpuPreprocessNode { } } + pass_span.end(&mut compute_pass); + Ok(()) } } @@ -837,6 +845,8 @@ impl Node for LateGpuPreprocessNode { render_context: &mut RenderContext<'w>, world: &'w World, ) -> Result<(), NodeRunError> { + let diagnostics = render_context.diagnostic_recorder(); + // Grab the [`BatchedInstanceBuffers`]. let batched_instance_buffers = world.resource::>(); @@ -851,6 +861,7 @@ impl Node for LateGpuPreprocessNode { label: Some("late mesh preprocessing"), timestamp_writes: None, }); + let pass_span = diagnostics.time_span(&mut compute_pass, "late mesh preprocessing"); // Run the compute passes. for (view, bind_groups, view_uniform_offset) in self.view_query.iter_manual(world) { @@ -959,6 +970,8 @@ impl Node for LateGpuPreprocessNode { } } + pass_span.end(&mut compute_pass); + Ok(()) } } @@ -1053,6 +1066,8 @@ fn run_build_indirect_parameters_node( return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let pipeline_cache = world.resource::(); let indirect_parameters_buffers = world.resource::(); @@ -1063,6 +1078,7 @@ fn run_build_indirect_parameters_node( label: Some(label), timestamp_writes: None, }); + let pass_span = diagnostics.time_span(&mut compute_pass, label); // Fetch the pipeline. let ( @@ -1082,6 +1098,7 @@ fn run_build_indirect_parameters_node( ) else { warn!("The build indirect parameters pipelines weren't ready"); + pass_span.end(&mut compute_pass); return Ok(()); }; @@ -1096,6 +1113,7 @@ fn run_build_indirect_parameters_node( ) else { // This will happen while the pipeline is being compiled and is fine. + pass_span.end(&mut compute_pass); return Ok(()); }; @@ -1167,6 +1185,8 @@ fn run_build_indirect_parameters_node( } } + pass_span.end(&mut compute_pass); + Ok(()) } diff --git a/crates/bevy_pbr/src/ssao/mod.rs b/crates/bevy_pbr/src/ssao/mod.rs index 9224374c60fdb..4d73a3701a094 100644 --- a/crates/bevy_pbr/src/ssao/mod.rs +++ b/crates/bevy_pbr/src/ssao/mod.rs @@ -18,6 +18,7 @@ use bevy_ecs::{ use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ camera::{ExtractedCamera, TemporalJitter}, + diagnostic::RecordDiagnostics, extract_component::ExtractComponent, globals::{GlobalsBuffer, GlobalsUniform}, prelude::Camera, @@ -239,16 +240,18 @@ impl ViewNode for SsaoNode { return Ok(()); }; - render_context.command_encoder().push_debug_group("ssao"); + let diagnostics = render_context.diagnostic_recorder(); + + let command_encoder = render_context.command_encoder(); + command_encoder.push_debug_group("ssao"); + let time_span = diagnostics.time_span(command_encoder, "ssao"); { let mut preprocess_depth_pass = - render_context - .command_encoder() - .begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_preprocess_depth_pass"), - timestamp_writes: None, - }); + command_encoder.begin_compute_pass(&ComputePassDescriptor { + label: Some("ssao_preprocess_depth_pass"), + timestamp_writes: None, + }); preprocess_depth_pass.set_pipeline(preprocess_depth_pipeline); preprocess_depth_pass.set_bind_group(0, &bind_groups.preprocess_depth_bind_group, &[]); preprocess_depth_pass.set_bind_group( @@ -264,13 +267,10 @@ impl ViewNode for SsaoNode { } { - let mut ssao_pass = - render_context - .command_encoder() - .begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_ssao_pass"), - timestamp_writes: None, - }); + let mut ssao_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { + label: Some("ssao_ssao_pass"), + timestamp_writes: None, + }); ssao_pass.set_pipeline(ssao_pipeline); ssao_pass.set_bind_group(0, &bind_groups.ssao_bind_group, &[]); ssao_pass.set_bind_group( @@ -283,12 +283,10 @@ impl ViewNode for SsaoNode { { let mut spatial_denoise_pass = - render_context - .command_encoder() - .begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_spatial_denoise_pass"), - timestamp_writes: None, - }); + command_encoder.begin_compute_pass(&ComputePassDescriptor { + label: Some("ssao_spatial_denoise_pass"), + timestamp_writes: None, + }); spatial_denoise_pass.set_pipeline(spatial_denoise_pipeline); spatial_denoise_pass.set_bind_group(0, &bind_groups.spatial_denoise_bind_group, &[]); spatial_denoise_pass.set_bind_group( @@ -303,7 +301,8 @@ impl ViewNode for SsaoNode { ); } - render_context.command_encoder().pop_debug_group(); + time_span.end(command_encoder); + command_encoder.pop_debug_group(); Ok(()) } } diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index e4cc850d81ffd..ed86322fb130d 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -23,7 +23,7 @@ use bevy_ecs::{ }; use bevy_image::BevyDefault as _; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::render_graph::RenderGraph; +use bevy_render::{diagnostic::RecordDiagnostics, render_graph::RenderGraph}; use bevy_render::{ extract_component::{ExtractComponent, ExtractComponentPlugin}, render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner}, @@ -296,6 +296,8 @@ impl ViewNode for ScreenSpaceReflectionsNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + // Set up a standard pair of postprocessing textures. let postprocess = view_target.post_process_write(); @@ -324,6 +326,7 @@ impl ViewNode for ScreenSpaceReflectionsNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "SSR pass"); // Set bind groups. render_pass.set_render_pipeline(render_pipeline); @@ -344,6 +347,8 @@ impl ViewNode for ScreenSpaceReflectionsNode { render_pass.set_bind_group(1, &ssr_bind_group, &[]); render_pass.draw(0..3, 0..1); + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_pbr/src/volumetric_fog/render.rs b/crates/bevy_pbr/src/volumetric_fog/render.rs index 07012a72e2f59..96d0d637511e8 100644 --- a/crates/bevy_pbr/src/volumetric_fog/render.rs +++ b/crates/bevy_pbr/src/volumetric_fog/render.rs @@ -20,6 +20,7 @@ use bevy_ecs::{ use bevy_image::{BevyDefault, Image}; use bevy_math::{vec4, Mat3A, Mat4, Vec3, Vec3A, Vec4, Vec4Swizzles as _}; use bevy_render::{ + diagnostic::RecordDiagnostics, mesh::{ allocator::MeshAllocator, Mesh, MeshVertexBufferLayoutRef, RenderMesh, RenderMeshBufferInfo, }, @@ -370,6 +371,13 @@ impl ViewNode for VolumetricFogNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + render_context + .command_encoder() + .push_debug_group("volumetric lighting pass"); + let time_span = + diagnostics.time_span(render_context.command_encoder(), "volumetric lighting pass"); + let render_meshes = world.resource::>(); for view_fog_volume in view_fog_volumes.iter() { @@ -503,6 +511,9 @@ impl ViewNode for VolumetricFogNode { } } + time_span.end(render_context.command_encoder()); + render_context.command_encoder().pop_debug_group(); + Ok(()) } } diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index 7b748c2535ff1..9bb805aaa2c2b 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -24,10 +24,10 @@ use bevy_platform::{ hash::FixedHasher, }; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::camera::extract_cameras; use bevy_render::{ batching::gpu_preprocessing::{GpuPreprocessingMode, GpuPreprocessingSupport}, - camera::ExtractedCamera, + camera::{extract_cameras, ExtractedCamera}, + diagnostic::RecordDiagnostics, extract_resource::ExtractResource, mesh::{ allocator::{MeshAllocator, SlabId}, @@ -394,6 +394,8 @@ impl ViewNode for Wireframe3dNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { label: Some("wireframe_3d_pass"), color_attachments: &[Some(target.get_color_attachment())], @@ -401,6 +403,7 @@ impl ViewNode for Wireframe3dNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_3d_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -411,6 +414,8 @@ impl ViewNode for Wireframe3dNode { return Err(NodeRunError::DrawError(err)); } + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_sprite/src/mesh2d/wireframe2d.rs b/crates/bevy_sprite/src/mesh2d/wireframe2d.rs index 468a47f6bbf8f..c15570912d31e 100644 --- a/crates/bevy_sprite/src/mesh2d/wireframe2d.rs +++ b/crates/bevy_sprite/src/mesh2d/wireframe2d.rs @@ -27,6 +27,7 @@ use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ batching::gpu_preprocessing::GpuPreprocessingMode, camera::ExtractedCamera, + diagnostic::RecordDiagnostics, extract_resource::ExtractResource, mesh::{ allocator::{MeshAllocator, SlabId}, @@ -393,6 +394,8 @@ impl ViewNode for Wireframe2dNode { return Ok(()); }; + let diagnostics = render_context.diagnostic_recorder(); + let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { label: Some("wireframe_2d_pass"), color_attachments: &[Some(target.get_color_attachment())], @@ -400,6 +403,7 @@ impl ViewNode for Wireframe2dNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_2d_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -410,6 +414,8 @@ impl ViewNode for Wireframe2dNode { return Err(NodeRunError::DrawError(err)); } + pass_span.end(&mut render_pass); + Ok(()) } } diff --git a/crates/bevy_ui/src/render/render_pass.rs b/crates/bevy_ui/src/render/render_pass.rs index e0b3b20fab2b2..e4973ea5253d5 100644 --- a/crates/bevy_ui/src/render/render_pass.rs +++ b/crates/bevy_ui/src/render/render_pass.rs @@ -7,7 +7,6 @@ use bevy_ecs::{ system::{lifetimeless::*, SystemParamItem}, }; use bevy_math::FloatOrd; -use bevy_render::sync_world::MainEntity; use bevy_render::{ camera::ExtractedCamera, render_graph::*, @@ -16,6 +15,7 @@ use bevy_render::{ renderer::*, view::*, }; +use bevy_render::{diagnostic::RecordDiagnostics, sync_world::MainEntity}; use tracing::error; pub struct UiPassNode { @@ -78,6 +78,8 @@ impl Node for UiPassNode { return Ok(()); } + let diagnostics = render_context.diagnostic_recorder(); + // use the UI view entity if it is defined let view_entity = if let Ok(ui_camera_view) = self .ui_camera_view_query @@ -94,6 +96,8 @@ impl Node for UiPassNode { timestamp_writes: None, occlusion_query_set: None, }); + let pass_span = diagnostics.pass_span(&mut render_pass, "ui_pass"); + if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); } @@ -101,6 +105,8 @@ impl Node for UiPassNode { error!("Error encountered while rendering the ui phase {err:?}"); } + pass_span.end(&mut render_pass); + Ok(()) } } From 508571139239ddbf5baeabfd1c2fb49fcb07010c Mon Sep 17 00:00:00 2001 From: jf908 Date: Mon, 12 May 2025 19:31:11 +0100 Subject: [PATCH 02/11] Make imports consistent --- crates/bevy_pbr/src/deferred/mod.rs | 2 +- crates/bevy_pbr/src/render/gpu_preprocess.rs | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/crates/bevy_pbr/src/deferred/mod.rs b/crates/bevy_pbr/src/deferred/mod.rs index d692e6604288e..b138fd5705841 100644 --- a/crates/bevy_pbr/src/deferred/mod.rs +++ b/crates/bevy_pbr/src/deferred/mod.rs @@ -21,8 +21,8 @@ use bevy_core_pipeline::{ }; use bevy_ecs::{prelude::*, query::QueryItem}; use bevy_image::BevyDefault as _; -use bevy_render::diagnostic::RecordDiagnostics; use bevy_render::{ + diagnostic::RecordDiagnostics, extract_component::{ ComponentUniforms, ExtractComponent, ExtractComponentPlugin, UniformComponentPlugin, }, diff --git a/crates/bevy_pbr/src/render/gpu_preprocess.rs b/crates/bevy_pbr/src/render/gpu_preprocess.rs index b42a4405dcce5..9767050af3736 100644 --- a/crates/bevy_pbr/src/render/gpu_preprocess.rs +++ b/crates/bevy_pbr/src/render/gpu_preprocess.rs @@ -28,12 +28,14 @@ use bevy_ecs::{ }; use bevy_render::{ batching::gpu_preprocessing::{ - BatchedInstanceBuffers, GpuOcclusionCullingWorkItemBuffers, GpuPreprocessingSupport, - IndirectBatchSet, IndirectParametersBuffers, IndirectParametersCpuMetadata, - IndirectParametersIndexed, IndirectParametersNonIndexed, - LatePreprocessWorkItemIndirectParameters, PreprocessWorkItem, PreprocessWorkItemBuffers, - UntypedPhaseBatchedInstanceBuffers, + BatchedInstanceBuffers, GpuOcclusionCullingWorkItemBuffers, GpuPreprocessingMode, + GpuPreprocessingSupport, IndirectBatchSet, IndirectParametersBuffers, + IndirectParametersCpuMetadata, IndirectParametersGpuMetadata, IndirectParametersIndexed, + IndirectParametersNonIndexed, LatePreprocessWorkItemIndirectParameters, PreprocessWorkItem, + PreprocessWorkItemBuffers, UntypedPhaseBatchedInstanceBuffers, + UntypedPhaseIndirectParametersBuffers, }, + diagnostic::RecordDiagnostics, experimental::occlusion_culling::OcclusionCulling, render_graph::{Node, NodeRunError, RenderGraphApp, RenderGraphContext}, render_resource::{ @@ -49,12 +51,6 @@ use bevy_render::{ view::{ExtractedView, NoIndirectDrawing, ViewUniform, ViewUniformOffset, ViewUniforms}, Render, RenderApp, RenderSystems, }; -use bevy_render::{ - batching::gpu_preprocessing::{ - GpuPreprocessingMode, IndirectParametersGpuMetadata, UntypedPhaseIndirectParametersBuffers, - }, - diagnostic::RecordDiagnostics, -}; use bevy_utils::TypeIdMap; use bitflags::bitflags; use smallvec::{smallvec, SmallVec}; From 52ebc60eaa25354b1ddf3eaf9a923a1e79a935ca Mon Sep 17 00:00:00 2001 From: jf908 Date: Mon, 12 May 2025 19:33:06 +0100 Subject: [PATCH 03/11] Ditto --- crates/bevy_pbr/src/ssr/mod.rs | 6 ++++-- crates/bevy_ui/src/render/render_pass.rs | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index ed86322fb130d..c6543fc7f3a30 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -23,10 +23,12 @@ use bevy_ecs::{ }; use bevy_image::BevyDefault as _; use bevy_reflect::{std_traits::ReflectDefault, Reflect}; -use bevy_render::{diagnostic::RecordDiagnostics, render_graph::RenderGraph}; use bevy_render::{ + diagnostic::RecordDiagnostics, extract_component::{ExtractComponent, ExtractComponentPlugin}, - render_graph::{NodeRunError, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner}, + render_graph::{ + NodeRunError, RenderGraph, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner, + }, render_resource::{ binding_types, AddressMode, BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries, CachedRenderPipelineId, ColorTargetState, ColorWrites, DynamicUniformBuffer, FilterMode, diff --git a/crates/bevy_ui/src/render/render_pass.rs b/crates/bevy_ui/src/render/render_pass.rs index e4973ea5253d5..da081386f94ea 100644 --- a/crates/bevy_ui/src/render/render_pass.rs +++ b/crates/bevy_ui/src/render/render_pass.rs @@ -9,13 +9,14 @@ use bevy_ecs::{ use bevy_math::FloatOrd; use bevy_render::{ camera::ExtractedCamera, + diagnostic::RecordDiagnostics, render_graph::*, render_phase::*, render_resource::{CachedRenderPipelineId, RenderPassDescriptor}, renderer::*, + sync_world::MainEntity, view::*, }; -use bevy_render::{diagnostic::RecordDiagnostics, sync_world::MainEntity}; use tracing::error; pub struct UiPassNode { From 82029fb7b82db82888ced83798e2d96c953ab89d Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 8 Jul 2025 01:37:06 +0100 Subject: [PATCH 04/11] Fix imports after merge --- crates/bevy_pbr/src/ssr/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index 35fc2a3511709..dee95ff3e42f2 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -26,6 +26,7 @@ use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ diagnostic::RecordDiagnostics, extract_component::{ExtractComponent, ExtractComponentPlugin}, + load_shader_library, render_graph::{ NodeRunError, RenderGraph, RenderGraphApp, RenderGraphContext, ViewNode, ViewNodeRunner, }, @@ -41,7 +42,6 @@ use bevy_render::{ view::{ExtractedView, Msaa, ViewTarget, ViewUniformOffset}, Render, RenderApp, RenderSystems, }; -use bevy_render::{load_shader_library, render_graph::RenderGraph}; use bevy_utils::{once, prelude::default}; use tracing::info; From 91c33dcf1eb8e778a0c654745565cfb4f3d5de33 Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 8 Jul 2025 01:45:23 +0100 Subject: [PATCH 05/11] Fix imports after merge --- crates/bevy_pbr/src/ssr/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index 05a1367e6ec3a..b69cb9a494a3c 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -26,7 +26,10 @@ use bevy_reflect::{std_traits::ReflectDefault, Reflect}; use bevy_render::{ diagnostic::RecordDiagnostics, extract_component::{ExtractComponent, ExtractComponentPlugin}, - render_graph::{NodeRunError, RenderGraphContext, RenderGraphExt, ViewNode, ViewNodeRunner}, + load_shader_library, + render_graph::{ + NodeRunError, RenderGraph, RenderGraphContext, RenderGraphExt, ViewNode, ViewNodeRunner, + }, render_resource::{ binding_types, AddressMode, BindGroupEntries, BindGroupLayout, BindGroupLayoutEntries, CachedRenderPipelineId, ColorTargetState, ColorWrites, DynamicUniformBuffer, FilterMode, From fb3832231d1971c46bee0874b04e3917cefce9f8 Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 8 Jul 2025 01:56:02 +0100 Subject: [PATCH 06/11] Fix merge mistake --- crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs b/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs index 5d66bf5dc3b7e..f29b8b3f93b6f 100644 --- a/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs +++ b/crates/bevy_pbr/src/meshlet/visibility_buffer_raster_node.rs @@ -110,6 +110,10 @@ impl Node for MeshletVisibilityBufferRasterPassNode { render_context .command_encoder() .push_debug_group("meshlet_visibility_buffer_raster"); + let time_span = diagnostics.time_span( + render_context.command_encoder(), + "meshlet_visibility_buffer_raster", + ); let resource_manager = world.get_resource::().unwrap(); render_context.command_encoder().clear_buffer( From de3bba063d7fc7ed2009e0b9542923aa783525b1 Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 5 Aug 2025 21:55:08 +0100 Subject: [PATCH 07/11] Rename time spans to a consistent format Renamed time spans + debug labels of all the render passes so that they are all snake case, and they only use the _pass suffix for the "main" passes --- crates/bevy_anti_aliasing/src/fxaa/node.rs | 4 ++-- crates/bevy_anti_aliasing/src/taa/mod.rs | 4 ++-- crates/bevy_core_pipeline/src/auto_exposure/node.rs | 4 ++-- .../src/core_2d/main_opaque_pass_2d_node.rs | 4 ++-- .../src/core_2d/main_transparent_pass_2d_node.rs | 4 ++-- .../src/core_3d/main_opaque_pass_3d_node.rs | 4 ++-- .../src/core_3d/main_transmissive_pass_3d_node.rs | 6 +++--- .../src/core_3d/main_transparent_pass_3d_node.rs | 4 ++-- .../src/deferred/copy_lighting_id.rs | 4 ++-- crates/bevy_core_pipeline/src/motion_blur/node.rs | 4 ++-- crates/bevy_core_pipeline/src/oit/resolve/node.rs | 4 ++-- crates/bevy_core_pipeline/src/post_process/mod.rs | 4 ++-- crates/bevy_core_pipeline/src/tonemapping/node.rs | 4 ++-- crates/bevy_core_pipeline/src/upscaling/node.rs | 4 ++-- crates/bevy_pbr/src/atmosphere/node.rs | 8 ++++---- crates/bevy_pbr/src/deferred/mod.rs | 4 ++-- crates/bevy_pbr/src/light_probe/generate.rs | 13 ++++++------- crates/bevy_pbr/src/meshlet/material_shade_nodes.rs | 13 +++++++------ crates/bevy_pbr/src/render/gpu_preprocess.rs | 8 ++++---- crates/bevy_pbr/src/ssr/mod.rs | 4 ++-- crates/bevy_pbr/src/volumetric_fog/render.rs | 4 ++-- crates/bevy_pbr/src/wireframe.rs | 4 ++-- crates/bevy_sprite/src/mesh2d/wireframe2d.rs | 4 ++-- crates/bevy_ui_render/src/render_pass.rs | 4 ++-- 24 files changed, 62 insertions(+), 62 deletions(-) diff --git a/crates/bevy_anti_aliasing/src/fxaa/node.rs b/crates/bevy_anti_aliasing/src/fxaa/node.rs index 2d093f6782e05..54d2afd33e736 100644 --- a/crates/bevy_anti_aliasing/src/fxaa/node.rs +++ b/crates/bevy_anti_aliasing/src/fxaa/node.rs @@ -64,7 +64,7 @@ impl ViewNode for FxaaNode { }; let pass_descriptor = RenderPassDescriptor { - label: Some("fxaa_pass"), + label: Some("fxaa"), color_attachments: &[Some(RenderPassColorAttachment { view: destination, depth_slice: None, @@ -79,7 +79,7 @@ impl ViewNode for FxaaNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); - let pass_span = diagnostics.pass_span(&mut render_pass, "fxaa_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "fxaa"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, bind_group, &[]); diff --git a/crates/bevy_anti_aliasing/src/taa/mod.rs b/crates/bevy_anti_aliasing/src/taa/mod.rs index dfb3048607399..263ebd00436ff 100644 --- a/crates/bevy_anti_aliasing/src/taa/mod.rs +++ b/crates/bevy_anti_aliasing/src/taa/mod.rs @@ -202,7 +202,7 @@ impl ViewNode for TemporalAntiAliasNode { { let mut taa_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("taa_pass"), + label: Some("taa"), color_attachments: &[ Some(RenderPassColorAttachment { view: view_target.destination, @@ -221,7 +221,7 @@ impl ViewNode for TemporalAntiAliasNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut taa_pass, "taa_pass"); + let pass_span = diagnostics.pass_span(&mut taa_pass, "taa"); taa_pass.set_render_pipeline(taa_pipeline); taa_pass.set_bind_group(0, &taa_bind_group, &[]); diff --git a/crates/bevy_core_pipeline/src/auto_exposure/node.rs b/crates/bevy_core_pipeline/src/auto_exposure/node.rs index 57cdcd6d42ed6..c7f88dfb28d6f 100644 --- a/crates/bevy_core_pipeline/src/auto_exposure/node.rs +++ b/crates/bevy_core_pipeline/src/auto_exposure/node.rs @@ -125,10 +125,10 @@ impl Node for AutoExposureNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("auto_exposure_pass"), + label: Some("auto_exposure"), timestamp_writes: None, }); - let pass_span = diagnostics.time_span(&mut compute_pass, "auto_exposure_pass"); + let pass_span = diagnostics.time_span(&mut compute_pass, "auto_exposure"); compute_pass.set_bind_group(0, &compute_bind_group, &[view_uniform_offset.offset]); compute_pass.set_pipeline(histogram_pipeline); diff --git a/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs b/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs index e8cd0c65c6888..c4ab30474b3bd 100644 --- a/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs +++ b/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs @@ -65,14 +65,14 @@ impl ViewNode for MainOpaquePass2dNode { // Render pass setup let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_opaque_pass_2d"), + label: Some("main_opaque_2d_pass"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, occlusion_query_set: None, }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_pass_2d"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_2d_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs b/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs index 4054283a5738a..72715d9fe9bf1 100644 --- a/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs +++ b/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs @@ -66,7 +66,7 @@ impl ViewNode for MainTransparentPass2dNode { let _main_pass_2d = info_span!("main_transparent_pass_2d").entered(); let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_transparent_pass_2d"), + label: Some("main_transparent_2d_pass"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, @@ -74,7 +74,7 @@ impl ViewNode for MainTransparentPass2dNode { }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_pass_2d"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_2d_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs index 0ee9144a954d1..dc9151a51a962 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs @@ -83,14 +83,14 @@ impl ViewNode for MainOpaquePass3dNode { // Render pass setup let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_opaque_pass_3d"), + label: Some("main_opaque_3d_pass"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, occlusion_query_set: None, }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_pass_3d"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_3d_pass"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) diff --git a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs index 37d359785bfd6..d742923836088 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs @@ -59,7 +59,7 @@ impl ViewNode for MainTransmissivePass3dNode { let physical_target_size = camera.physical_target_size.unwrap(); let render_pass_descriptor = RenderPassDescriptor { - label: Some("main_transmissive_pass_3d"), + label: Some("main_transmissive_3d_pass"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(depth.get_attachment(StoreOp::Store)), timestamp_writes: None, @@ -99,7 +99,7 @@ impl ViewNode for MainTransmissivePass3dNode { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor.clone()); let pass_span = - diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); + diagnostics.pass_span(&mut render_pass, "main_transmissive_3d_pass"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -118,7 +118,7 @@ impl ViewNode for MainTransmissivePass3dNode { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor); let pass_span = - diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); + diagnostics.pass_span(&mut render_pass, "main_transmissive_3d_pass"); if let Some(viewport) = Viewport::from_viewport_and_override( camera.viewport.as_ref(), diff --git a/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs index bbe14578b0903..240acef662971 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs @@ -55,7 +55,7 @@ impl ViewNode for MainTransparentPass3dNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("main_transparent_pass_3d"), + label: Some("main_transparent_3d_pass"), color_attachments: &[Some(target.get_color_attachment())], // NOTE: For the transparent pass we load the depth buffer. There should be no // need to write to it, but store is set to `true` as a workaround for issue #3776, @@ -68,7 +68,7 @@ impl ViewNode for MainTransparentPass3dNode { occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_pass_3d"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_3d_pass"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) diff --git a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs index b947cf37433a5..68d1634160f8a 100644 --- a/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs +++ b/crates/bevy_core_pipeline/src/deferred/copy_lighting_id.rs @@ -87,7 +87,7 @@ impl ViewNode for CopyDeferredLightingIdNode { ); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("copy_deferred_lighting_id_pass"), + label: Some("copy_deferred_lighting_id"), color_attachments: &[], depth_stencil_attachment: Some(RenderPassDepthStencilAttachment { view: &deferred_lighting_id_depth_texture.texture.default_view, @@ -101,7 +101,7 @@ impl ViewNode for CopyDeferredLightingIdNode { occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "copy_deferred_lighting_id_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "copy_deferred_lighting_id"); render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[]); diff --git a/crates/bevy_core_pipeline/src/motion_blur/node.rs b/crates/bevy_core_pipeline/src/motion_blur/node.rs index 80250261adc3f..00e4d4df873d5 100644 --- a/crates/bevy_core_pipeline/src/motion_blur/node.rs +++ b/crates/bevy_core_pipeline/src/motion_blur/node.rs @@ -84,7 +84,7 @@ impl ViewNode for MotionBlurNode { ); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("motion_blur_pass"), + label: Some("motion_blur"), color_attachments: &[Some(RenderPassColorAttachment { view: post_process.destination, depth_slice: None, @@ -95,7 +95,7 @@ impl ViewNode for MotionBlurNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "motion_blur_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "motion_blur"); render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[]); diff --git a/crates/bevy_core_pipeline/src/oit/resolve/node.rs b/crates/bevy_core_pipeline/src/oit/resolve/node.rs index 00e4c10450786..b09ad63d21962 100644 --- a/crates/bevy_core_pipeline/src/oit/resolve/node.rs +++ b/crates/bevy_core_pipeline/src/oit/resolve/node.rs @@ -60,13 +60,13 @@ impl ViewNode for OitResolveNode { ); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("oit_resolve_pass"), + label: Some("oit_resolve"), color_attachments: &[Some(view_target.get_color_attachment())], depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "oit_resolve_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "oit_resolve"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) diff --git a/crates/bevy_core_pipeline/src/post_process/mod.rs b/crates/bevy_core_pipeline/src/post_process/mod.rs index 2c41e3bb48951..229d4e32c3aa6 100644 --- a/crates/bevy_core_pipeline/src/post_process/mod.rs +++ b/crates/bevy_core_pipeline/src/post_process/mod.rs @@ -379,7 +379,7 @@ impl ViewNode for PostProcessingNode { let post_process = view_target.post_process_write(); let pass_descriptor = RenderPassDescriptor { - label: Some("postprocessing pass"), + label: Some("postprocessing"), color_attachments: &[Some(RenderPassColorAttachment { view: post_process.destination, depth_slice: None, @@ -406,7 +406,7 @@ impl ViewNode for PostProcessingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); - let pass_span = diagnostics.pass_span(&mut render_pass, "postprocessing pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "postprocessing"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, &bind_group, &[**post_processing_uniform_buffer_offsets]); diff --git a/crates/bevy_core_pipeline/src/tonemapping/node.rs b/crates/bevy_core_pipeline/src/tonemapping/node.rs index 041dd756a3c52..d14f1251fc4b6 100644 --- a/crates/bevy_core_pipeline/src/tonemapping/node.rs +++ b/crates/bevy_core_pipeline/src/tonemapping/node.rs @@ -117,7 +117,7 @@ impl ViewNode for TonemappingNode { }; let pass_descriptor = RenderPassDescriptor { - label: Some("tonemapping_pass"), + label: Some("tonemapping"), color_attachments: &[Some(RenderPassColorAttachment { view: destination, depth_slice: None, @@ -135,7 +135,7 @@ impl ViewNode for TonemappingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); - let pass_span = diagnostics.pass_span(&mut render_pass, "tonemapping_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "tonemapping"); render_pass.set_pipeline(pipeline); render_pass.set_bind_group(0, bind_group, &[view_uniform_offset.offset]); diff --git a/crates/bevy_core_pipeline/src/upscaling/node.rs b/crates/bevy_core_pipeline/src/upscaling/node.rs index 5cb91cd3cc29d..93fc7d447856b 100644 --- a/crates/bevy_core_pipeline/src/upscaling/node.rs +++ b/crates/bevy_core_pipeline/src/upscaling/node.rs @@ -70,7 +70,7 @@ impl ViewNode for UpscalingNode { }; let pass_descriptor = RenderPassDescriptor { - label: Some("upscaling_pass"), + label: Some("upscaling"), color_attachments: &[Some( target.out_texture_color_attachment(converted_clear_color), )], @@ -82,7 +82,7 @@ impl ViewNode for UpscalingNode { let mut render_pass = render_context .command_encoder() .begin_render_pass(&pass_descriptor); - let pass_span = diagnostics.pass_span(&mut render_pass, "upscaling_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "upscaling"); if let Some(camera) = camera { if let Some(viewport) = &camera.viewport { diff --git a/crates/bevy_pbr/src/atmosphere/node.rs b/crates/bevy_pbr/src/atmosphere/node.rs index 8008e0c25aedb..93c1a33ae9db2 100644 --- a/crates/bevy_pbr/src/atmosphere/node.rs +++ b/crates/bevy_pbr/src/atmosphere/node.rs @@ -76,10 +76,10 @@ impl ViewNode for AtmosphereLutsNode { let command_encoder = render_context.command_encoder(); let mut luts_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { - label: Some("atmosphere_luts_pass"), + label: Some("atmosphere_luts"), timestamp_writes: None, }); - let pass_span = diagnostics.time_span(&mut luts_pass, "atmosphere_luts_pass"); + let pass_span = diagnostics.time_span(&mut luts_pass, "atmosphere_luts"); fn dispatch_2d(compute_pass: &mut ComputePass, size: UVec2) { const WORKGROUP_SIZE: u32 = 16; @@ -203,13 +203,13 @@ impl ViewNode for RenderSkyNode { render_context .command_encoder() .begin_render_pass(&RenderPassDescriptor { - label: Some("render_sky_pass"), + label: Some("render_sky"), color_attachments: &[Some(view_target.get_color_attachment())], depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_sky_pass, "render_sky_pass"); + let pass_span = diagnostics.pass_span(&mut render_sky_pass, "render_sky"); render_sky_pass.set_pipeline(render_sky_pipeline); render_sky_pass.set_bind_group( diff --git a/crates/bevy_pbr/src/deferred/mod.rs b/crates/bevy_pbr/src/deferred/mod.rs index 4730bf3b29008..d1ca01fd1c7c5 100644 --- a/crates/bevy_pbr/src/deferred/mod.rs +++ b/crates/bevy_pbr/src/deferred/mod.rs @@ -187,7 +187,7 @@ impl ViewNode for DeferredOpaquePass3dPbrLightingNode { ); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("deferred_lighting_pass"), + label: Some("deferred_lighting"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(RenderPassDepthStencilAttachment { view: &deferred_lighting_id_depth_texture.texture.default_view, @@ -200,7 +200,7 @@ impl ViewNode for DeferredOpaquePass3dPbrLightingNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "deferred_lighting_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "deferred_lighting"); render_pass.set_render_pipeline(pipeline); render_pass.set_bind_group( diff --git a/crates/bevy_pbr/src/light_probe/generate.rs b/crates/bevy_pbr/src/light_probe/generate.rs index 85213119dc625..1cb0f91a09f77 100644 --- a/crates/bevy_pbr/src/light_probe/generate.rs +++ b/crates/bevy_pbr/src/light_probe/generate.rs @@ -921,11 +921,11 @@ impl Node for DownsamplingNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("lightprobe_copy_pass"), + label: Some("lightprobe_copy"), timestamp_writes: None, }); - let pass_span = diagnostics.pass_span(&mut compute_pass, "lightprobe_copy_pass"); + let pass_span = diagnostics.pass_span(&mut compute_pass, "lightprobe_copy"); compute_pass.set_pipeline(copy_pipeline); compute_pass.set_bind_group(0, &bind_groups.copy, &[]); @@ -1038,12 +1038,11 @@ impl Node for FilteringNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("lightprobe_radiance_map_pass"), + label: Some("lightprobe_radiance_map"), timestamp_writes: None, }); - let pass_span = - diagnostics.pass_span(&mut compute_pass, "lightprobe_radiance_map_pass"); + let pass_span = diagnostics.pass_span(&mut compute_pass, "lightprobe_radiance_map"); compute_pass.set_pipeline(radiance_pipeline); @@ -1072,12 +1071,12 @@ impl Node for FilteringNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("lightprobe_irradiance_map_pass"), + label: Some("lightprobe_irradiance_map"), timestamp_writes: None, }); let irr_span = - diagnostics.pass_span(&mut compute_pass, "lightprobe_irradiance_map_pass"); + diagnostics.pass_span(&mut compute_pass, "lightprobe_irradiance_map"); compute_pass.set_pipeline(irradiance_pipeline); compute_pass.set_bind_group(0, &bind_groups.irradiance, &[]); diff --git a/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs b/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs index 604e9905aabd8..9c0b4c4843fcf 100644 --- a/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs +++ b/crates/bevy_pbr/src/meshlet/material_shade_nodes.rs @@ -93,7 +93,7 @@ impl ViewNode for MeshletMainOpaquePass3dNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("meshlet_main_opaque_pass_3d"), + label: Some("meshlet_material_opaque_3d_pass"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(RenderPassDepthStencilAttachment { view: &meshlet_material_depth.default_view, @@ -106,7 +106,7 @@ impl ViewNode for MeshletMainOpaquePass3dNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_main_opaque_pass_3d"); + let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_material_opaque_3d_pass"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) { @@ -221,7 +221,7 @@ impl ViewNode for MeshletPrepassNode { ]; let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("meshlet_prepass"), + label: Some("meshlet_material_prepass"), color_attachments: &color_attachments, depth_stencil_attachment: Some(RenderPassDepthStencilAttachment { view: &meshlet_material_depth.default_view, @@ -234,7 +234,7 @@ impl ViewNode for MeshletPrepassNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_prepass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_material_prepass"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) { @@ -359,7 +359,7 @@ impl ViewNode for MeshletDeferredGBufferPrepassNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("meshlet_deferred_prepass"), + label: Some("meshlet_material_deferred_prepass"), color_attachments: &color_attachments, depth_stencil_attachment: Some(RenderPassDepthStencilAttachment { view: &meshlet_material_depth.default_view, @@ -372,7 +372,8 @@ impl ViewNode for MeshletDeferredGBufferPrepassNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "meshlet_deferred_prepass"); + let pass_span = + diagnostics.pass_span(&mut render_pass, "meshlet_material_deferred_prepass"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) { diff --git a/crates/bevy_pbr/src/render/gpu_preprocess.rs b/crates/bevy_pbr/src/render/gpu_preprocess.rs index 78d539f2c26ee..6d3ae293f2a6b 100644 --- a/crates/bevy_pbr/src/render/gpu_preprocess.rs +++ b/crates/bevy_pbr/src/render/gpu_preprocess.rs @@ -594,10 +594,10 @@ impl Node for EarlyGpuPreprocessNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("early mesh preprocessing"), + label: Some("early_mesh_preprocessing"), timestamp_writes: None, }); - let pass_span = diagnostics.time_span(&mut compute_pass, "early mesh preprocessing"); + let pass_span = diagnostics.time_span(&mut compute_pass, "early_mesh_preprocessing"); let mut all_views: SmallVec<[_; 8]> = SmallVec::new(); all_views.push(graph.view_entity()); @@ -835,10 +835,10 @@ impl Node for LateGpuPreprocessNode { render_context .command_encoder() .begin_compute_pass(&ComputePassDescriptor { - label: Some("late mesh preprocessing"), + label: Some("late_mesh_preprocessing"), timestamp_writes: None, }); - let pass_span = diagnostics.time_span(&mut compute_pass, "late mesh preprocessing"); + let pass_span = diagnostics.time_span(&mut compute_pass, "late_mesh_preprocessing"); // Run the compute passes. for (view, bind_groups, view_uniform_offset) in self.view_query.iter_manual(world) { diff --git a/crates/bevy_pbr/src/ssr/mod.rs b/crates/bevy_pbr/src/ssr/mod.rs index 8354a0488cecb..b245aaffb8da3 100644 --- a/crates/bevy_pbr/src/ssr/mod.rs +++ b/crates/bevy_pbr/src/ssr/mod.rs @@ -304,7 +304,7 @@ impl ViewNode for ScreenSpaceReflectionsNode { // Build the SSR render pass. let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("SSR pass"), + label: Some("ssr"), color_attachments: &[Some(RenderPassColorAttachment { view: postprocess.destination, depth_slice: None, @@ -315,7 +315,7 @@ impl ViewNode for ScreenSpaceReflectionsNode { timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "SSR pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "ssr"); // Set bind groups. render_pass.set_render_pipeline(render_pipeline); diff --git a/crates/bevy_pbr/src/volumetric_fog/render.rs b/crates/bevy_pbr/src/volumetric_fog/render.rs index 43c72e44a1bc5..e7d8d33b82b28 100644 --- a/crates/bevy_pbr/src/volumetric_fog/render.rs +++ b/crates/bevy_pbr/src/volumetric_fog/render.rs @@ -362,9 +362,9 @@ impl ViewNode for VolumetricFogNode { let diagnostics = render_context.diagnostic_recorder(); render_context .command_encoder() - .push_debug_group("volumetric lighting pass"); + .push_debug_group("volumetric_lighting"); let time_span = - diagnostics.time_span(render_context.command_encoder(), "volumetric lighting pass"); + diagnostics.time_span(render_context.command_encoder(), "volumetric_lighting"); let fog_assets = world.resource::(); let render_meshes = world.resource::>(); diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index da5af294b26f7..240cb8752806e 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -388,13 +388,13 @@ impl ViewNode for Wireframe3dNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("wireframe_3d_pass"), + label: Some("wireframe_3d"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(depth.get_attachment(StoreOp::Store)), timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_3d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_3d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_sprite/src/mesh2d/wireframe2d.rs b/crates/bevy_sprite/src/mesh2d/wireframe2d.rs index fd0efb02824a1..95a7473fec3f5 100644 --- a/crates/bevy_sprite/src/mesh2d/wireframe2d.rs +++ b/crates/bevy_sprite/src/mesh2d/wireframe2d.rs @@ -388,13 +388,13 @@ impl ViewNode for Wireframe2dNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("wireframe_2d_pass"), + label: Some("wireframe_2d"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(depth.get_attachment(StoreOp::Store)), timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_2d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "wireframe_2d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_ui_render/src/render_pass.rs b/crates/bevy_ui_render/src/render_pass.rs index 2bebe74f64599..407f200e86b1c 100644 --- a/crates/bevy_ui_render/src/render_pass.rs +++ b/crates/bevy_ui_render/src/render_pass.rs @@ -92,13 +92,13 @@ impl Node for UiPassNode { input_view_entity }; let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("ui_pass"), + label: Some("ui"), color_attachments: &[Some(target.get_unsampled_color_attachment())], depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "ui_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "ui"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); From 421bc926b81cacf5c2b45f1e5cd7cf33a8cc11b0 Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 5 Aug 2025 21:56:01 +0100 Subject: [PATCH 08/11] Fix import --- crates/bevy_pbr/src/wireframe.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index 240cb8752806e..77257630b64b4 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -52,9 +52,8 @@ use bevy_render::{ ExtractedView, NoIndirectDrawing, RenderVisibilityRanges, RenderVisibleEntities, RetainedViewEntity, ViewDepthTexture, ViewTarget, }, - Extract, Render, RenderApp, RenderDebugFlags, RenderSystems, + Extract, Render, RenderApp, RenderDebugFlags, RenderStartup, RenderSystems, }; -use bevy_render::{camera::extract_cameras, RenderStartup}; use core::{hash::Hash, ops::Range}; use tracing::error; From 708ed2daec8f24bab7112576c2802d29fe46880b Mon Sep 17 00:00:00 2001 From: jf908 Date: Tue, 5 Aug 2025 22:03:53 +0100 Subject: [PATCH 09/11] Rename some missed passes --- crates/bevy_pbr/src/render/gpu_preprocess.rs | 6 +++--- crates/bevy_pbr/src/render/light.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/bevy_pbr/src/render/gpu_preprocess.rs b/crates/bevy_pbr/src/render/gpu_preprocess.rs index 6d3ae293f2a6b..b7b2b7df06295 100644 --- a/crates/bevy_pbr/src/render/gpu_preprocess.rs +++ b/crates/bevy_pbr/src/render/gpu_preprocess.rs @@ -976,7 +976,7 @@ impl Node for EarlyPrepassBuildIndirectParametersNode { render_context, world, &preprocess_pipelines.early_phase, - "early prepass indirect parameters building", + "early_prepass_indirect_parameters_building", ) } } @@ -1004,7 +1004,7 @@ impl Node for LatePrepassBuildIndirectParametersNode { render_context, world, &preprocess_pipelines.late_phase, - "late prepass indirect parameters building", + "late_prepass_indirect_parameters_building", ) } } @@ -1026,7 +1026,7 @@ impl Node for MainBuildIndirectParametersNode { render_context, world, &preprocess_pipelines.main_phase, - "main indirect parameters building", + "main_indirect_parameters_building", ) } } diff --git a/crates/bevy_pbr/src/render/light.rs b/crates/bevy_pbr/src/render/light.rs index bec2a6d1a9597..051908d6476cc 100644 --- a/crates/bevy_pbr/src/render/light.rs +++ b/crates/bevy_pbr/src/render/light.rs @@ -1254,7 +1254,7 @@ pub fn prepare_lights( ShadowView { depth_attachment, pass_name: format!( - "shadow pass point light {} {}", + "shadow_point_light_{}_{}", light_index, face_index_to_name(face_index) ), @@ -1359,7 +1359,7 @@ pub fn prepare_lights( commands.entity(view_light_entity).insert(( ShadowView { depth_attachment, - pass_name: format!("shadow pass spot light {light_index}"), + pass_name: format!("shadow_spot_light_{light_index}"), }, ExtractedView { retained_view_entity, @@ -1503,7 +1503,7 @@ pub fn prepare_lights( ShadowView { depth_attachment, pass_name: format!( - "shadow pass directional light {light_index} cascade {cascade_index}" + "shadow_directional_light_{light_index}_cascade_{cascade_index}" ), }, ExtractedView { From 0b2ab978555552b0f3388673e1e3764077a7a34b Mon Sep 17 00:00:00 2001 From: jf908 Date: Wed, 6 Aug 2025 14:07:04 +0100 Subject: [PATCH 10/11] Apply suggestions from code review Co-authored-by: atlv --- crates/bevy_pbr/src/ssao/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/bevy_pbr/src/ssao/mod.rs b/crates/bevy_pbr/src/ssao/mod.rs index 782920c2ad7dc..a1170b9604dad 100644 --- a/crates/bevy_pbr/src/ssao/mod.rs +++ b/crates/bevy_pbr/src/ssao/mod.rs @@ -229,7 +229,7 @@ impl ViewNode for SsaoNode { { let mut preprocess_depth_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_preprocess_depth_pass"), + label: Some("ssao_preprocess_depth"), timestamp_writes: None, }); preprocess_depth_pass.set_pipeline(preprocess_depth_pipeline); @@ -248,7 +248,7 @@ impl ViewNode for SsaoNode { { let mut ssao_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_ssao_pass"), + label: Some("ssao"), timestamp_writes: None, }); ssao_pass.set_pipeline(ssao_pipeline); @@ -264,7 +264,7 @@ impl ViewNode for SsaoNode { { let mut spatial_denoise_pass = command_encoder.begin_compute_pass(&ComputePassDescriptor { - label: Some("ssao_spatial_denoise_pass"), + label: Some("ssao_spatial_denoise"), timestamp_writes: None, }); spatial_denoise_pass.set_pipeline(spatial_denoise_pipeline); From 0cbf8e267369d1e09568eaca1cacafb4ca461ba8 Mon Sep 17 00:00:00 2001 From: jf908 Date: Wed, 6 Aug 2025 14:10:40 +0100 Subject: [PATCH 11/11] Revert opaque/transparent/transmissive pass renaming --- .../src/core_2d/main_opaque_pass_2d_node.rs | 4 ++-- .../src/core_2d/main_transparent_pass_2d_node.rs | 4 ++-- .../src/core_3d/main_opaque_pass_3d_node.rs | 4 ++-- .../src/core_3d/main_transmissive_pass_3d_node.rs | 6 +++--- .../src/core_3d/main_transparent_pass_3d_node.rs | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs b/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs index c4ab30474b3bd..e8cd0c65c6888 100644 --- a/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs +++ b/crates/bevy_core_pipeline/src/core_2d/main_opaque_pass_2d_node.rs @@ -65,14 +65,14 @@ impl ViewNode for MainOpaquePass2dNode { // Render pass setup let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_opaque_2d_pass"), + label: Some("main_opaque_pass_2d"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, occlusion_query_set: None, }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_2d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_pass_2d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs b/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs index 72715d9fe9bf1..4054283a5738a 100644 --- a/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs +++ b/crates/bevy_core_pipeline/src/core_2d/main_transparent_pass_2d_node.rs @@ -66,7 +66,7 @@ impl ViewNode for MainTransparentPass2dNode { let _main_pass_2d = info_span!("main_transparent_pass_2d").entered(); let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_transparent_2d_pass"), + label: Some("main_transparent_pass_2d"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, @@ -74,7 +74,7 @@ impl ViewNode for MainTransparentPass2dNode { }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_2d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_pass_2d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); diff --git a/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs index dc9151a51a962..0ee9144a954d1 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_opaque_pass_3d_node.rs @@ -83,14 +83,14 @@ impl ViewNode for MainOpaquePass3dNode { // Render pass setup let render_pass = command_encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("main_opaque_3d_pass"), + label: Some("main_opaque_pass_3d"), color_attachments: &color_attachments, depth_stencil_attachment, timestamp_writes: None, occlusion_query_set: None, }); let mut render_pass = TrackedRenderPass::new(&render_device, render_pass); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_3d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_opaque_pass_3d"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override) diff --git a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs index d742923836088..37d359785bfd6 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_transmissive_pass_3d_node.rs @@ -59,7 +59,7 @@ impl ViewNode for MainTransmissivePass3dNode { let physical_target_size = camera.physical_target_size.unwrap(); let render_pass_descriptor = RenderPassDescriptor { - label: Some("main_transmissive_3d_pass"), + label: Some("main_transmissive_pass_3d"), color_attachments: &[Some(target.get_color_attachment())], depth_stencil_attachment: Some(depth.get_attachment(StoreOp::Store)), timestamp_writes: None, @@ -99,7 +99,7 @@ impl ViewNode for MainTransmissivePass3dNode { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor.clone()); let pass_span = - diagnostics.pass_span(&mut render_pass, "main_transmissive_3d_pass"); + diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); if let Some(viewport) = camera.viewport.as_ref() { render_pass.set_camera_viewport(viewport); @@ -118,7 +118,7 @@ impl ViewNode for MainTransmissivePass3dNode { let mut render_pass = render_context.begin_tracked_render_pass(render_pass_descriptor); let pass_span = - diagnostics.pass_span(&mut render_pass, "main_transmissive_3d_pass"); + diagnostics.pass_span(&mut render_pass, "main_transmissive_pass_3d"); if let Some(viewport) = Viewport::from_viewport_and_override( camera.viewport.as_ref(), diff --git a/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs b/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs index 240acef662971..bbe14578b0903 100644 --- a/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs +++ b/crates/bevy_core_pipeline/src/core_3d/main_transparent_pass_3d_node.rs @@ -55,7 +55,7 @@ impl ViewNode for MainTransparentPass3dNode { let diagnostics = render_context.diagnostic_recorder(); let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { - label: Some("main_transparent_3d_pass"), + label: Some("main_transparent_pass_3d"), color_attachments: &[Some(target.get_color_attachment())], // NOTE: For the transparent pass we load the depth buffer. There should be no // need to write to it, but store is set to `true` as a workaround for issue #3776, @@ -68,7 +68,7 @@ impl ViewNode for MainTransparentPass3dNode { occlusion_query_set: None, }); - let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_3d_pass"); + let pass_span = diagnostics.pass_span(&mut render_pass, "main_transparent_pass_3d"); if let Some(viewport) = Viewport::from_viewport_and_override(camera.viewport.as_ref(), resolution_override)