From 25ff22e390d645a7df8e641d0b17cf6fbf551976 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Sun, 25 Jun 2017 19:01:13 +0200 Subject: [PATCH] radeonsi: tweak next-shader assumptions when streamout is used MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit VS with streamout is always a HW VS. Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_state_shaders.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 8a795c0faef..daf4af5b28b 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1740,6 +1740,7 @@ static int si_shader_select(struct pipe_context *ctx, } static void si_parse_next_shader_property(const struct tgsi_shader_info *info, + bool streamout, struct si_shader_key *key) { unsigned next_shader = info->properties[TGSI_PROPERTY_NEXT_SHADER]; @@ -1755,11 +1756,12 @@ static void si_parse_next_shader_property(const struct tgsi_shader_info *info, key->as_ls = 1; break; default: - /* If POSITION isn't written, it can't be a HW VS. - * Assume that it's a HW LS. (the next shader is TCS) + /* If POSITION isn't written, it can only be a HW VS + * if streamout is used. If streamout isn't used, + * assume that it's a HW LS. (the next shader is TCS) * This heuristic is needed for separate shader objects. */ - if (!info->writes_position) + if (!info->writes_position && !streamout) key->as_ls = 1; } break; @@ -1808,7 +1810,9 @@ void si_init_shader_selector_async(void *job, int thread_index) } shader->selector = sel; - si_parse_next_shader_property(&sel->info, &shader->key); + si_parse_next_shader_property(&sel->info, + sel->so.num_outputs != 0, + &shader->key); if (sel->tokens) tgsi_binary = si_get_tgsi_binary(sel); @@ -1890,7 +1894,9 @@ void si_init_shader_selector_async(void *job, int thread_index) struct si_shader_key key; memset(&key, 0, sizeof(key)); - si_parse_next_shader_property(&sel->info, &key); + si_parse_next_shader_property(&sel->info, + sel->so.num_outputs != 0, + &key); /* Set reasonable defaults, so that the shader key doesn't * cause any code to be eliminated. -- 2.30.2