diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-03-10 19:39:56 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-03-10 19:57:09 +0300 |
commit | 5ab2252a6631bfa58a3ceb57f9778253a477e642 (patch) | |
tree | 35835bea8227ec8d9f66f5272e377dbd2a159dac /source/blender/draw | |
parent | 56bf4f3fb32641483aeb7870f9a6372a2867fbbc (diff) |
Fix T86429 EEVEE: Ambient occlusion broken on some platform
This was cause by a division by 0 if the ray direction had no
depth difference. Adding a small epsilon fix the issue.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl index e2aad867901..c47a8bdc4e9 100644 --- a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl @@ -48,6 +48,11 @@ void raytrace_screenspace_ray_finalize(inout ScreenSpaceRay ray) if (len_squared(ray.direction.xy) < 0.00001) { ray.direction.xy = vec2(0.0, 0.01); } + /* Avoid divide by 0 error in line_unit_box_intersect_dist, leading to undefined behavior + * (see T86429). */ + if (ray.direction.z == 0.0) { + ray.direction.z = 0.0001; + } float ray_len_sqr = len_squared(ray.direction.xyz); /* Make ray.direction cover one pixel. */ bool is_more_vertical = abs(ray.direction.x) < abs(ray.direction.y); |