From 21ae5909a4744d8a562da0469c89b7d07b8c28a4 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Wed, 12 Jul 2023 15:34:03 +0800 Subject: [PATCH] radeonsi: refine si_llvm_es_build_end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_shader.c | 2 +- src/gallium/drivers/radeonsi/si_shader_llvm_gs.c | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 6963d4f302a..a09519984f8 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -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++) diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c index d13e373b751..c87e0d176d7 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c @@ -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)