From 7ffc832ab849a49039f2579dd539c231a9c9c000 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Thu, 7 Jul 2016 09:28:25 +0200 Subject: [PATCH] radeonsi: use multi-threaded compilation in debug contexts MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We only have to stay single-threaded when debug output must be synchronous. This yields better parallelism in shader-db runs for me. Reviewed-by: Edward O'Callaghan Reviewed-by: Marek Olšák --- 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