Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-04-10 17:53:01 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-04-10 17:53:01 +0300
commitc8e764ccbf3a19df143601fb2391fea2f9839581 (patch)
tree798d4abe4b733e745dcb7f19e8af7020e6a4cdd1
parentfd203a09330ce88725e8c5c8d9b1f9ce7b2f3c10 (diff)
Cycles: Fix race condition in shader attribute for real now
Ended up moving lock in the more centralized space since multiple shaders can access this map.
-rw-r--r--intern/cycles/render/shader.cpp2
-rw-r--r--intern/cycles/render/shader.h2
-rw-r--r--intern/cycles/render/svm.cpp2
-rw-r--r--intern/cycles/render/svm.h2
4 files changed, 4 insertions, 4 deletions
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 12d3c6cf832..23eee1916bd 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -332,6 +332,8 @@ ShaderManager *ShaderManager::create(Scene *scene, int shadingsystem)
uint ShaderManager::get_attribute_id(ustring name)
{
+ thread_scoped_spin_lock lock(attribute_lock_);
+
/* get a unique id for each name, for SVM attribute lookup */
AttributeIDMap::iterator it = unique_attribute_id.find(name);
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 87fef19c592..a8018231f1a 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -202,6 +202,8 @@ protected:
void get_requested_graph_features(ShaderGraph *graph,
DeviceRequestedFeatures *requested_features);
+
+ thread_spin_lock attribute_lock_;
};
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 9cf3f4cb0b2..48287d872d4 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -393,13 +393,11 @@ void SVMCompiler::add_node(const float4& f)
uint SVMCompiler::attribute(ustring name)
{
- thread_scoped_spin_lock lock(attribute_lock_);
return shader_manager->get_attribute_id(name);
}
uint SVMCompiler::attribute(AttributeStandard std)
{
- thread_scoped_spin_lock lock(attribute_lock_);
return shader_manager->get_attribute_id(std);
}
diff --git a/intern/cycles/render/svm.h b/intern/cycles/render/svm.h
index eef344a506e..abbd9e50610 100644
--- a/intern/cycles/render/svm.h
+++ b/intern/cycles/render/svm.h
@@ -218,8 +218,6 @@ protected:
int max_stack_use;
uint mix_weight_offset;
bool compile_failed;
-
- thread_spin_lock attribute_lock_;
};
CCL_NAMESPACE_END