[Bf-blender-cvs] [24d53f7] master: Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future.

Brecht Van Lommel noreply at git.blender.org
Sun Jun 12 17:48:43 CEST 2016


Commit: 24d53f79b217ff7c62e4c32a49967447a0230fef
Author: Brecht Van Lommel
Date:   Sun Jun 12 17:12:25 2016 +0200
Branches: master
https://developer.blender.org/rB24d53f79b217ff7c62e4c32a49967447a0230fef

Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future.

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

M	intern/cycles/app/cycles_xml.cpp
M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/graph/node.cpp
M	intern/cycles/graph/node.h
M	intern/cycles/graph/node_type.cpp
M	intern/cycles/graph/node_type.h
M	intern/cycles/graph/node_xml.cpp
M	intern/cycles/render/background.cpp
M	intern/cycles/render/camera.cpp
M	intern/cycles/render/mesh.cpp
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	intern/cycles/render/object.cpp

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

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index 48a2b12..3aca46e 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -343,11 +343,11 @@ static void xml_read_shader_graph(XMLReadState& state, Shader *shader, pugi::xml
 
 		if(node_name == "image_texture") {
 			ImageTextureNode *img = (ImageTextureNode*) snode;
-			img->filename = path_join(state.base, img->filename);
+			img->filename = path_join(state.base, img->filename.string());
 		}
 		else if(node_name == "environment_texture") {
 			EnvironmentTextureNode *env = (EnvironmentTextureNode*) snode;
-			env->filename = path_join(state.base, env->filename);
+			env->filename = path_join(state.base, env->filename.string());
 		}
 
 		if(snode) {
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 0b61cbb..78a28b7 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -619,7 +619,7 @@ static ShaderNode *add_node(Scene *scene,
 			/* TODO(sergey): Does not work properly when we change builtin type. */
 			if(b_image.is_updated()) {
 				scene->image_manager->tag_reload_image(
-				        image->filename,
+				        image->filename.string(),
 				        image->builtin_data,
 				        get_image_interpolation(b_image_node),
 				        get_image_extension(b_image_node));
@@ -665,7 +665,7 @@ static ShaderNode *add_node(Scene *scene,
 			/* TODO(sergey): Does not work properly when we change builtin type. */
 			if(b_image.is_updated()) {
 				scene->image_manager->tag_reload_image(
-				        env->filename,
+				        env->filename.string(),
 				        env->builtin_data,
 				        get_image_interpolation(b_env_node),
 				        EXTENSION_REPEAT);
diff --git a/intern/cycles/graph/node.cpp b/intern/cycles/graph/node.cpp
index 941a667..3c228a7 100644
--- a/intern/cycles/graph/node.cpp
+++ b/intern/cycles/graph/node.cpp
@@ -82,6 +82,12 @@ void Node::set(const SocketType& input, int value)
 	get_socket_value<int>(this, input) = value;
 }
 
+void Node::set(const SocketType& input, uint value)
+{
+	assert(input.type == SocketType::UINT);
+	get_socket_value<uint>(this, input) = value;
+}
+
 void Node::set(const SocketType& input, float value)
 {
 	assert(input.type == SocketType::FLOAT);
@@ -198,6 +204,12 @@ int Node::get_int(const SocketType& input) const
 	return get_socket_value<int>(this, input);
 }
 
+uint Node::get_uint(const SocketType& input) const
+{
+	assert(input.type == SocketType::UINT);
+	return get_socket_value<uint>(this, input);
+}
+
 float Node::get_float(const SocketType& input) const
 {
 	assert(input.type == SocketType::FLOAT);
diff --git a/intern/cycles/graph/node.h b/intern/cycles/graph/node.h
index bb84f98..64410f4 100644
--- a/intern/cycles/graph/node.h
+++ b/intern/cycles/graph/node.h
@@ -38,6 +38,7 @@ struct Node
 	/* set values */
 	void set(const SocketType& input, bool value);
 	void set(const SocketType& input, int value);
+	void set(const SocketType& input, uint value);
 	void set(const SocketType& input, float value);
 	void set(const SocketType& input, float2 value);
 	void set(const SocketType& input, float3 value);
@@ -60,6 +61,7 @@ struct Node
 	/* get values */
 	bool get_bool(const SocketType& input) const;
 	int get_int(const SocketType& input) const;
+	uint get_uint(const SocketType& input) const;
 	float get_float(const SocketType& input) const;
 	float2 get_float2(const SocketType& input) const;
 	float3 get_float3(const SocketType& input) const;
diff --git a/intern/cycles/graph/node_type.cpp b/intern/cycles/graph/node_type.cpp
index 7f68ae9..6c6035f 100644
--- a/intern/cycles/graph/node_type.cpp
+++ b/intern/cycles/graph/node_type.cpp
@@ -41,6 +41,7 @@ size_t SocketType::size(Type type)
 		case BOOLEAN: return sizeof(bool);
 		case FLOAT: return sizeof(float);
 		case INT: return sizeof(int);
+		case UINT: return sizeof(uint);
 		case COLOR: return sizeof(float3);
 		case VECTOR: return sizeof(float3);
 		case POINT: return sizeof(float3);
diff --git a/intern/cycles/graph/node_type.h b/intern/cycles/graph/node_type.h
index 20816f6..e84631c 100644
--- a/intern/cycles/graph/node_type.h
+++ b/intern/cycles/graph/node_type.h
@@ -39,6 +39,7 @@ struct SocketType
 		BOOLEAN,
 		FLOAT,
 		INT,
+		UINT,
 		COLOR,
 		VECTOR,
 		POINT,
@@ -154,7 +155,7 @@ const NodeType *structname::register_type()
 #define SOCKET_DEFINE(name, ui_name, default_value, datatype, TYPE, flags, ...) \
 	{ \
 		static datatype defval = default_value; \
-		assert(SOCKET_SIZEOF(T, name) == sizeof(datatype)); \
+		CHECK_TYPE_PAIR(((T *)1)->name, datatype); \
 		type->register_input(ustring(#name), ustring(ui_name), TYPE, SOCKET_OFFSETOF(T, name), &defval, NULL, NULL, flags, ##__VA_ARGS__); \
 	}
 
@@ -162,6 +163,8 @@ const NodeType *structname::register_type()
 	SOCKET_DEFINE(name, ui_name, default_value, bool, SocketType::BOOLEAN, 0, ##__VA_ARGS__)
 #define SOCKET_INT(name, ui_name, default_value, ...) \
 	SOCKET_DEFINE(name, ui_name, default_value, int, SocketType::INT, 0, ##__VA_ARGS__)
+#define SOCKET_UINT(name, ui_name, default_value, ...) \
+	SOCKET_DEFINE(name, ui_name, default_value, uint, SocketType::UINT, 0, ##__VA_ARGS__)
 #define SOCKET_FLOAT(name, ui_name, default_value, ...) \
 	SOCKET_DEFINE(name, ui_name, default_value, float, SocketType::FLOAT, 0, ##__VA_ARGS__)
 #define SOCKET_COLOR(name, ui_name, default_value, ...) \
diff --git a/intern/cycles/graph/node_xml.cpp b/intern/cycles/graph/node_xml.cpp
index 022de7c..590e096 100644
--- a/intern/cycles/graph/node_xml.cpp
+++ b/intern/cycles/graph/node_xml.cpp
@@ -108,6 +108,11 @@ void xml_read_node(XMLReader& reader, Node *node, pugi::xml_node xml_node)
 				node->set(socket, (int)atoi(attr.value()));
 				break;
 			}
+			case SocketType::UINT:
+			{
+				node->set(socket, (uint)atoi(attr.value()));
+				break;
+			}
 			case SocketType::INT_ARRAY:
 			{
 				vector<string> tokens;
@@ -310,6 +315,11 @@ pugi::xml_node xml_write_node(Node *node, pugi::xml_node xml_root)
 				attr = node->get_int(socket);
 				break;
 			}
+			case SocketType::UINT:
+			{
+				attr = node->get_uint(socket);
+				break;
+			}
 			case SocketType::INT_ARRAY:
 			{
 				std::stringstream ss;
diff --git a/intern/cycles/render/background.cpp b/intern/cycles/render/background.cpp
index 20536b7..8d7d7b8 100644
--- a/intern/cycles/render/background.cpp
+++ b/intern/cycles/render/background.cpp
@@ -32,12 +32,12 @@ NODE_DEFINE(Background)
 {
 	NodeType* type = NodeType::add("background", create);
 
-	SOCKET_INT(ao_factor, "AO Factor", 0.0f);
+	SOCKET_FLOAT(ao_factor, "AO Factor", 0.0f);
 	SOCKET_FLOAT(ao_distance, "AO Distance", FLT_MAX);
 
 	SOCKET_BOOLEAN(use_shader, "Use Shader", true);
 	SOCKET_BOOLEAN(use_ao, "Use AO", false);
-	SOCKET_INT(visibility, "Visibility", PATH_RAY_ALL_VISIBILITY);
+	SOCKET_UINT(visibility, "Visibility", PATH_RAY_ALL_VISIBILITY);
 	SOCKET_BOOLEAN(transparent, "Transparent", false);
 
 	SOCKET_NODE(shader, "Shader", &Shader::node_type);
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 2310798..a6df656 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -68,7 +68,7 @@ NODE_DEFINE(Camera)
 
 	SOCKET_FLOAT(aperturesize, "Aperture Size", 0.0f);
 	SOCKET_FLOAT(focaldistance, "Focal Distance", 10.0f);
-	SOCKET_INT(blades, "Blades", 0);
+	SOCKET_UINT(blades, "Blades", 0);
 	SOCKET_FLOAT(bladesrotation, "Blades Rotation", 0.0f);
 
 	SOCKET_TRANSFORM(matrix, "Matrix", transform_identity());
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index e251556..764a925 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -85,7 +85,7 @@ NODE_DEFINE(Mesh)
 	displacement_method_enum.insert("both", DISPLACE_BOTH);
 	SOCKET_ENUM(displacement_method, "Displacement Method", displacement_method_enum, DISPLACE_BUMP);
 
-	SOCKET_INT(motion_steps, "Motion Steps", 3);
+	SOCKET_UINT(motion_steps, "Motion Steps", 3);
 	SOCKET_BOOLEAN(use_motion_blur, "Use Motion Blur", false);
 
 	SOCKET_INT_ARRAY(triangles, "Triangles", array<int>());
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index d018c4f..6530bff 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -257,7 +257,7 @@ ImageTextureNode::ImageTextureNode()
 ImageTextureNode::~ImageTextureNode()
 {
 	if(image_manager) {
-		image_manager->remove_image(filename,
+		image_manager->remove_image(filename.string(),
 		                            builtin_data,
 		                            interpolation,
 		                            extension);
@@ -298,7 +298,7 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
 	image_manager = compiler.image_manager;
 	if(is_float == -1) {
 		bool is_float_bool;
-		slot = image_manager->add_image(filename,
+		slot = image_manager->add_image(filename.string(),
 		                                builtin_data,
 		                                animated,
 		                                0,
@@ -360,13 +360,13 @@ void ImageTextureNode::compile(OSLCompiler& compiler)
 	if(is_float == -1) {
 		if(builtin_data == NULL) {
 			ImageManager::ImageDataType type;
-			type = image_manager->get_image_metadata(filename, NULL, is_linear);
+			type = image_manager->get_image_metadata(filename.string(), NULL, is_linear);
 			if(type == ImageManager::IMAGE_DATA_TYPE_FLOAT || type == ImageManager::IMAGE_DATA_TYPE_FLOAT4)
 				is_float = 1;
 		}
 		else {
 			bool is_float_bool;
-			slot = image_manager->add_image(filename,
+			slot = image_manager->add_image(filename.string(),
 			                                builtin_data,
 			                                animated,
 			                                0,
@@ -456,7 +456,7 @@ EnvironmentTextureNode::EnvironmentTextureNode()
 EnvironmentTextureNode::~EnvironmentTextureNode()
 {
 	if(image_manager) {
-		image_manager->remove_image(filename,
+		image_manager->remove_image(filename.string(),
 		                            builtin_data,
 		                            interpolation,
 		                            EXTENSION_REPEAT);
@@ -495,7 +495,7 @@ void EnvironmentTextureNod

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list