From d6d75fcd915afd84a6abac0810a4d0375d297e30 Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Wed, 22 Jul 2020 23:52:50 +0200 Subject: [PATCH] tu: Fix hangs for DS with no output Part-of: --- src/freedreno/vulkan/tu_pipeline.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 541d834bb9c..679e76fffa4 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -847,6 +847,14 @@ tu6_emit_vpc(struct tu_cs *cs, tu6_setup_streamout(cs, last_shader, &linkage); + /* The GPU hangs on some models when there are no outputs (xs_pack::CNT), + * at least when a DS is the last stage, so add a dummy output to keep it + * happy if there aren't any. We do this late in order to avoid emitting + * any unused code and make sure that optimizations don't remove it. + */ + if (linkage.cnt == 0) + ir3_link_add(&linkage, 0, 0x1, linkage.max_loc); + /* map outputs of the last shader to VPC */ assert(linkage.cnt <= 32); const uint32_t sp_out_count = DIV_ROUND_UP(linkage.cnt, 2); -- 2.30.2