From 07be933218428bdb69ea1383334335c5083ec13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Tue, 19 Dec 2023 23:41:15 +1300 Subject: [PATCH] Fix: EEVEE-Next: Undefined behavior on gbuffer load This caused issue in the SSS setup and could have caused other issues. --- .../eevee_next/shaders/eevee_gbuffer_lib.glsl | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl index ad826a62088..498c331c56e 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_gbuffer_lib.glsl @@ -307,11 +307,23 @@ GBufferData gbuffer_read(usampler2D header_tx, gbuf.header = texelFetch(header_tx, texel, 0).r; gbuf.has_any_surface = (gbuf.header != 0u); + gbuf.has_diffuse = false; + gbuf.has_reflection = false; + gbuf.has_refraction = false; + gbuf.has_translucent = false; + gbuf.has_sss = false; + /* Default values. */ + gbuf.refraction.color = vec3(0.0); + gbuf.refraction.N = vec3(0.0, 0.0, 1.0); + gbuf.refraction.roughness = 0.0; + gbuf.refraction.ior = 1.1; + gbuf.has_refraction = false; + + /* Default values. */ + gbuf.diffuse.sss_radius = vec3(0.0, 0.0, 0.0); + gbuf.diffuse.sss_id = 0u; if (!gbuf.has_any_surface) { - gbuf.has_diffuse = false; - gbuf.has_reflection = false; - gbuf.has_refraction = false; return gbuf; } @@ -337,17 +349,6 @@ GBufferData gbuffer_read(usampler2D header_tx, gbuf.reflection.roughness = closure_packed.z; gbuf.has_reflection = true; - /* Default values. */ - gbuf.refraction.color = vec3(0.0); - gbuf.refraction.N = vec3(0.0, 0.0, 1.0); - gbuf.refraction.roughness = 0.0; - gbuf.refraction.ior = 1.1; - gbuf.has_refraction = false; - - /* Default values. */ - gbuf.diffuse.sss_radius = vec3(0.0, 0.0, 0.0); - gbuf.diffuse.sss_id = 0u; - gbuf.closure_count = 2u; return gbuf;