diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-04-10 17:53:01 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-04-10 17:53:01 +0300 |
commit | c8e764ccbf3a19df143601fb2391fea2f9839581 (patch) | |
tree | 798d4abe4b733e745dcb7f19e8af7020e6a4cdd1 /intern | |
parent | fd203a09330ce88725e8c5c8d9b1f9ce7b2f3c10 (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.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/shader.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/shader.h | 2 | ||||
-rw-r--r-- | intern/cycles/render/svm.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/render/svm.h | 2 |
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 |