[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