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.
This commit is contained in:
Sergey Sharybin
2017-04-10 16:53:01 +02:00
parent fd203a0933
commit c8e764ccbf
4 changed files with 4 additions and 4 deletions

View File

@@ -332,6 +332,8 @@ ShaderManager *ShaderManager::create(Scene *scene, int shadingsystem)
uint ShaderManager::get_attribute_id(ustring name) 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 */ /* get a unique id for each name, for SVM attribute lookup */
AttributeIDMap::iterator it = unique_attribute_id.find(name); AttributeIDMap::iterator it = unique_attribute_id.find(name);

View File

@@ -202,6 +202,8 @@ protected:
void get_requested_graph_features(ShaderGraph *graph, void get_requested_graph_features(ShaderGraph *graph,
DeviceRequestedFeatures *requested_features); DeviceRequestedFeatures *requested_features);
thread_spin_lock attribute_lock_;
}; };
CCL_NAMESPACE_END CCL_NAMESPACE_END

View File

@@ -393,13 +393,11 @@ void SVMCompiler::add_node(const float4& f)
uint SVMCompiler::attribute(ustring name) uint SVMCompiler::attribute(ustring name)
{ {
thread_scoped_spin_lock lock(attribute_lock_);
return shader_manager->get_attribute_id(name); return shader_manager->get_attribute_id(name);
} }
uint SVMCompiler::attribute(AttributeStandard std) uint SVMCompiler::attribute(AttributeStandard std)
{ {
thread_scoped_spin_lock lock(attribute_lock_);
return shader_manager->get_attribute_id(std); return shader_manager->get_attribute_id(std);
} }

View File

@@ -218,8 +218,6 @@ protected:
int max_stack_use; int max_stack_use;
uint mix_weight_offset; uint mix_weight_offset;
bool compile_failed; bool compile_failed;
thread_spin_lock attribute_lock_;
}; };
CCL_NAMESPACE_END CCL_NAMESPACE_END