[Bf-blender-cvs] [ce659fe] openvdb: Merge branch 'openvdb' into cvdb_ray_isect

Kévin Dietrich noreply at git.blender.org
Sun Nov 13 21:44:27 CET 2016


Commit: ce659fe09ee184344aaed09b454e13efbbd37d08
Author: Kévin Dietrich
Date:   Tue Jun 7 12:41:54 2016 +0200
Branches: openvdb
https://developer.blender.org/rBce659fe09ee184344aaed09b454e13efbbd37d08

Merge branch 'openvdb' into cvdb_ray_isect

Conflicts:
	intern/cycles/kernel/kernel_textures.h
	intern/cycles/kernel/kernel_volume.h
	intern/cycles/render/attribute.cpp
	intern/cycles/render/scene.h
	intern/cycles/render/session.cpp
	intern/cycles/render/shader.cpp
	intern/cycles/util/util_task.cpp

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



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

diff --cc intern/cycles/kernel/kernel_textures.h
index c0faa84,245d236..5b07308
--- a/intern/cycles/kernel/kernel_textures.h
+++ b/intern/cycles/kernel/kernel_textures.h
@@@ -72,9 -72,8 +72,11 @@@ KERNEL_TEX(float, texture_float, __look
  /* sobol */
  KERNEL_TEX(uint, texture_uint, __sobol_directions)
  
 +/* volume */
 +KERNEL_TEX(uint, texture_uint, __vol_shader)
 +
+ #ifdef __KERNEL_CUDA__
+ #  if __CUDA_ARCH__ < 300
  /* full-float image */
  KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float4_000)
  KERNEL_IMAGE_TEX(float4, texture_image_float4, __tex_image_float4_001)
diff --cc intern/cycles/kernel/kernel_volume.h
index 23ecaa2,4b9afe6..f82aca3
--- a/intern/cycles/kernel/kernel_volume.h
+++ b/intern/cycles/kernel/kernel_volume.h
@@@ -1314,9 -1323,8 +1343,9 @@@ ccl_device void kernel_volume_stack_ini
  				}
  			}
  			if(need_add) {
- 				stack[stack_index].object = sd.object;
- 				stack[stack_index].shader = sd.shader;
- 				stack[stack_index].volume = sd.prim;
+ 				stack[stack_index].object = stack_sd->object;
+ 				stack[stack_index].shader = stack_sd->shader;
++				stack[stack_index].volume = stack_sd->prim;
  				++stack_index;
  			}
  		}
diff --cc intern/cycles/render/attribute.cpp
index 4b2cd74,71a3cba..ab4edbe
--- a/intern/cycles/render/attribute.cpp
+++ b/intern/cycles/render/attribute.cpp
@@@ -291,11 -291,9 +291,11 @@@ Attribute *AttributeSet::add(ustring na
  
  	/* this is weak .. */
  	if(triangle_mesh)
- 		attr->reserve(triangle_mesh->verts.size(), triangle_mesh->triangles.size(), triangle_mesh->motion_steps, 0, 0, resize);
+ 		attr->resize(triangle_mesh->verts.size(), triangle_mesh->num_triangles(), triangle_mesh->motion_steps, 0, 0, false);
 -	if(curve_mesh)
 +	else if(curve_mesh)
- 		attr->reserve(0, 0, curve_mesh->motion_steps, curve_mesh->curves.size(), curve_mesh->curve_keys.size(), resize);
+ 		attr->resize(0, 0, curve_mesh->motion_steps, curve_mesh->num_curves(), curve_mesh->curve_keys.size(), false);
 +	else
- 		attr->reserve(0, 0, 0, 0, 0, resize);
++		attr->reserve(0, 0, 0, 0, 0, false);
  	
  	return attr;
  }
diff --cc intern/cycles/render/scene.h
index a9409c8,b4810fd..2da66fc
--- a/intern/cycles/render/scene.h
+++ b/intern/cycles/render/scene.h
@@@ -186,11 -185,10 +188,11 @@@ public
  	VolumeManager *volume_manager;
  
  	/* default shaders */
- 	int default_surface;
- 	int default_light;
- 	int default_background;
- 	int default_empty;
- 	int default_volume;
+ 	Shader *default_surface;
+ 	Shader *default_light;
+ 	Shader *default_background;
+ 	Shader *default_empty;
++	Shader *default_volume;
  
  	/* device */
  	Device *device;
