radeonsi: refine si_llvm_es_build_end

1. merge si_set_es_return_value_for_gs into si_llvm_es_build_end
2. stop return value when mono mode in which case GS use ES input as
   input instead of ES output

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24204>
This commit is contained in:
Qiang Yu 2023-07-12 15:34:03 +08:00 committed by Marge Bot
parent 401a40a5f4
commit 21ae5909a4
2 changed files with 6 additions and 11 deletions

View file

@ -589,7 +589,7 @@ void si_init_shader_args(struct si_shader *shader, struct si_shader_args *args)
declare_tes_input_vgprs(args);
}
if (shader->key.ge.as_es &&
if (shader->key.ge.as_es && !shader->is_monolithic &&
(stage == MESA_SHADER_VERTEX || stage == MESA_SHADER_TESS_EVAL)) {
/* ES return values are inputs to GS. */
for (i = 0; i < 8 + GFX9_GS_NUM_USER_SGPR; i++)

View file

@ -25,11 +25,12 @@ LLVMValueRef si_is_gs_thread(struct si_shader_context *ctx)
si_unpack_param(ctx, ctx->args->ac.merged_wave_info, 8, 8), "");
}
/* Pass GS inputs from ES to GS on GFX9. */
static void si_set_es_return_value_for_gs(struct si_shader_context *ctx)
void si_llvm_es_build_end(struct si_shader_context *ctx)
{
if (!ctx->shader->is_monolithic)
ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
if (ctx->screen->info.gfx_level < GFX9 || ctx->shader->is_monolithic)
return;
ac_build_endif(&ctx->ac, ctx->merged_wrap_if_label);
LLVMValueRef ret = ctx->return_value;
@ -64,12 +65,6 @@ static void si_set_es_return_value_for_gs(struct si_shader_context *ctx)
ctx->return_value = ret;
}
void si_llvm_es_build_end(struct si_shader_context *ctx)
{
if (ctx->screen->info.gfx_level >= GFX9)
si_set_es_return_value_for_gs(ctx);
}
void si_llvm_gs_build_end(struct si_shader_context *ctx)
{
if (ctx->screen->info.gfx_level >= GFX9)