[Mesa-dev] [PATCH 3/4] radeonsi: use multi-threaded compilation in debug contexts

Nicolai Hähnle nhaehnle at gmail.com
Thu Jul 7 07:39:39 UTC 2016


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

We only have to stay single-threaded when debug output must be synchronous.
This yields better parallelism in shader-db runs for me.
---
 src/gallium/drivers/radeonsi/si_state_shaders.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index abbe451..94587b2 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1103,16 +1103,16 @@ void si_init_shader_selector_async(void *job, int thread_index)
 	struct si_shader_selector *sel = (struct si_shader_selector *)job;
 	struct si_screen *sscreen = sel->screen;
 	LLVMTargetMachineRef tm;
-	struct pipe_debug_callback *debug;
+	struct pipe_debug_callback *debug = &sel->debug;
 	unsigned i;
 
 	if (thread_index >= 0) {
 		assert(thread_index < ARRAY_SIZE(sscreen->tm));
 		tm = sscreen->tm[thread_index];
-		debug = NULL;
+		if (!debug->async)
+			debug = NULL;
 	} else {
 		tm = sel->tm;
-		debug = &sel->debug;
 	}
 
 	/* Compile the main shader part for use with a prolog and/or epilog.
@@ -1324,7 +1324,7 @@ static void *si_create_shader_selector(struct pipe_context *ctx,
 	pipe_mutex_init(sel->mutex);
 	util_queue_fence_init(&sel->ready);
 
-	if (sctx->b.debug.debug_message ||
+	if ((sctx->b.debug.debug_message && !sctx->b.debug.async) ||
 	    !util_queue_is_initialized(&sscreen->shader_compiler_queue))
 		si_init_shader_selector_async(sel, -1);
 	else
-- 
2.7.4



More information about the mesa-dev mailing list