diff --cc intern/cycles/render/session.cpp
index 32cf8c5,1cd76ff..bfa1add
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@@ -630,14 -630,11 +630,12 @@@ DeviceRequestedFeatures Session::get_re
  	requested_features.use_camera_motion = scene->camera->use_motion;
  	foreach(Object *object, scene->objects) {
  		Mesh *mesh = object->mesh;
 -		if(mesh->num_curves()) {
 -			requested_features.use_hair = true;
 +		if(mesh) {
- 			if(mesh->curves.size() > 0) {
++			if(mesh->num_curves()) {
 +				requested_features.use_hair = true;
 +			}
- 			requested_features.use_object_motion |= mesh->use_motion_blur;
- 			requested_features.use_camera_motion |= mesh->use_motion_blur;
  		}
 -		requested_features.use_object_motion |= object->use_motion | mesh->use_motion_blur;
 -		requested_features.use_camera_motion |= mesh->use_motion_blur;
 +		requested_features.use_object_motion |= object->use_motion;
  	}
  
  	BakeManager *bake_manager = scene->bake_manager;
diff --cc intern/cycles/render/shader.cpp
index 92a1d9e,708eeef..5136665
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@@ -309,22 -326,27 +326,28 @@@ void ShaderManager::device_update_shade
  {
  	/* figure out which shaders are in use, so SVM/OSL can skip compiling them
  	 * for speed and avoid loading image textures into memory */
- 	foreach(Shader *shader, scene->shaders)
+ 	uint id = 0;
+ 	foreach(Shader *shader, scene->shaders) {
  		shader->used = false;
+ 		shader->id = id++;
+ 	}
  
- 	scene->shaders[scene->background->shader]->used = true;
- 	scene->shaders[scene->default_surface]->used = true;
- 	scene->shaders[scene->default_light]->used = true;
- 	scene->shaders[scene->default_background]->used = true;
- 	scene->shaders[scene->default_empty]->used = true;
- 	scene->shaders[scene->default_volume]->used = true;
+ 	scene->default_surface->used = true;
+ 	scene->default_light->used = true;
+ 	scene->default_background->used = true;
+ 	scene->default_empty->used = true;
++	scene->default_volume->used = true;
+ 
+ 	if(scene->background->shader)
+ 		scene->background->shader->used = true;
  
  	foreach(Mesh *mesh, scene->meshes)
- 		foreach(uint shader, mesh->used_shaders)
- 			scene->shaders[shader]->used = true;
+ 		foreach(Shader *shader, mesh->used_shaders)
+ 			shader->used = true;
  
  	foreach(Light *light, scene->lights)
- 		scene->shaders[light->shader]->used = true;
+ 		if(light->shader)
+ 			light->shader->used = true;
  }
  
  void ShaderManager::device_update_common(Device *device,
@@@ -485,25 -505,8 +506,25 @@@ void ShaderManager::add_default(Scene *
  		shader->name = "default_empty";
  		shader->graph = graph;
  		scene->shaders.push_back(shader);
- 		scene->default_empty = scene->shaders.size() - 1;
+ 		scene->default_empty = shader;
  	}
 +
 +	/* default empty */
 +	{
 +		graph = new ShaderGraph();
 +
 +		closure = graph->add(new ScatterVolumeNode());
 +		closure->input("Density")->value = make_float3(0.8f, 0.8f, 0.8f);
 +		out = graph->output();
 +
 +		graph->connect(closure->output("Volume"), out->input("Volume"));
 +
 +		shader = new Shader();
 +		shader->name = "default_volume";
 +		shader->graph = graph;
 +		scene->shaders.push_back(shader);
 +		scene->default_volume = scene->shaders.size() - 1;
 +	}
  }
  
  void ShaderManager::get_requested_graph_features(ShaderGraph *graph,
diff --cc intern/cycles/util/util_task.cpp
index f2a9409,9c3eceb..251356c
--- a/intern/cycles/util/util_task.cpp
+++ b/intern/cycles/util/util_task.cpp
@@@ -204,10 -206,25 +206,26 @@@ void TaskScheduler::init(int num_thread
  		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[i] = threads[i]->id();
- 			std::cerr << "Thread " << i << ", id: " << threads[i]->id() << '\n';
+ 		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());
++				std::cerr << "Thread " << i << ", id: " << threads[i]->id() << '\n';
+ 			}
  		}
  	}




More information about the Bf-blender-cvs mailing list