From eb9f17b309cc5d969f03605b497f6d5032295229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 4 Dec 2022 02:47:45 -0500 Subject: [PATCH] radeonsi: fix a regression causing GPU hang with GLCTS using streamout Move the streamout code into the streamout-only branch. The code must be guarded by si_shader_uses_streamout(). Using xfb_stride is not enough. Fixes: 003cbddfee3 - radeonsi: use native shader info when init streamout args Reviewed-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index e21ab6700f7..68c79689c1b 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -210,17 +210,17 @@ static void declare_streamout_params(struct si_shader_args *args, struct si_shad if (si_shader_uses_streamout(shader)) { ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.streamout_config); ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.streamout_write_index); + + /* A streamout buffer offset is loaded if the stride is non-zero. */ + for (int i = 0; i < 4; i++) { + if (!sel->info.base.xfb_stride[i]) + continue; + + ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.streamout_offset[i]); + } } else if (sel->stage == MESA_SHADER_TESS_EVAL) { ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, NULL); } - - /* A streamout buffer offset is loaded if the stride is non-zero. */ - for (int i = 0; i < 4; i++) { - if (!sel->info.base.xfb_stride[i]) - continue; - - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ac.streamout_offset[i]); - } } unsigned si_get_max_workgroup_size(const struct si_shader *shader)