Bladeren bron

Fix uniform buffer being created every frame is SSAO and SSIL half_size is different

Bastiaan Olij 3 jaren geleden
bovenliggende
commit
873366cb2d

+ 6 - 0
servers/rendering/renderer_rd/effects/ss_effects.cpp

@@ -443,6 +443,11 @@ void SSEffects::downsample_depth(RID p_depth_buffer, const Vector<RID> &p_depth_
 
 
 	RD::get_singleton()->draw_command_begin_label("Downsample Depth");
 	RD::get_singleton()->draw_command_begin_label("Downsample Depth");
 	if (p_invalidate_uniform_set || use_full_mips != ss_effects.used_full_mips_last_frame || use_half_size != ss_effects.used_half_size_last_frame || use_mips != ss_effects.used_mips_last_frame) {
 	if (p_invalidate_uniform_set || use_full_mips != ss_effects.used_full_mips_last_frame || use_half_size != ss_effects.used_half_size_last_frame || use_mips != ss_effects.used_mips_last_frame) {
+		if (ss_effects.downsample_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(ss_effects.downsample_uniform_set)) {
+			RD::get_singleton()->free(ss_effects.downsample_uniform_set);
+			ss_effects.downsample_uniform_set = RID();
+		}
+
 		Vector<RD::Uniform> uniforms;
 		Vector<RD::Uniform> uniforms;
 		{
 		{
 			RD::Uniform u;
 			RD::Uniform u;
@@ -516,6 +521,7 @@ void SSEffects::downsample_depth(RID p_depth_buffer, const Vector<RID> &p_depth_
 
 
 	ss_effects.used_full_mips_last_frame = use_full_mips;
 	ss_effects.used_full_mips_last_frame = use_full_mips;
 	ss_effects.used_half_size_last_frame = use_half_size;
 	ss_effects.used_half_size_last_frame = use_half_size;
+	ss_effects.used_mips_last_frame = use_mips;
 }
 }
 
 
 /* SSIL */
 /* SSIL */

+ 5 - 0
servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp

@@ -128,6 +128,11 @@ void RenderSceneBuffersRD::cleanup() {
 		ss_effects.linear_depth_slices.clear();
 		ss_effects.linear_depth_slices.clear();
 	}
 	}
 
 
+	if (ss_effects.downsample_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(ss_effects.downsample_uniform_set)) {
+		RD::get_singleton()->free(ss_effects.downsample_uniform_set);
+		ss_effects.downsample_uniform_set = RID();
+	}
+
 	sse->ssao_free(ss_effects.ssao);
 	sse->ssao_free(ss_effects.ssao);
 	sse->ssil_free(ss_effects.ssil);
 	sse->ssil_free(ss_effects.ssil);
 	sse->ssr_free(ssr);
 	sse->ssr_free(ssr);