diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index eb6c0c6cc5e..f3386ec3a65 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -1394,6 +1394,8 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const eGPUType static const char *gpu_uniform_set_function_from_type(eNodeSocketDatatype type) { switch (type) { + /* For now INT is supported as float. */ + case SOCK_INT: case SOCK_FLOAT: return "set_value"; case SOCK_VECTOR: diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c index 08969fe3c0e..97d93ee0fa5 100644 --- a/source/blender/nodes/intern/node_exec.c +++ b/source/blender/nodes/intern/node_exec.c @@ -39,7 +39,8 @@ /* supported socket types in old nodes */ int node_exec_socket_use_stack(bNodeSocket *sock) { - return ELEM(sock->type, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER); + /* NOTE: INT supported as FLOAT. Only for EEVEE. */ + return ELEM(sock->type, SOCK_INT, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER); } /* for a given socket, find the actual stack entry */ diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c index 30cc9d512f7..9c00786dc91 100644 --- a/source/blender/nodes/shader/node_shader_tree.c +++ b/source/blender/nodes/shader/node_shader_tree.c @@ -448,6 +448,7 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree) bNodeSocketValueVector *src_vector; bNodeSocketValueRGBA *src_rgba, *dst_rgba; bNodeSocketValueFloat *src_float, *dst_float; + bNodeSocketValueInt *src_int; bool link_added = false; for (group_node = localtree->nodes.first; group_node; group_node = group_node->next) { @@ -485,6 +486,15 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree) dst_rgba = value_socket->default_value; copy_v4_v4(dst_rgba->value, src_rgba->value); break; + case SOCK_INT: + /* HACK: Support as float. */ + value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_VALUE); + value_socket = ntree_shader_node_find_output(value_node, "Value"); + BLI_assert(value_socket != NULL); + src_int = group_socket->default_value; + dst_float = value_socket->default_value; + dst_float->value = (float)(src_int->value); + break; case SOCK_FLOAT: value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_VALUE); value_socket = ntree_shader_node_find_output(value_node, "Value"); diff --git a/source/blender/nodes/shader/node_shader_util.c b/source/blender/nodes/shader/node_shader_util.c index 5488706b87d..cc2032a7ba5 100644 --- a/source/blender/nodes/shader/node_shader_util.c +++ b/source/blender/nodes/shader/node_shader_util.c @@ -102,6 +102,8 @@ void node_gpu_stack_from_data(struct GPUNodeStack *gs, int type, bNodeStack *ns) if (type == SOCK_FLOAT) gs->type = GPU_FLOAT; + else if (type == SOCK_INT) + gs->type = GPU_FLOAT; /* HACK: Support as float. */ else if (type == SOCK_VECTOR) gs->type = GPU_VEC3; else if (type == SOCK_RGBA)