diff options
author | Marek Olšák <[email protected]> | 2018-02-07 01:11:10 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-02-26 12:01:05 +0100 |
commit | c78640ce319e323ee2fdfac0d5b4dfce797baf0a (patch) | |
tree | d9ba0aff0a5e87ee537cc548d66502f0ad979c4f | |
parent | f852b24ce04431ecde639cefd5d86f64975894d5 (diff) |
radeonsi: set correct num_input_sgprs for VS prolog in merged shaders
We need to take num_input_sgprs from VS, not the second shader.
No apps suffered from this.
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 288f7434bb2..54f90fcac72 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -6750,18 +6750,6 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, si_build_tcs_epilog_function(&ctx, &tcs_epilog_key); parts[3] = ctx.main_fn; - /* VS prolog */ - if (vs_needs_prolog) { - union si_shader_part_key vs_prolog_key; - si_get_vs_prolog_key(&ls->info, - shader->info.num_input_sgprs, - &shader->key.part.tcs.ls_prolog, - shader, &vs_prolog_key); - vs_prolog_key.vs_prolog.is_monolithic = true; - si_build_vs_prolog_function(&ctx, &vs_prolog_key); - parts[0] = ctx.main_fn; - } - /* VS as LS main part */ struct si_shader shader_ls = {}; shader_ls.selector = ls; @@ -6777,6 +6765,18 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, shader->info.uses_instanceid |= ls->info.uses_instanceid; parts[1] = ctx.main_fn; + /* LS prolog */ + if (vs_needs_prolog) { + union si_shader_part_key vs_prolog_key; + si_get_vs_prolog_key(&ls->info, + shader_ls.info.num_input_sgprs, + &shader->key.part.tcs.ls_prolog, + shader, &vs_prolog_key); + vs_prolog_key.vs_prolog.is_monolithic = true; + si_build_vs_prolog_function(&ctx, &vs_prolog_key); + parts[0] = ctx.main_fn; + } + /* Reset the shader context. */ ctx.shader = shader; ctx.type = PIPE_SHADER_TESS_CTRL; @@ -6814,18 +6814,6 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, si_build_gs_prolog_function(&ctx, &gs_prolog_key); gs_prolog = ctx.main_fn; - /* ES prolog */ - if (es->vs_needs_prolog) { - union si_shader_part_key vs_prolog_key; - si_get_vs_prolog_key(&es->info, - shader->info.num_input_sgprs, - &shader->key.part.gs.vs_prolog, - shader, &vs_prolog_key); - vs_prolog_key.vs_prolog.is_monolithic = true; - si_build_vs_prolog_function(&ctx, &vs_prolog_key); - es_prolog = ctx.main_fn; - } - /* ES main part */ struct si_shader shader_es = {}; shader_es.selector = es; @@ -6841,6 +6829,18 @@ int si_compile_tgsi_shader(struct si_screen *sscreen, shader->info.uses_instanceid |= es->info.uses_instanceid; es_main = ctx.main_fn; + /* ES prolog */ + if (es->vs_needs_prolog) { + union si_shader_part_key vs_prolog_key; + si_get_vs_prolog_key(&es->info, + shader_es.info.num_input_sgprs, + &shader->key.part.gs.vs_prolog, + shader, &vs_prolog_key); + vs_prolog_key.vs_prolog.is_monolithic = true; + si_build_vs_prolog_function(&ctx, &vs_prolog_key); + es_prolog = ctx.main_fn; + } + /* Reset the shader context. */ ctx.shader = shader; ctx.type = PIPE_SHADER_GEOMETRY; |