[Bf-blender-cvs] [89dedc4] experimental-build: Squashed commit of the following:

Lukas Stockner noreply at git.blender.org
Thu Oct 22 20:00:30 CEST 2015


Commit: 89dedc4a4b282ab83dfe8cb8589a966751da914d
Author: Lukas Stockner
Date:   Thu Oct 22 19:57:49 2015 +0200
Branches: experimental-build
https://developer.blender.org/rB89dedc4a4b282ab83dfe8cb8589a966751da914d

Squashed commit of the following:

commit 11b676653b2047187c5e6bdf554708ca13fe0e84
Author: Lukas Stockner <lukas.stockner at freenet.de>
Date:   Thu Oct 22 16:47:03 2015 +0200

    Experimental build with some rather unstable Cycles changes

Plus some fixes for compiling correctly

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

M	intern/cycles/app/cycles_xml.cpp
M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/blender/blender_util.h
A	intern/cycles/device/device_mpi.cpp
M	intern/cycles/kernel/CMakeLists.txt
M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_emission.h
M	intern/cycles/kernel/kernel_light.h
M	intern/cycles/kernel/kernel_path.h
M	intern/cycles/kernel/kernel_path_branched.h
M	intern/cycles/kernel/kernel_path_surface.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/kernel_textures.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/osl/background.cpp
M	intern/cycles/kernel/osl/osl_closures.cpp
M	intern/cycles/kernel/osl/osl_closures.h
M	intern/cycles/kernel/osl/osl_services.cpp
M	intern/cycles/kernel/osl/osl_shader.cpp
M	intern/cycles/kernel/shaders/CMakeLists.txt
A	intern/cycles/kernel/shaders/node_ies_light.osl
M	intern/cycles/kernel/shaders/stdosl.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_closure.h
A	intern/cycles/kernel/svm/svm_ies.h
M	intern/cycles/kernel/svm/svm_image.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/buffers.cpp
M	intern/cycles/render/film.cpp
M	intern/cycles/render/film.h
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/light.cpp
M	intern/cycles/render/light.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	intern/cycles/render/scene.h
M	intern/cycles/render/tile.cpp
M	intern/cycles/render/tile.h
M	intern/cycles/util/CMakeLists.txt
A	intern/cycles/util/util_hilbert.h
M	intern/cycles/util/util_math.h
M	intern/opencolorio/fallback_impl.cc
M	intern/opencolorio/gpu_shader_display_transform.glsl
M	intern/opencolorio/ocio_capi.cc
M	intern/opencolorio/ocio_capi.h
M	intern/opencolorio/ocio_impl.h
M	intern/opencolorio/ocio_impl_glsl.cc
M	release/scripts/startup/nodeitems_builtins.py
M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/colortools.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/text.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/imbuf/intern/colormanagement.c
M	source/blender/makesdna/DNA_color_types.h
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_color.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/CMakeLists.txt
M	source/blender/nodes/NOD_shader.h
M	source/blender/nodes/NOD_static_types.h
A	source/blender/nodes/shader/nodes/node_shader_ies_light.c
A	source/blender/nodes/shader/nodes/node_shader_shadow_catcher.c

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

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index edea8cd..457b10a 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -515,6 +515,9 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug
 			xml_read_enum(&wave->type, WaveTextureNode::type_enum, node, "type");
 			snode = wave;
 		}
