summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2019-06-25 17:57:48 -0400
committerMarek Olšák <[email protected]>2019-07-03 15:51:13 -0400
commit92e34568b76a52491d0e4cba96a07f6069e94541 (patch)
treec566155729de4fd7c2216917bfe0cda25dae5a35
parentdfa8e758c2c7ddf6942c216ba7c59083592a6a21 (diff)
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 <[email protected]>
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.c5
1 files changed, 4 insertions, 1 deletions
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;