From c8e764ccbf3a19df143601fb2391fea2f9839581 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 10 Apr 2017 16:53:01 +0200 Subject: [PATCH 1/2] 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. --- intern/cycles/render/shader.cpp | 2 ++ intern/cycles/render/shader.h | 2 ++ intern/cycles/render/svm.cpp | 2 -- 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 From 2ad112437269989439361c23fc9295d642ec11d3 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 10 Apr 2017 17:31:39 +0200 Subject: [PATCH 2/2] Fix stereoscopic camera volume drawing. Not sure how we got to that point, but code was drawing twice one side of the camera volume, and not at all another side! --- source/blender/editors/space_view3d/drawobject.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index be2e4ab05e0..3226601be46 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1824,16 +1824,16 @@ static void drawcamera_volume(float near_plane[4][3], float far_plane[4][3], con glBegin(mode); glVertex3fv(near_plane[2]); - glVertex3fv(near_plane[1]); - glVertex3fv(far_plane[1]); glVertex3fv(far_plane[2]); + glVertex3fv(far_plane[3]); + glVertex3fv(near_plane[3]); glEnd(); glBegin(mode); - glVertex3fv(far_plane[0]); - glVertex3fv(near_plane[0]); - glVertex3fv(near_plane[3]); glVertex3fv(far_plane[3]); + glVertex3fv(near_plane[3]); + glVertex3fv(near_plane[0]); + glVertex3fv(far_plane[0]); glEnd(); }