[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