diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index cde217ffd25..0ec4f8c42f8 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1492,7 +1492,8 @@ static bool si_nir_kill_outputs(nir_shader *nir, const union si_shader_key *key) struct nir_shader *si_get_nir_shader(struct si_shader_selector *sel, const union si_shader_key *key, - bool *free_nir) + bool *free_nir, + uint64_t tcs_vgpr_only_inputs) { nir_shader *nir; *free_nir = false; @@ -1683,7 +1684,7 @@ bool si_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler *compi { struct si_shader_selector *sel = shader->selector; bool free_nir; - struct nir_shader *nir = si_get_nir_shader(sel, &shader->key, &free_nir); + struct nir_shader *nir = si_get_nir_shader(sel, &shader->key, &free_nir, 0); /* Assign param export indices. */ if ((sel->stage == MESA_SHADER_VERTEX || diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index d34025c529f..907dc04b796 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -176,7 +176,8 @@ void si_get_vs_prolog_key(const struct si_shader_info *info, unsigned num_input_ struct si_shader *shader_out, union si_shader_part_key *key); struct nir_shader *si_get_nir_shader(struct si_shader_selector *sel, const union si_shader_key *key, - bool *free_nir); + bool *free_nir, + uint64_t tcs_vgpr_only_inputs); void si_get_tcs_epilog_key(struct si_shader *shader, union si_shader_part_key *key); bool si_need_ps_prolog(const union si_shader_part_key *key); void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_key *key, diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index cb379d44d70..2a15e71086e 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -1253,7 +1253,8 @@ bool si_llvm_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler * shader_ls.key.ge.opt.inline_uniforms = false; /* only TCS can inline uniforms */ shader_ls.is_monolithic = true; - nir = si_get_nir_shader(ls, &shader_ls.key, &free_nir); + nir = si_get_nir_shader(ls, &shader_ls.key, &free_nir, + sel->info.tcs_vgpr_only_inputs); si_update_shader_binary_info(shader, nir); if (!si_llvm_translate_nir(&ctx, &shader_ls, nir, free_nir, false)) { @@ -1313,7 +1314,7 @@ bool si_llvm_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler * shader_es.key.ge.opt.kill_outputs = 0; shader_es.is_monolithic = true; - nir = si_get_nir_shader(es, &shader_es.key, &free_nir); + nir = si_get_nir_shader(es, &shader_es.key, &free_nir, 0); si_update_shader_binary_info(shader, nir); if (!si_llvm_translate_nir(&ctx, &shader_es, nir, free_nir, false)) { diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 0b6f4226829..48dea26cb9e 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -663,7 +663,8 @@ static bool si_check_blend_dst_sampler_noop(struct si_context *sctx) bool free_nir; if (unlikely(sel->info.writes_1_if_tex_is_1 == 0xff)) { - struct nir_shader *nir = si_get_nir_shader(sel, &sctx->shader.ps.key, &free_nir); + struct nir_shader *nir = + si_get_nir_shader(sel, &sctx->shader.ps.key, &free_nir, 0); /* Determine if this fragment shader always writes vec4(1) if a specific texture * is all 1s.