[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