Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-01-23 17:05:16 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-01-23 17:41:41 +0300
commit3cd32c376db32d4072c34b5b6a04943876d8db38 (patch)
tree78783469dc1d7dfc4fb17fe0a3127bc4169c44e2 /source/blender/draw/engines/eevee/shaders
parent6dcbc3cd5aa468f346260fc89ffd58c9445391b7 (diff)
Fix T66956 EEVEE: NaN produced by bad geometry mess with the DoF
Sanitize the source of the depth of field.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders')
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl14
1 files changed, 10 insertions, 4 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
index ca4940ceffb..5277bfa32bb 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
@@ -41,6 +41,12 @@ float max_v4(vec4 v)
return max(max(v.x, v.y), max(v.z, v.w));
}
+vec4 safe_color(vec4 c)
+{
+ /* Clamp to avoid black square artifacts if a pixel goes NaN. */
+ return clamp(c, vec4(0.0), vec4(1e20)); /* 1e20 arbitrary. */
+}
+
#define THRESHOLD 1.0
#ifdef STEP_DOWNSAMPLE
@@ -57,10 +63,10 @@ void main(void)
ivec4 uvs = ivec4(gl_FragCoord.xyxy) * 2 + ivec4(0, 0, 1, 1);
/* custom downsampling */
- vec4 color1 = texelFetch(colorBuffer, uvs.xy, 0);
- vec4 color2 = texelFetch(colorBuffer, uvs.zw, 0);
- vec4 color3 = texelFetch(colorBuffer, uvs.zy, 0);
- vec4 color4 = texelFetch(colorBuffer, uvs.xw, 0);
+ vec4 color1 = safe_color(texelFetch(colorBuffer, uvs.xy, 0));
+ vec4 color2 = safe_color(texelFetch(colorBuffer, uvs.zw, 0));
+ vec4 color3 = safe_color(texelFetch(colorBuffer, uvs.zy, 0));
+ vec4 color4 = safe_color(texelFetch(colorBuffer, uvs.xw, 0));
/* Leverage SIMD by combining 4 depth samples into a vec4 */
vec4 depth;