From 655e98b2ea99f4a8bfe2548c1ce93a9a28627c38 Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 28 Jan 2025 10:24:46 -0300 Subject: [PATCH] Fix default SDFGI variant not being compiled in time. --- .../forward_clustered/render_forward_clustered.cpp | 8 ++++++++ .../forward_clustered/scene_shader_forward_clustered.cpp | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) 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 70b3a89c4a6..34d372252c6 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -3764,6 +3764,14 @@ RID RenderForwardClustered::_setup_sdfgi_render_pass_uniform_set(RID p_albedo_te uniforms.push_back(u); } + if (scene_shader.default_shader_sdfgi_rd.is_null()) { + // The variant for SDF from the default material should only be retrieved when SDFGI is required. + ERR_FAIL_NULL_V(scene_shader.default_material_shader_ptr, RID()); + scene_shader.enable_advanced_shader_group(); + scene_shader.default_shader_sdfgi_rd = scene_shader.default_material_shader_ptr->get_shader_variant(SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_SDF, 0, false); + ERR_FAIL_COND_V(scene_shader.default_shader_sdfgi_rd.is_null(), RID()); + } + return UniformSetCacheRD::get_singleton()->get_cache_vec(scene_shader.default_shader_sdfgi_rd, RENDER_PASS_UNIFORM_SET, uniforms); } diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp index 102d15206fe..5debecb134d 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp @@ -805,7 +805,6 @@ void fragment() { MaterialData *md = static_cast(material_storage->material_get_data(default_material, RendererRD::MaterialStorage::SHADER_TYPE_3D)); default_shader_rd = md->shader_data->get_shader_variant(PIPELINE_VERSION_COLOR_PASS, 0, false); - default_shader_sdfgi_rd = md->shader_data->get_shader_variant(PIPELINE_VERSION_DEPTH_PASS_WITH_SDF, 0, false); default_material_shader_ptr = md->shader_data; default_material_uniform_set = md->uniform_set;