[Bf-blender-cvs] [ae0f944a579] master: Fix Cycles viewport flickering
Sergey Sharybin
noreply at git.blender.org
Thu Sep 30 11:46:07 CEST 2021
Commit: ae0f944a579c98af0095258d83665d1d5b3423da
Author: Sergey Sharybin
Date: Thu Sep 30 11:44:53 2021 +0200
Branches: master
https://developer.blender.org/rBae0f944a579c98af0095258d83665d1d5b3423da
Fix Cycles viewport flickering
Caused by a lack of synchronization between update process which sets
clear flag and the draw code checking the flag outside of a lock.
===================================================================
M intern/cycles/blender/blender_gpu_display.cpp
===================================================================
diff --git a/intern/cycles/blender/blender_gpu_display.cpp b/intern/cycles/blender/blender_gpu_display.cpp
index 456ca676cce..5a4567deac3 100644
--- a/intern/cycles/blender/blender_gpu_display.cpp
+++ b/intern/cycles/blender/blender_gpu_display.cpp
@@ -485,12 +485,6 @@ void BlenderGPUDisplay::do_draw(const GPUDisplayParams ¶ms)
/* See do_update_begin() for why no locking is required here. */
const bool transparent = true; // TODO(sergey): Derive this from Film.
- if (texture_.need_clear) {
- /* Texture is requested to be cleared and was not yet cleared.
- * Do early return which should be equivalent of drawing all-zero texture. */
- return;
- }
-
if (!gl_draw_resources_ensure()) {
return;
}
@@ -499,6 +493,16 @@ void BlenderGPUDisplay::do_draw(const GPUDisplayParams ¶ms)
gl_context_mutex_.lock();
}
+ if (texture_.need_clear) {
+ /* Texture is requested to be cleared and was not yet cleared.
+ *
+ * Do early return which should be equivalent of drawing all-zero texture.
+ * Watchout for the lock though so that the clear happening during update is properly
+ * synchronized here. */
+ gl_context_mutex_.unlock();
+ return;
+ }
+
if (gl_upload_sync_) {
glWaitSync((GLsync)gl_upload_sync_, 0, GL_TIMEOUT_IGNORED);
}
More information about the Bf-blender-cvs
mailing list