<div dir="ltr"><div>For patches 2 - 8:</div><div><br></div><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 24, 2019 at 9:15 AM Nicolai Hähnle <<a href="mailto:nhaehnle@gmail.com">nhaehnle@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Nicolai Hähnle <<a href="mailto:nicolai.haehnle@amd.com" target="_blank">nicolai.haehnle@amd.com</a>><br>
<br>
Force the driver thread to sync immediately with a compiler thread (but<br>
compilation still happens in a separate thread).<br>
<br>
This can be useful to simplify debugging compiler issues.<br>
---<br>
 src/gallium/drivers/radeonsi/si_debug_options.inc |  1 +<br>
 src/gallium/drivers/radeonsi/si_state_shaders.c   | 13 ++++++++++---<br>
 2 files changed, 11 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/gallium/drivers/radeonsi/si_debug_options.inc b/src/gallium/drivers/radeonsi/si_debug_options.inc<br>
index f4c3e19ed95..019256ca1d1 100644<br>
--- a/src/gallium/drivers/radeonsi/si_debug_options.inc<br>
+++ b/src/gallium/drivers/radeonsi/si_debug_options.inc<br>
@@ -1,5 +1,6 @@<br>
 OPT_BOOL(clear_db_cache_before_clear, false, "Clear DB cache before fast depth clear")<br>
 OPT_BOOL(enable_nir, false, "Enable NIR")<br>
 OPT_BOOL(aux_debug, false, "Generate ddebug_dumps for the auxiliary context")<br>
+OPT_BOOL(sync_compile, false, "Always compile synchronously (will cause stalls)")<br>
<br>
 #undef OPT_BOOL<br>
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c<br>
index 5bdfd4f6ac1..f57e7730905 100644<br>
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c<br>
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c<br>
@@ -1945,20 +1945,24 @@ current_not_ready:<br>
                        sel->first_variant = shader;<br>
                        sel->last_variant = shader;<br>
                } else {<br>
                        sel->last_variant->next_variant = shader;<br>
                        sel->last_variant = shader;<br>
                }<br>
<br>
                /* Use the default (unoptimized) shader for now. */<br>
                memset(&key->opt, 0, sizeof(key->opt));<br>
                mtx_unlock(&sel->mutex);<br>
+<br>
+               if (sscreen->options.sync_compile)<br>
+                       util_queue_fence_wait(&shader->ready);<br>
+<br>
                goto again;<br>
        }<br>
<br>
        /* Reset the fence before adding to the variant list. */<br>
        util_queue_fence_reset(&shader->ready);<br>
<br>
        if (!sel->last_variant) {<br>
                sel->first_variant = shader;<br>
                sel->last_variant = shader;<br>
        } else {<br>
@@ -2157,38 +2161,41 @@ static void si_init_shader_selector_async(void *job, int thread_index)<br>
 }<br>
<br>
 void si_schedule_initial_compile(struct si_context *sctx, unsigned processor,<br>
                                 struct util_queue_fence *ready_fence,<br>
                                 struct si_compiler_ctx_state *compiler_ctx_state,<br>
                                 void *job, util_queue_execute_func execute)<br>
 {<br>
        util_queue_fence_init(ready_fence);<br>
<br>
        struct util_async_debug_callback async_debug;<br>
-       bool wait =<br>
+       bool debug =<br>
                (sctx->debug.debug_message && !sctx->debug.async) ||<br>
                sctx->is_debug ||<br>
                si_can_dump_shader(sctx->screen, processor);<br>
<br>
-       if (wait) {<br>
+       if (debug) {<br>
                u_async_debug_init(&async_debug);<br>
                compiler_ctx_state->debug = async_debug.base;<br>
        }<br>
<br>
        util_queue_add_job(&sctx->screen->shader_compiler_queue, job,<br>
                           ready_fence, execute, NULL);<br>
<br>
-       if (wait) {<br>
+       if (debug) {<br>
                util_queue_fence_wait(ready_fence);<br>
                u_async_debug_drain(&async_debug, &sctx->debug);<br>
                u_async_debug_cleanup(&async_debug);<br>
        }<br>
+<br>
+       if (sctx->screen->options.sync_compile)<br>
+               util_queue_fence_wait(ready_fence);<br>
 }<br>
<br>
 /* Return descriptor slot usage masks from the given shader info. */<br>
 void si_get_active_slot_masks(const struct tgsi_shader_info *info,<br>
                              uint32_t *const_and_shader_buffers,<br>
                              uint64_t *samplers_and_images)<br>
 {<br>
        unsigned start, num_shaderbufs, num_constbufs, num_images, num_samplers;<br>
<br>
        num_shaderbufs = util_last_bit(info->shader_buffers_declared);<br>
-- <br>
2.20.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a></blockquote></div>