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)