[Bf-blender-cvs] [2ad4460] openvdb: Merge branch 'master' into openvdb
Kévin Dietrich
noreply at git.blender.org
Sun Nov 13 21:44:25 CET 2016
Commit: 2ad44606a1dd424a26ff7f44a151b83f7835e371
Author: Kévin Dietrich
Date: Tue Jun 7 12:36:14 2016 +0200
Branches: openvdb
https://developer.blender.org/rB2ad44606a1dd424a26ff7f44a151b83f7835e371
Merge branch 'master' into openvdb
Conflicts:
intern/cycles/kernel/kernel_compat_cpu.h
intern/cycles/kernel/kernel_globals.h
intern/cycles/kernel/osl/osl_services.cpp
intern/cycles/kernel/svm/svm_types.h
intern/cycles/render/svm.cpp
intern/cycles/util/util_task.cpp
===================================================================
===================================================================
diff --cc intern/cycles/app/cycles_xml.cpp
index 878d7c2,9f967a4..7c5cece
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@@ -735,18 -617,11 +617,18 @@@ static void xml_read_shader_graph(XMLRe
}
else if(string_iequals(node.name(), "vector_transform")) {
VectorTransformNode *vtransform = new VectorTransformNode();
- xml_read_enum(&vtransform->type, VectorTransformNode::type_enum, node, "type");
- xml_read_enum(&vtransform->convert_from, VectorTransformNode::convert_space_enum, node, "convert_from");
- xml_read_enum(&vtransform->convert_to, VectorTransformNode::convert_space_enum, node, "convert_to");
+ xml_read_enum_value((int*)&vtransform->type, VectorTransformNode::type_enum, node, "type");
+ xml_read_enum_value((int*)&vtransform->convert_from, VectorTransformNode::convert_space_enum, node, "convert_from");
+ xml_read_enum_value((int*)&vtransform->convert_to, VectorTransformNode::convert_space_enum, node, "convert_to");
snode = vtransform;
}
+ else if(string_iequals(node.name(), "openvdb")) {
+ OpenVDBNode *vdbnode = new OpenVDBNode();
+ xml_read_string(&vdbnode->filename, node, "src");
+ vdbnode->filename = path_join(state.base, vdbnode->filename);
+
+ snode = vdbnode;
+ }
else if(string_iequals(node.name(), "connect")) {
/* connect nodes */
vector<string> from_tokens, to_tokens;
diff --cc intern/cycles/kernel/kernel_compat_cpu.h
index 16994b4,bb303b3..5919fef
--- a/intern/cycles/kernel/kernel_compat_cpu.h
+++ b/intern/cycles/kernel/kernel_compat_cpu.h
@@@ -40,7 -40,7 +40,8 @@@
#include "util_simd.h"
#include "util_half.h"
#include "util_types.h"
+ #include "util_texture.h"
+#include "util_volume.h"
#define ccl_addr_space
@@@ -480,11 -495,10 +496,11 @@@ typedef texture_image<uchar4> texture_i
#define kernel_tex_fetch_ssef(tex, index) (kg->tex.fetch_ssef(index))
#define kernel_tex_fetch_ssei(tex, index) (kg->tex.fetch_ssei(index))
#define kernel_tex_lookup(tex, t, offset, size) (kg->tex.lookup(t, offset, size))
- #define kernel_tex_image_interp(tex, x, y) ((tex < TEX_NUM_FLOAT4_IMAGES_CPU) ? kg->texture_float4_images[tex].interp(x, y) : kg->texture_byte4_images[tex - TEX_NUM_FLOAT4_IMAGES_CPU].interp(x, y))
- #define kernel_tex_image_interp_3d(tex, x, y, z) ((tex < TEX_NUM_FLOAT4_IMAGES_CPU) ? kg->texture_float4_images[tex].interp_3d(x, y, z) : kg->texture_byte4_images[tex - TEX_NUM_FLOAT4_IMAGES_CPU].interp_3d(x, y, z))
- #define kernel_tex_image_interp_3d_ex(tex, x, y, z, interpolation) ((tex < TEX_NUM_FLOAT4_IMAGES_CPU) ? kg->texture_float4_images[tex].interp_3d_ex(x, y, z, interpolation) : kg->texture_byte4_images[tex - TEX_NUM_FLOAT4_IMAGES_CPU].interp_3d_ex(x, y, z, interpolation))
-
+ #define kernel_tex_image_interp(tex,x,y) kernel_tex_image_interp_impl(kg,tex,x,y)
+ #define kernel_tex_image_interp_3d(tex, x, y, z) kernel_tex_image_interp_3d_impl(kg,tex,x,y,z)
+ #define kernel_tex_image_interp_3d_ex(tex, x, y, z, interpolation) kernel_tex_image_interp_3d_ex_impl(kg,tex, x, y, z, interpolation)
+#define kernel_tex_voxel_float(tex, x, y, z, sampling) (kg->float_volumes[tex]->sample(x, y, z, sampling))
+#define kernel_tex_voxel_float3(tex, x, y, z, sampling) (kg->float3_volumes[tex]->sample(x, y, z, sampling))
#define kernel_data (kg->__data)
diff --cc intern/cycles/kernel/kernel_globals.h
index ab03aad,e06c68f..6fb563f
--- a/intern/cycles/kernel/kernel_globals.h
+++ b/intern/cycles/kernel/kernel_globals.h
@@@ -31,15 -31,15 +31,20 @@@ struct OSLThreadData
struct OSLShadingSystem;
# endif
+ struct Intersection;
+ struct VolumeStep;
+
+# define MAX_VOLUME 1024
+
typedef struct KernelGlobals {
- texture_image_uchar4 texture_byte4_images[TEX_NUM_BYTE4_IMAGES_CPU];
- texture_image_float4 texture_float4_images[TEX_NUM_FLOAT4_IMAGES_CPU];
+ texture_image_uchar4 texture_byte4_images[TEX_NUM_BYTE4_CPU];
+ texture_image_float4 texture_float4_images[TEX_NUM_FLOAT4_CPU];
+ texture_image_float texture_float_images[TEX_NUM_FLOAT_CPU];
+ texture_image_uchar texture_byte_images[TEX_NUM_BYTE_CPU];
+ float_volume *float_volumes[MAX_VOLUME];
+ float3_volume *float3_volumes[MAX_VOLUME];
+
# define KERNEL_TEX(type, ttype, name) ttype name;
# define KERNEL_IMAGE_TEX(type, ttype, name)
# include "kernel_textures.h"
diff --cc intern/cycles/kernel/osl/osl_services.cpp
index 3b479fb,ebe739e..754830d
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@@ -41,15 -45,7 +41,17 @@@
#include "kernel_differential.h"
#include "kernel_montecarlo.h"
#include "kernel_camera.h"
+
+ #include "kernels/cpu/kernel_cpu_image.h"
++
+/* Note: "util_foreach.h" needs to be included after "kernel_compat_cpu.h", as
+ * for some reason ccl::foreach conflicts with openvdb::tools::foreach, which is
+ * indirectly included through "kernel_compat_cpu.h".
+ */
+#include "util_foreach.h"
+#include "util_logging.h"
+#include "util_string.h"
+
#include "geom/geom.h"
#include "kernel_projection.h"
diff --cc intern/cycles/kernel/svm/svm_types.h
index bbfc608,e57d22b..e81c48b
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@@ -127,8 -127,7 +127,8 @@@ typedef enum ShaderNodeType
NODE_HAIR_INFO,
NODE_UVMAP,
NODE_TEX_VOXEL,
+ NODE_OPENVDB,
- } NodeType;
+ } ShaderNodeType;
typedef enum NodeAttributeType {
NODE_ATTR_FLOAT = 0,
diff --cc intern/cycles/render/scene.h
index be79e40,b34d612..b4810fd
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@@ -180,13 -181,12 +182,13 @@@ public
ParticleSystemManager *particle_system_manager;
CurveSystemManager *curve_system_manager;
BakeManager *bake_manager;
+ VolumeManager *volume_manager;
/* default shaders */
- int default_surface;
- int default_light;
- int default_background;
- int default_empty;
+ Shader *default_surface;
+ Shader *default_light;
+ Shader *default_background;
+ Shader *default_empty;
/* device */
Device *device;
diff --cc intern/cycles/render/svm.cpp
index 8179a30,d54afd1..6f4d01f
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@@ -77,9 -75,9 +75,9 @@@ void SVMShaderManager::device_update(De
scene->light_manager->need_update = true;
SVMCompiler::Summary summary;
- SVMCompiler compiler(scene->shader_manager, scene->image_manager);
+ SVMCompiler compiler(scene->shader_manager, scene->image_manager, scene->volume_manager);
- compiler.background = ((int)i == scene->default_background);
- compiler.compile(scene, shader, svm_nodes, i, &summary);
+ compiler.background = (shader == scene->default_background);
+ compiler.compile(scene, shader, svm_nodes, shader->id, &summary);
VLOG(2) << "Compilation summary:\n"
<< "Shader name: " << shader->name << "\n"
diff --cc intern/cycles/util/util_task.cpp
index 6f0100d,352ba81..9c3eceb
--- a/intern/cycles/util/util_task.cpp
+++ b/intern/cycles/util/util_task.cpp
@@@ -202,11 -203,25 +204,27 @@@ void TaskScheduler::init(int num_thread
/* launch threads that will be waiting for work */
threads.resize(num_threads);
+ threads_ids.resize(num_threads);
- for(size_t i = 0; i < threads.size(); i++) {
- threads[i] = new thread(function_bind(&TaskScheduler::thread_run, i + 1));
- threads_ids.push_back(threads[i]->id());
+ int num_groups = system_cpu_group_count();
+ int thread_index = 0;
+ for(int group = 0; group < num_groups; ++group) {
+ /* NOTE: That's not really efficient from threading point of view,
+ * but it is simple to read and it doesn't make sense to use more
+ * user-specified threads than logical threads anyway.
+ */
+ int num_group_threads = (group == num_groups - 1)
+ ? (threads.size() - thread_index)
+ : system_cpu_group_thread_count(group);
+ for(int group_thread = 0;
+ group_thread < num_group_threads && thread_index < threads.size();
+ ++group_thread, ++thread_index)
+ {
+ threads[thread_index] = new thread(function_bind(&TaskScheduler::thread_run,
+ thread_index + 1),
+ group);
++ threads_ids.push_back(threads[thread_index]->id());
+ }
}
}
diff --cc intern/cycles/util/util_thread.h
index b43ae29,427c633..adb18f1
--- a/intern/cycles/util/util_thread.h
+++ b/intern/cycles/util/util_thread.h
@@@ -52,42 -52,17 +52,22 @@@ typedef boost::condition_variable threa
class thread {
public:
- thread(function<void(void)> run_cb_)
+ thread(function<void(void)> run_cb, int group = -1);
+ ~thread();
- {
- joined = false;
- run_cb = run_cb_;
-
- pthread_create(&pthread_id, NULL, run, (void*)this);
- }
-
- ~thread()
- {
- if(!joined)
- join();
- }
-
- static void *run(void *arg)
- {
- ((thread*)arg)->run_cb();
- return NULL;
- }
-
- bool join()
- {
- joined = true;
- return pthread_join(pthread_id, NULL) == 0;
- }
+ static void *run(void *arg);
+ bool join();
+ pthread_t id() const
+ {
+ return pthread_id;
+ }
+
protected:
- function<void(void)> run_cb;
- pthread_t pthread_id;
- bool joined;
+ function<void(void)> run_cb_;
+ pthread_t pthread_id_;
+ bool joined_;
+ int group_;
};
/* Own wrapper around pthread's spin lock to make it's use easier. */
More information about the Bf-blender-cvs
mailing list