From 543614a17d235ad6bf09a4cc82969bf92f16e1de Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 21 Apr 2019 02:18:19 +0200 Subject: Fix T63415: no Cycles displacement update when updating OSL code --- intern/cycles/blender/blender_shader.cpp | 2 +- intern/cycles/render/graph.cpp | 7 +++++++ intern/cycles/render/graph.h | 2 +- intern/cycles/render/nodes.cpp | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) (limited to 'intern') diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index 5fd60ff7970..d1f823bc2b8 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -908,7 +908,7 @@ static ShaderNode *add_node(Scene *scene, static bool node_use_modified_socket_name(ShaderNode *node) { - if (node->special_type == SHADER_SPECIAL_TYPE_SCRIPT) + if (node->special_type == SHADER_SPECIAL_TYPE_OSL) return false; return true; diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp index c284c64b5bf..e5fd39f08b7 100644 --- a/intern/cycles/render/graph.cpp +++ b/intern/cycles/render/graph.cpp @@ -721,6 +721,13 @@ void ShaderGraph::compute_displacement_hash() int link_id = (input->link) ? input->link->parent->id : 0; md5.append((uint8_t *)&link_id, sizeof(link_id)); } + + if (node->special_type == SHADER_SPECIAL_TYPE_OSL) { + /* Hash takes into account socket values, to detect changes + * in the code of the node we need an exception. */ + OSLNode *oslnode = static_cast(node); + md5.append(oslnode->bytecode_hash); + } } displacement_hash = md5.get_hex(); diff --git a/intern/cycles/render/graph.h b/intern/cycles/render/graph.h index a2c030fd226..b1aa5cf3168 100644 --- a/intern/cycles/render/graph.h +++ b/intern/cycles/render/graph.h @@ -61,7 +61,7 @@ enum ShaderNodeSpecialType { SHADER_SPECIAL_TYPE_PROXY, SHADER_SPECIAL_TYPE_AUTOCONVERT, SHADER_SPECIAL_TYPE_GEOMETRY, - SHADER_SPECIAL_TYPE_SCRIPT, + SHADER_SPECIAL_TYPE_OSL, SHADER_SPECIAL_TYPE_IMAGE_SLOT, SHADER_SPECIAL_TYPE_CLOSURE, SHADER_SPECIAL_TYPE_COMBINE_CLOSURE, diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 30968ab0c5e..16416a9a009 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -5718,7 +5718,7 @@ void SetNormalNode::compile(OSLCompiler &compiler) OSLNode::OSLNode() : ShaderNode(new NodeType(NodeType::SHADER)) { - special_type = SHADER_SPECIAL_TYPE_SCRIPT; + special_type = SHADER_SPECIAL_TYPE_OSL; } OSLNode::~OSLNode() -- cgit v1.2.3