radeonsi/gfx10: fix a possible hang with exp pos0 with done=0 and exec=0
authorMarek Olšák <marek.olsak@amd.com>
Tue, 28 May 2019 23:52:53 +0000 (19:52 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 3 Jul 2019 19:51:13 +0000 (15:51 -0400)
Acked-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/gallium/drivers/radeonsi/si_shader.c

index 2d022438841a81f1bf8ef7209446bb0bb94c0284..7bc22fcfa4f717f1ec60b5ed7eaec8b208366004 100644 (file)
@@ -3021,6 +3021,14 @@ void si_llvm_export_vs(struct si_shader_context *ctx,
                if (pos_args[i].out[0])
                        shader->info.nr_pos_exports++;
 
+       /* Navi10-14 skip POS0 exports if EXEC=0 and DONE=0, causing a hang.
+        * Setting valid_mask=1 prevents it and has no other effect.
+        */
+       if (ctx->screen->info.family == CHIP_NAVI10 ||
+           ctx->screen->info.family == CHIP_NAVI12 ||
+           ctx->screen->info.family == CHIP_NAVI14)
+               pos_args[0].valid_mask = 1;
+
        pos_idx = 0;
        for (i = 0; i < 4; i++) {
                if (!pos_args[i].out[0])