[Bf-blender-cvs] [5edf8a8] cycles_memory_experiments: Cycles: Fix threading issue caused by several nodes sharing the same image
Sergey Sharybin
noreply at git.blender.org
Mon Apr 20 13:38:04 CEST 2015
Commit: 5edf8a8a5b01cfec2e83ae0fa33c067ac894dba8
Author: Sergey Sharybin
Date: Mon Apr 20 16:36:08 2015 +0500
Branches: cycles_memory_experiments
https://developer.blender.org/rB5edf8a8a5b01cfec2e83ae0fa33c067ac894dba8
Cycles: Fix threading issue caused by several nodes sharing the same image
===================================================================
M intern/cycles/render/image.cpp
M intern/cycles/render/mesh.cpp
===================================================================
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 0dd8041..f060896 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -809,7 +809,7 @@ void ImageManager::device_update_slot(Device *device,
if(image->users == 0) {
device_free_image(device, dscene, slot);
}
- else {
+ else if(image->need_load) {
if(!osl_texture_system || float_images[slot]->builtin_data)
device_load_image(device,
dscene,
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 3fabe01..884186c 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -1166,6 +1166,7 @@ void MeshManager::device_update_displacement_images(Device *device,
progress.set_status("Updating Displacement Images");
TaskPool pool;
ImageManager *image_manager = scene->image_manager;
+ set<int> bump_images;
foreach(Mesh *mesh, scene->meshes) {
if(mesh->need_update) {
foreach(uint shader_index, mesh->used_shaders) {
@@ -1187,17 +1188,22 @@ void MeshManager::device_update_displacement_images(Device *device,
return;
}
ImageSlotNode *image_node = static_cast<ImageSlotNode*>(node);
- assert(image_node->slot != -1);
- pool.push(function_bind(&ImageManager::device_update_slot,
- image_manager,
- device,
- dscene,
- image_node->slot,
- &progress));
+ int slot = image_node->slot;
+ if(slot != -1) {
+ bump_images.insert(slot);
+ }
}
}
}
}
+ foreach(int slot, bump_images) {
+ pool.push(function_bind(&ImageManager::device_update_slot,
+ image_manager,
+ device,
+ dscene,
+ slot,
+ &progress));
+ }
pool.wait_work();
}
More information about the Bf-blender-cvs
mailing list