[Bf-blender-cvs] [e2e9df1520f] blender-v2.83-release: EEVEE: Fix undefined behavior when using BSDF nodes inside volume shaders

Clément Foucault noreply at git.blender.org
Mon Jul 13 17:13:31 CEST 2020


Commit: e2e9df1520fb23f55f1ebebb37e0e53d8d6b012d
Author: Clément Foucault
Date:   Tue Jun 30 01:32:00 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBe2e9df1520fb23f55f1ebebb37e0e53d8d6b012d

EEVEE: Fix undefined behavior when using BSDF nodes inside volume shaders

This should fix T76171 Eevee bsdf shaders glitches

===================================================================

M	source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl
M	source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl

===================================================================

diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
index 8f8ebebb5f1..d6d6fbab971 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_ambient_occlusion.glsl
@@ -9,5 +9,5 @@ void node_ambient_occlusion(
 }
 #else
 /* Stub ambient occlusion because it is not compatible with volumetrics. */
-#  define node_ambient_occlusion
+#  define node_ambient_occlusion(a, b, c, d, e) (e = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl
index a8a900b40c6..e1137d9d0e7 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_anisotropic.glsl
@@ -11,5 +11,5 @@ void node_bsdf_anisotropic(vec4 color,
 }
 #else
 /* Stub anisotropic because it is not compatible with volumetrics. */
-#  define node_bsdf_anisotropic
+#  define node_bsdf_anisotropic(a, b, c, d, e, f, g) (g = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl
index 714792489f6..d7b6143d2a1 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_diffuse.glsl
@@ -9,5 +9,5 @@ void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out Closure result)
 }
 #else
 /* Stub diffuse because it is not compatible with volumetrics. */
-#  define node_bsdf_diffuse
+#  define node_bsdf_diffuse(a, b, c, d) (d = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
index 747395857ee..443bab7529b 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_eevee_specular.glsl
@@ -40,4 +40,7 @@ void node_eevee_specular(vec4 diffuse,
 
   closure_load_ssr_data(ssr_spec * alpha, roughness, normal, viewCameraVec, int(ssr_id), result);
 }
+#else
+/* Stub specular because it is not compatible with volumetrics. */
+#  define node_eevee_specular(a, b, c, d, e, f, g, h, i, j, k, result) (result = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
index ece770f0e73..6d782ff18de 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_glass.glsl
@@ -28,5 +28,5 @@ void node_bsdf_glass(
 }
 #else
 /* Stub glass because it is not compatible with volumetrics. */
-#  define node_bsdf_glass
+#  define node_bsdf_glass(a, b, c, d, e, f) (f = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
index 7513c3a4edb..5ea22f3e0b4 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_glossy.glsl
@@ -12,5 +12,5 @@ void node_bsdf_glossy(vec4 color, float roughness, vec3 N, float ssr_id, out Clo
 }
 #else
 /* Stub glossy because it is not compatible with volumetrics. */
-#  define node_bsdf_glossy
+#  define node_bsdf_glossy(a, b, c, d, e) (e = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
index 3c85dc6456c..80ed4e1ef69 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_principled.glsl
@@ -442,11 +442,13 @@ void node_bsdf_principled_glass(vec4 base_color,
   result.transmittance = vec3(1.0 - alpha);
 }
 #else
+/* clang-format off */
 /* Stub principled because it is not compatible with volumetrics. */
-#  define node_bsdf_principled
-#  define node_bsdf_principled_dielectric
-#  define node_bsdf_principled_metallic
-#  define node_bsdf_principled_clearcoat
-#  define node_bsdf_principled_subsurface
-#  define node_bsdf_principled_glass
+#  define node_bsdf_principled(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+#  define node_bsdf_principled_dielectric(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+#  define node_bsdf_principled_metallic(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+#  define node_bsdf_principled_clearcoat(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+#  define node_bsdf_principled_subsurface(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+#  define node_bsdf_principled_glass(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, result) (result = CLOSURE_DEFAULT)
+/* clang-format on */
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
index 4088d6db06a..cd043020a7f 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_refraction.glsl
@@ -12,5 +12,5 @@ void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out Cl
 }
 #else
 /* Stub refraction because it is not compatible with volumetrics. */
-#  define node_bsdf_refraction
+#  define node_bsdf_refraction(a, b, c, d, e) (e = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl
index 9bbbe71b206..c13b55513da 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_subsurface_scattering.glsl
@@ -24,5 +24,5 @@ void node_subsurface_scattering(vec4 color,
 }
 #else
 /* Stub subsurface scattering because it is not compatible with volumetrics. */
-#  define node_subsurface_scattering
+#  define node_subsurface_scattering(a, b, c, d, e, f, g, h) (h = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl
index 02d288d42bf..bbfc99ccc73 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_toon.glsl
@@ -5,5 +5,5 @@ void node_bsdf_toon(vec4 color, float size, float tsmooth, vec3 N, out Closure r
 }
 #else
 /* Stub toon because it is not compatible with volumetrics. */
-#  define node_bsdf_toon
+#  define node_bsdf_toon(a, b, c, d, e) (e = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl
index 5c3ed81410a..79bfd9b24bb 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_translucent.glsl
@@ -9,5 +9,5 @@ void node_bsdf_translucent(vec4 color, vec3 N, out Closure result)
 }
 #else
 /* Stub translucent because it is not compatible with volumetrics. */
-#  define node_bsdf_translucent
+#  define node_bsdf_translucent(a, b, c) (c = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl
index 800d0f81d4a..9040f62bd3f 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_transparent.glsl
@@ -7,5 +7,5 @@ void node_bsdf_transparent(vec4 color, out Closure result)
 }
 #else
 /* Stub transparent because it is not compatible with volumetrics. */
-#  define node_bsdf_transparent
+#  define node_bsdf_transparent(a, b) (b = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl
index 9646ffff8ca..989f18b881a 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_velvet.glsl
@@ -5,5 +5,5 @@ void node_bsdf_velvet(vec4 color, float sigma, vec3 N, out Closure result)
 }
 #else
 /* Stub velvet because it is not compatible with volumetrics. */
-#  define node_bsdf_velvet
+#  define node_bsdf_velvet(a, b, c, d) (d = CLOSURE_DEFAULT)
 #endif
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl
index 2fcf1b8d914..e2789e046e1 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_wireframe.glsl
@@ -26,6 +26,6 @@ void node_wireframe_screenspace(float size, vec2 barycentric, out float fac)
 }
 #else
 /* Stub wireframe because it is not compatible with volumetrics. */
-#  define node_wireframe
-#  define node_wireframe_screenspace
+#  define node_wireframe(a, b, c, d) (d = 0.0)
+#  define node_wireframe_screenspace(a, b, c) (c = 0.0)
 #endif



More information about the Bf-blender-cvs mailing list