[Bf-blender-cvs] [7e942b2a1e3] blender-v3.3-release: Partially fix T101702: OSL Shaders with boolean inputs crash

Lukas Stockner noreply at git.blender.org
Wed Oct 26 10:55:07 CEST 2022


Commit: 7e942b2a1e3d4d72ba90b498a514455452eab94c
Author: Lukas Stockner
Date:   Mon Oct 10 01:03:12 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB7e942b2a1e3d4d72ba90b498a514455452eab94c

Partially fix T101702: OSL Shaders with boolean inputs crash

OSL (like Cycles) has no internal boolean type, instead an integer
input can be flagged to be shown as a boolean in the UI.
Cycles reacts to this by creating a boolean socket on the Blender
side, but as a result incorrectly called the boolean overload of the
set function even though the internal type is an integer.

There's another unrelated crash in the GPU viewport shader code that
appears to apply to every OSL node that outputs a shader, and the file
in T101702 triggers both, so this is only a partial fix for the report.

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

M	intern/cycles/blender/shader.cpp

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

diff --git a/intern/cycles/blender/shader.cpp b/intern/cycles/blender/shader.cpp
index 04eb1576330..c8798e23b0c 100644
--- a/intern/cycles/blender/shader.cpp
+++ b/intern/cycles/blender/shader.cpp
@@ -205,7 +205,9 @@ static void set_default_value(ShaderInput *input,
     }
     case SocketType::INT: {
       if (b_sock.type() == BL::NodeSocket::type_BOOLEAN) {
-        node->set(socket, get_boolean(b_sock.ptr, "default_value"));
+        /* Make sure to call the int overload of set() since this is an integer socket as far as
+         * Cycles is concerned. */
+        node->set(socket, get_boolean(b_sock.ptr, "default_value") ? 1 : 0);
       }
       else {
         node->set(socket, get_int(b_sock.ptr, "default_value"));



More information about the Bf-blender-cvs mailing list