From: Marek Olšák Date: Tue, 25 Jun 2019 21:57:48 +0000 (-0400) Subject: radeonsi/gfx10: fix legacy GS X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=92e34568b76a52491d0e4cba96a07f6069e94541;p=mesa.git radeonsi/gfx10: fix legacy GS LLVM doesn't insert s_waitcnt_vscnt before GS_DONE. There was also the crash in legacy GS copy shader. Acked-by: Bas Nieuwenhuizen --- diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 6bdddb13460..b2f4d93bd9f 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -3603,6 +3603,9 @@ static void emit_gs_epilogue(struct si_shader_context *ctx) return; } + if (ctx->screen->info.chip_class >= GFX10) + LLVMBuildFence(ctx->ac.builder, LLVMAtomicOrderingRelease, false, ""); + ac_build_sendmsg(&ctx->ac, AC_SENDMSG_GS_OP_NOP | AC_SENDMSG_GS_DONE, si_get_gs_wave_id(ctx)); @@ -5730,7 +5733,7 @@ si_generate_gs_copy_shader(struct si_screen *sscreen, /* Fetch the vertex stream ID.*/ LLVMValueRef stream_id; - if (gs_selector->so.num_outputs) + if (ctx.ac.chip_class <= GFX9 && gs_selector->so.num_outputs) stream_id = si_unpack_param(&ctx, ctx.param_streamout_config, 24, 2); else stream_id = ctx.i32_0;