From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/si_state_shaders.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 631272e..727bf4b 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1595,20 +1595,24 @@ again:
        shader->selector = sel;
        shader->key = *key;
        shader->compiler_ctx_state = *compiler_state;
 
        /* If this is a merged shader, get the first shader's selector. */
        if (sscreen->b.chip_class >= GFX9) {
                if (sel->type == PIPE_SHADER_TESS_CTRL)
                        previous_stage_sel = key->part.tcs.ls;
                else if (sel->type == PIPE_SHADER_GEOMETRY)
                        previous_stage_sel = key->part.gs.es;
+
+               /* We need to wait for the previous shader. */
+               if (previous_stage_sel && thread_index < 0)
+                       util_queue_fence_wait(&previous_stage_sel->ready);
        }
 
        /* Compile the main shader part if it doesn't exist. This can happen
         * if the initial guess was wrong. */
        bool is_pure_monolithic =
                sscreen->use_monolithic_shaders ||
                memcmp(&key->mono, &zeroed.mono, sizeof(key->mono)) != 0;
 
        if (!is_pure_monolithic) {
                bool ok;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to