radeonsi: tweak next-shader assumptions when streamout is used

VS with streamout is always a HW VS.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2017-06-25 19:01:13 +02:00
parent a69afb68c9
commit 25ff22e390
1 changed files with 11 additions and 5 deletions

View File

@ -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, static void si_parse_next_shader_property(const struct tgsi_shader_info *info,
bool streamout,
struct si_shader_key *key) struct si_shader_key *key)
{ {
unsigned next_shader = info->properties[TGSI_PROPERTY_NEXT_SHADER]; 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; key->as_ls = 1;
break; break;
default: default:
/* If POSITION isn't written, it can't be a HW VS. /* If POSITION isn't written, it can only be a HW VS
* Assume that it's a HW LS. (the next shader is TCS) * 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. * This heuristic is needed for separate shader objects.
*/ */
if (!info->writes_position) if (!info->writes_position && !streamout)
key->as_ls = 1; key->as_ls = 1;
} }
break; break;
@ -1808,7 +1810,9 @@ void si_init_shader_selector_async(void *job, int thread_index)
} }
shader->selector = sel; 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) if (sel->tokens)
tgsi_binary = si_get_tgsi_binary(sel); 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; struct si_shader_key key;
memset(&key, 0, sizeof(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 /* Set reasonable defaults, so that the shader key doesn't
* cause any code to be eliminated. * cause any code to be eliminated.