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:
@@ -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);
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user