[Bf-blender-cvs] [d7ecd44fb19] cycles-x: Fix missing mutex lock for viewport OpenGL context
Sergey Sharybin
noreply at git.blender.org
Wed Sep 15 20:04:38 CEST 2021
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 {
More information about the Bf-blender-cvs
mailing list