summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeonsi/si_state_shaders.c
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-07-07 09:28:25 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-07-08 10:59:32 +0200
commit7ffc832ab849a49039f2579dd539c231a9c9c000 (patch)
tree754c9737909c28a641358509cdae5b9f5834e7e6 /src/gallium/drivers/radeonsi/si_state_shaders.c
parent084ca0d8e51ae0a5cca6cfc7e9d018d0b22b6fb7 (diff)
downloadexternal_mesa3d-7ffc832ab849a49039f2579dd539c231a9c9c000.zip
external_mesa3d-7ffc832ab849a49039f2579dd539c231a9c9c000.tar.gz
external_mesa3d-7ffc832ab849a49039f2579dd539c231a9c9c000.tar.bz2
radeonsi: use multi-threaded compilation in debug contexts
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 <funfunctor@folklore1984.net> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_state_shaders.c')
-rw-r--r--src/gallium/drivers/radeonsi/si_state_shaders.c8
1 files 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