From 376bea65e08fac63d9decce41f2ec25d541cab4e Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 4 May 2026 19:12:24 +0200 Subject: [PATCH] Add Setup Shadows render timestamp for the visual profiler - Rename shadow timestamp to clarify it's for directional and spot shadows. - Fix Render OmniLight Shadows timestamp being visible even when no omnilight shadows are being rendered. --- .../render_forward_clustered.cpp | 16 ++++++++++------ .../forward_mobile/render_forward_mobile.cpp | 2 ++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index ec025776d0..5eb1729dad 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -1523,6 +1523,8 @@ void RenderForwardClustered::_pre_opaque_render(RenderDataRD *p_render_data, boo rb_data = rb->get_custom_data(RB_SCOPE_FORWARD_CLUSTERED); } + RENDER_TIMESTAMP("Setup Shadows"); + if (rb.is_valid() && p_use_gi && rb->has_custom_data(RB_SCOPE_SDFGI)) { Ref sdfgi = rb->get_custom_data(RB_SCOPE_SDFGI); sdfgi->store_probes(); @@ -1552,10 +1554,12 @@ void RenderForwardClustered::_pre_opaque_render(RenderDataRD *p_render_data, boo } } - RENDER_TIMESTAMP("Render OmniLight Shadows"); - // Cube shadows are rendered in their own way. - for (const int &index : p_render_data->cube_shadows) { - _render_shadow_pass(p_render_data->render_shadows[index].light, p_render_data->shadow_atlas, p_render_data->render_shadows[index].pass, p_render_data->render_shadows[index].instances, lod_distance_multiplier, p_render_data->scene_data->screen_mesh_lod_threshold, true, true, true, p_render_data->render_info, viewport_size, p_render_data->scene_data->cam_transform); + if (p_render_data->cube_shadows.size()) { + RENDER_TIMESTAMP("Render OmniLight Shadows"); + // Cube shadows are rendered in their own way. + for (const int &index : p_render_data->cube_shadows) { + _render_shadow_pass(p_render_data->render_shadows[index].light, p_render_data->shadow_atlas, p_render_data->render_shadows[index].pass, p_render_data->render_shadows[index].instances, lod_distance_multiplier, p_render_data->scene_data->screen_mesh_lod_threshold, true, true, true, p_render_data->render_info, viewport_size, p_render_data->scene_data->cam_transform); + } } if (p_render_data->directional_shadows.size()) { @@ -1572,9 +1576,9 @@ void RenderForwardClustered::_pre_opaque_render(RenderDataRD *p_render_data, boo bool render_gi = rb.is_valid() && p_use_gi; if (render_shadows && render_gi) { - RENDER_TIMESTAMP("Render GI + Render Shadows (Parallel)"); + RENDER_TIMESTAMP("Render GI + Render Directional/SpotLight Shadows (Parallel)"); } else if (render_shadows) { - RENDER_TIMESTAMP("Render Shadows"); + RENDER_TIMESTAMP("Render Directional/SpotLight Shadows"); } else if (render_gi) { RENDER_TIMESTAMP("Render GI"); } diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp index ca42096fdd..b3eef6948b 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -767,6 +767,8 @@ void RenderForwardMobile::_setup_lightmaps(const RenderDataRD *p_render_data, co void RenderForwardMobile::_pre_opaque_render(RenderDataRD *p_render_data) { RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); + RENDER_TIMESTAMP("Setup Shadows"); + p_render_data->cube_shadows.clear(); p_render_data->shadows.clear(); p_render_data->directional_shadows.clear();