Commit: d7ecd44fb1979d70ee9376ce709b53767c500814 Author: Sergey Sharybin Date: Wed Sep 15 19:46:39 2021 +0200 Branches: cycles-x https://developer.blender.org/rBd7ecd44fb1979d70ee9376ce709b53767c500814
Fix missing mutex lock for viewport OpenGL context A mistake in D12468: the viewport uses GHOST to operate on contexts, bypassing draw manager state, Differential Revision: https://developer.blender.org/D12505 =================================================================== M intern/cycles/blender/blender_gpu_display.cpp M intern/cycles/blender/blender_gpu_display.h =================================================================== diff --git a/intern/cycles/blender/blender_gpu_display.cpp b/intern/cycles/blender/blender_gpu_display.cpp index eca11c061ca..d3637de8bc5 100644 --- a/intern/cycles/blender/blender_gpu_display.cpp +++ b/intern/cycles/blender/blender_gpu_display.cpp @@ -461,6 +461,10 @@ void BlenderGPUDisplay::do_draw(const GPUDisplayParams ¶ms) return; } + if (use_gl_context_) { + gl_context_mutex_.lock(); + } + glWaitSync((GLsync)gl_upload_sync_, 0, GL_TIMEOUT_IGNORED); if (transparent) { @@ -513,6 +517,10 @@ void BlenderGPUDisplay::do_draw(const GPUDisplayParams ¶ms) gl_render_sync_ = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); glFlush(); + + if (use_gl_context_) { + gl_context_mutex_.unlock(); + } } void BlenderGPUDisplay::gl_context_create() @@ -550,6 +558,7 @@ bool BlenderGPUDisplay::gl_context_enable() if (!gl_context_) { return false; } + gl_context_mutex_.lock(); WM_opengl_context_activate(gl_context_); return true; } @@ -563,6 +572,7 @@ void BlenderGPUDisplay::gl_context_disable() if (use_gl_context_) { if (gl_context_) { WM_opengl_context_release(gl_context_); + gl_context_mutex_.unlock(); } return; } diff --git a/intern/cycles/blender/blender_gpu_display.h b/intern/cycles/blender/blender_gpu_display.h index 0fc985c7dd9..87fd2196394 100644 --- a/intern/cycles/blender/blender_gpu_display.h +++ b/intern/cycles/blender/blender_gpu_display.h @@ -155,6 +155,8 @@ class BlenderGPUDisplay : public GPUDisplay { /* The when Blender RenderEngine side context is not available and the GPUDisplay is to create * its own context. */ bool use_gl_context_ = false; + /* Mutex used to guard the `gl_context_`. */ + thread_mutex gl_context_mutex_; /* Texture which contains pixels of the render result. */ struct { _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
