aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2019-12-12 21:02:13 -0500
committerMarge Bot <[email protected]>2019-12-16 20:06:07 +0000
commit1436c261e93a5503042216156884d43fe4fc9b14 (patch)
treec2d9e2dbc47e6b796858e11e8a1721e42bca5007
parent378444ce90b073d639c7c6877bfb062a35ac04cd (diff)
radeonsi: fix determining whether the VS prolog is needed
Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3095>
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 0f96b5f6088..88b082de451 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -5993,7 +5993,9 @@ static bool si_vs_needs_prolog(const struct si_shader_selector *sel,
{
/* VGPR initialization fixup for Vega10 and Raven is always done in the
* VS prolog. */
- return sel->vs_needs_prolog || key->ls_vgpr_fix;
+ return sel->vs_needs_prolog ||
+ key->ls_vgpr_fix ||
+ key->unpack_instance_id_from_vertex_id;
}
LLVMValueRef si_is_es_thread(struct si_shader_context *ctx)
@@ -6932,7 +6934,7 @@ int si_compile_tgsi_shader(struct si_screen *sscreen,
if (shader->is_monolithic && ctx.type == PIPE_SHADER_VERTEX) {
LLVMValueRef parts[2];
- bool need_prolog = sel->vs_needs_prolog;
+ bool need_prolog = si_vs_needs_prolog(sel, &shader->key.part.vs.prolog);
parts[1] = ctx.main_fn;
@@ -7055,7 +7057,8 @@ int si_compile_tgsi_shader(struct si_screen *sscreen,
es_main = ctx.main_fn;
/* ES prolog */
- if (es->vs_needs_prolog) {
+ if (es->type == PIPE_SHADER_VERTEX &&
+ si_vs_needs_prolog(es, &shader->key.part.gs.vs_prolog)) {
union si_shader_part_key vs_prolog_key;
si_get_vs_prolog_key(&es->info,
shader_es.info.num_input_sgprs,