[Bf-blender-cvs] [12d98d8a48a] temp-eeveelightcache: DRW: Change gl_context_mutex type to TicketMutex

Clément Foucault noreply at git.blender.org
Thu Jun 28 15:54:58 CEST 2018


Commit: 12d98d8a48ad8435881d17f96fbdd7056ee55ed5
Author: Clément Foucault
Date:   Mon Jun 25 11:17:15 2018 +0200
Branches: temp-eeveelightcache
https://developer.blender.org/rB12d98d8a48ad8435881d17f96fbdd7056ee55ed5

DRW: Change gl_context_mutex type to TicketMutex

This ensure the viewport is not locked indefinitely when rendering or
baking.

===================================================================

M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/intern/draw_manager.h

===================================================================

diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index b5e8cda1473..58068a2d40e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1244,7 +1244,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
 		/* XXX Really nasty locking. But else this could
 		 * be executed by the material previews thread
 		 * while rendering a viewport. */
-		BLI_mutex_lock(&DST.gl_context_mutex);
+		BLI_ticket_mutex_lock(DST.gl_context_mutex);
 
 		/* Reset before using it. */
 		drw_state_prepare_clean_for_draw(&DST);
@@ -1272,7 +1272,7 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
 
 		drw_engines_disable();
 
-		BLI_mutex_unlock(&DST.gl_context_mutex);
+		BLI_ticket_mutex_unlock(DST.gl_context_mutex);
 	}
 }
 
@@ -2305,7 +2305,7 @@ void DRW_opengl_context_create(void)
 {
 	BLI_assert(DST.gl_context == NULL); /* Ensure it's called once */
 
-	BLI_mutex_init(&DST.gl_context_mutex);
+	DST.gl_context_mutex = BLI_ticket_mutex_alloc();
 	if (!G.background) {
 		immDeactivate();
 	}
@@ -2332,7 +2332,7 @@ void DRW_opengl_context_destroy(void)
 		GWN_context_active_set(DST.gwn_context);
 		GWN_context_discard(DST.gwn_context);
 		WM_opengl_context_dispose(DST.gl_context);
-		BLI_mutex_end(&DST.gl_context_mutex);
+		BLI_ticket_mutex_free(DST.gl_context_mutex);
 	}
 }
 
@@ -2342,7 +2342,7 @@ void DRW_opengl_context_enable(void)
 		/* IMPORTANT: We dont support immediate mode in render mode!
 		 * This shall remain in effect until immediate mode supports
 		 * multiple threads. */
-		BLI_mutex_lock(&DST.gl_context_mutex);
+		BLI_ticket_mutex_lock(DST.gl_context_mutex);
 		if (BLI_thread_is_main()) {
 			if (!G.background) {
 				immDeactivate();
@@ -2376,7 +2376,7 @@ void DRW_opengl_context_disable(void)
 			GWN_context_active_set(NULL);
 		}
 
-		BLI_mutex_unlock(&DST.gl_context_mutex);
+		BLI_ticket_mutex_unlock(DST.gl_context_mutex);
 	}
 }
 
@@ -2386,7 +2386,7 @@ void DRW_opengl_render_context_enable(void *re_gl_context)
 	BLI_assert(!BLI_thread_is_main());
 
 	/* TODO get rid of the blocking. Only here because of the static global DST. */
-	BLI_mutex_lock(&DST.gl_context_mutex);
+	BLI_ticket_mutex_lock(DST.gl_context_mutex);
 	WM_opengl_context_activate(re_gl_context);
 }
 
@@ -2395,7 +2395,7 @@ void DRW_opengl_render_context_disable(void *re_gl_context)
 	glFlush();
 	WM_opengl_context_release(re_gl_context);
 	/* TODO get rid of the blocking. */
-	BLI_mutex_unlock(&DST.gl_context_mutex);
+	BLI_ticket_mutex_unlock(DST.gl_context_mutex);
 }
 
 /* Needs to be called AFTER DRW_opengl_render_context_enable() */
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index e811e9ea8a9..9954754990f 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -373,7 +373,7 @@ typedef struct DRWManager {
 	 * the top portion of the struct so DO NOT MOVE IT! */
 	void *gl_context;                /* Unique ghost context used by the draw manager. */
 	Gwn_Context *gwn_context;
-	ThreadMutex gl_context_mutex;    /* Mutex to lock the drw manager and avoid concurent context usage. */
+	TicketMutex *gl_context_mutex;    /* Mutex to lock the drw manager and avoid concurent context usage. */
 
 	/** GPU Resource State: Memory storage between drawing. */
 	struct {



More information about the Bf-blender-cvs mailing list