+		else if(string_iequals(node.name(), "ies_light")) {
+			snode = new IESLightNode();
+		}
 		else if(string_iequals(node.name(), "normal")) {
 			NormalNode *normal = new NormalNode();
 			xml_read_float3(&normal->direction, node, "direction");
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index c313983..e9bbd90 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -54,6 +54,7 @@ enum_bvh_types = (
 enum_filter_types = (
     ('BOX', "Box", "Box filter"),
     ('GAUSSIAN', "Gaussian", "Gaussian filter"),
+    ('BLACKMAN_HARRIS', "Blackman-Harris", "Blackman-Harris filter"),
     )
 
 enum_aperture_types = (
@@ -91,6 +92,7 @@ enum_tile_order = (
     ('LEFT_TO_RIGHT', "Left to Right", "Render from left to right"),
     ('TOP_TO_BOTTOM', "Top to Bottom", "Render from top to bottom"),
     ('BOTTOM_TO_TOP', "Bottom to Top", "Render from bottom to top"),
+    ('HILBERT', "Hilbert Curve", "Render along a hilbert curve"),
     )
 
 enum_use_layer_samples = (
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 1159380..596f414 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -150,6 +150,8 @@ void BlenderSync::sync_light(BL::Object b_parent, int persistent_id[OBJECT_PERSI
 	light->co = transform_get_column(&tfm, 3);
 	light->dir = -transform_get_column(&tfm, 2);
 
+	light->tfm = tfm;
+
 	/* shader */
 	vector<uint> used_shaders;
 
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 088748c..c729fb4 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -447,6 +447,7 @@ void BlenderSession::render()
 		/* add passes */
 		vector<Pass> passes;
 		Pass::add(PASS_COMBINED, passes);
+		Pass::add(PASS_SHADOWCATCHER, passes);
 
 		if(session_params.device.advanced_shading) {
 
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 2beeaa5..cfb1f8a 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -328,6 +328,9 @@ static ShaderNode *add_node(Scene *scene,
 	else if(b_node.is_a(&RNA_ShaderNodeHoldout)) {
 		node = new HoldoutNode();
 	}
+	else if(b_node.is_a(&RNA_ShaderNodeShadowCatcher)) {
+		node = new ShadowCatcherNode();
+	}
 	else if(b_node.is_a(&RNA_ShaderNodeBsdfAnisotropic)) {
 		BL::ShaderNodeBsdfAnisotropic b_aniso_node(b_node);
 		AnisotropicBsdfNode *aniso = new AnisotropicBsdfNode();
@@ -719,6 +722,13 @@ static ShaderNode *add_node(Scene *scene,
 		get_tex_mapping(&sky->tex_mapping, b_sky_node.texture_mapping());
 		node = sky;
 	}
+	else if(b_node.is_a(&RNA_ShaderNodeIESLight)) {
+		BL::ShaderNodeIESLight b_ies_node(b_node);
+		IESLightNode *ies = new IESLightNode();
+		ies->filename = blender_absolute_path(b_data, b_ntree, b_ies_node.filepath());
+		ies->ies = get_text_content(b_ies_node.ies().ptr);
+		node = ies;
+	}
 	else if(b_node.is_a(&RNA_ShaderNodeNormalMap)) {
 		BL::ShaderNodeNormalMap b_normal_map_node(b_node);
 		NormalMapNode *nmap = new NormalMapNode();
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index bd1c37a..6f80efd 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -347,6 +347,19 @@ static inline string blender_absolute_path(BL::BlendData b_data, BL::ID b_id, co
 	return path;
 }
 
+static inline string get_text_content(PointerRNA ptr)
+{
+	if(ptr.data == NULL)
+		return "";
+
+	string content;
+	BL::Text::lines_iterator iter;
+	iter.begin(ptr);
+	for(iter.begin(ptr); iter; ++iter)
+		content += iter->body() + "\n";
+	return content;
+}
+
 /* Texture Space */
 
 static inline void mesh_texture_space(BL::Mesh b_mesh, float3& loc, float3& size)
diff --git a/intern/cycles/device/device_mpi.cpp b/intern/cycles/device/device_mpi.cpp
new file mode 100644
index 0000000..68ba035
--- /dev/null
+++ b/intern/cycles/device/device_mpi.cpp
@@ -0,0 +1,440 @@
+/*
+ * Copyright 2011-2013 Blender Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <sstream>
+
+#include "device.h"
+#include "device_intern.h"
+#include "device_network.h"
+
+#include "buffers.h"
+
+#include "util_foreach.h"
+#include "util_list.h"
+#include "util_logging.h"
+#include "util_map.h"
+#include "util_time.h"
+
+#include "mpi.h"
+
+CCL_NAMESPACE_BEGIN
+
+enum msgtype {
+	MSG_DO_ALLOC,
+	MSG_DO_FREE,
+	MSG_DO_COPY_FROM,
+	MSG_DO_COPY_TO,
+	MSG_DO_CONST_COPY_TO,
+	MSG_DO_ZERO,
+	MSG_DO_TEX_ALLOC,
+	MSG_DO_TEX_FREE,
+struct MPImsg {
+	int type;
+	int datalen;
+	char data[1016];
+}
+
+class MPIDevice : public Device
+{
+public:
+	map<int, map<device_ptr, device_ptr>> ptr_map;
+
+	device_ptr unique_ptr;
+
+	MultiDevice(DeviceInfo& info, Stats &stats, bool background_)
+	: Device(info, stats, background_), unique_ptr(1)
+	{
+	}
+
+	~MultiDevice()
+	{
+		MPI_Barrier(MPI_COMM_WORLD);
+		const int start = 0xc0cac01a;
+		MPI_Bcast(&start, 1, MPI_INT, 0, MPI_COMM_WORLD);
+		MPI_Barrier(MPI_COMM_WORLD);
+		/* All processes waiting */
+	}
+
+	const string& error_message()
+	{
+		return "";
+	}
+
+	bool load_kernels(const DeviceRequestedFeatures& requested_features)
+	{
+		return true;
+	}
+
+	void mem_alloc(device_memory& mem, MemoryType type)
+	{
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = 0;
+			sub.device->mem_alloc(mem, type);
+			sub.ptr_map[unique_ptr] = mem.device_pointer;
+		}
+
+		mem.device_pointer = unique_ptr++;
+	}
+
+	void mem_copy_to(device_memory& mem)
+	{
+		device_ptr tmp = mem.device_pointer;
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->mem_copy_to(mem);
+		}
+
+		mem.device_pointer = tmp;
+	}
+
+	void mem_copy_from(device_memory& mem, int y, int w, int h, int elem)
+	{
+		device_ptr tmp = mem.device_pointer;
+		int i = 0, sub_h = h/devices.size();
+
+		foreach(SubDevice& sub, devices) {
+			int sy = y + i*sub_h;
+			int sh = (i == (int)devices.size() - 1)? h - sub_h*i: sub_h;
+
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->mem_copy_from(mem, sy, w, sh, elem);
+			i++;
+		}
+
+		mem.device_pointer = tmp;
+	}
+
+	void mem_zero(device_memory& mem)
+	{
+		device_ptr tmp = mem.device_pointer;
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->mem_zero(mem);
+		}
+
+		mem.device_pointer = tmp;
+	}
+
+	void mem_free(device_memory& mem)
+	{
+		device_ptr tmp = mem.device_pointer;
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->mem_free(mem);
+			sub.ptr_map.erase(sub.ptr_map.find(tmp));
+		}
+
+		mem.device_pointer = 0;
+	}
+
+	void const_copy_to(const char *name, void *host, size_t size)
+	{
+		foreach(SubDevice& sub, devices)
+			sub.device->const_copy_to(name, host, size);
+	}
+
+	void tex_alloc(const char *name,
+	               device_memory& mem,
+	               InterpolationType
+	               interpolation,
+	               ExtensionType extension)
+	{
+		VLOG(1) << "Texture allocate: " << name << ", " << mem.memory_size() << " bytes.";
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = 0;
+			sub.device->tex_alloc(name, mem, interpolation, extension);
+			sub.ptr_map[unique_ptr] = mem.device_pointer;
+		}
+
+		mem.device_pointer = unique_ptr++;
+	}
+
+	void tex_free(device_memory& mem)
+	{
+		device_ptr tmp = mem.device_pointer;
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->tex_free(mem);
+			sub.ptr_map.erase(sub.ptr_map.find(tmp));
+		}
+
+		mem.device_pointer = 0;
+	}
+
+	void pixels_alloc(device_memory& mem)
+	{
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = 0;
+			sub.device->pixels_alloc(mem);
+			sub.ptr_map[unique_ptr] = mem.device_pointer;
+		}
+
+		mem.device_pointer = unique_ptr++;
+	}
+
+	void pixels_free(device_memory& mem)
+	{
+		device_ptr tmp = mem.device_pointer;
+
+		foreach(SubDevice& sub, devices) {
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->pixels_free(mem);
+			sub.ptr_map.erase(sub.ptr_map.find(tmp));
+		}
+
+		mem.device_pointer = 0;
+	}
+
+	void pixels_copy_from(device_memory& mem, int y, int w, int h)
+	{
+		device_ptr tmp = mem.device_pointer;
+		int i = 0, sub_h = h/devices.size();
+
+		foreach(SubDevice& sub, devices) {
+			int sy = y + i*sub_h;
+			int sh = (i == (int)devices.size() - 1)? h - sub_h*i: sub_h;
+
+			mem.device_pointer = sub.ptr_map[tmp];
+			sub.device->pixels_copy_from(mem, sy, w, sh);
+			i++;
+		}
+
+		mem.device_pointer = tmp;
+	}
+
+	void draw_pixels(device_memory& rgba, int y, int w, int h, int dx, int dy, int width, int height, bool transparent,
+		const DeviceDrawParams &draw_params)
+	{
+		device_ptr tmp = rgba.device_pointer;
+		int i = 0, sub_h = h/devices.size();
+		int sub_height = height/devices.size();
+
+		foreach(SubDevice& sub, devices) {
+			int sy = y + i*sub_h;
+			int sh = (i == (int)devices.size() - 1)? h - sub_h*i: sub_h;
+			int sheight = (i == (int)devices.size() - 1)? height - sub_height*i: sub_height;
+			int sdy = dy + i*sub_height;
+			/* adjust math for w/width */
+
+			rgba.dev

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list