From 3d994b26ba9be0c89565a90b31598869383a22ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 20 Apr 2021 16:33:57 +0200 Subject: [PATCH 1/2] EEVEE: Fix unreported memory leak when toggling AO on/off The `filtered_radiance` is not a texture form the texture pool. It needs manual freeing if not used. --- source/blender/draw/engines/eevee/eevee_effects.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c index f4f7acb8862..3a38edecec6 100644 --- a/source/blender/draw/engines/eevee/eevee_effects.c +++ b/source/blender/draw/engines/eevee/eevee_effects.c @@ -171,7 +171,8 @@ void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, }); } else { - txl->filtered_radiance = NULL; + DRW_TEXTURE_FREE_SAFE(txl->filtered_radiance); + GPU_FRAMEBUFFER_FREE_SAFE(fbl->radiance_filtered_fb); } /** From 3735986e875981e5525ec8cec379023abcc692bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 20 Apr 2021 17:45:07 +0200 Subject: [PATCH 2/2] Fix T87440 EEVEE: Specular Light Viewport Render Pass wrong behavior This was caused by the closure refactor. The radiance being masked for SSR, we need to not enable SSR when trying to render the specular color pass. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D11028 --- source/blender/draw/engines/eevee/eevee_materials.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c index 042fa621117..f05aa562e6b 100644 --- a/source/blender/draw/engines/eevee/eevee_materials.c +++ b/source/blender/draw/engines/eevee/eevee_materials.c @@ -1081,12 +1081,22 @@ void EEVEE_material_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *v } } if (pd->render_passes & EEVEE_RENDER_PASS_SPECULAR_COLOR) { + bool prev_ssr = sldata->common_data.ssr_toggle; + if (prev_ssr) { + /* We need to disable ssr here so output radiance is not directed to the ssr buffer. */ + sldata->common_data.ssr_toggle = false; + GPU_uniformbuf_update(sldata->common_ubo, &sldata->common_data); + } material_renderpass_accumulate(fbl, material_accum_ps, NULL, pd, txl->spec_color_accum, sldata->renderpass_ubo.spec_color); + if (prev_ssr) { + sldata->common_data.ssr_toggle = prev_ssr; + GPU_uniformbuf_update(sldata->common_ubo, &sldata->common_data); + } } if (pd->render_passes & EEVEE_RENDER_PASS_SPECULAR_LIGHT) { material_renderpass_accumulate(fbl,