From 7e25e5b56f9e746f7ce006ce47510ad2bd24174a Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Tue, 2 Mar 2021 14:30:01 +0200 Subject: [PATCH] ir3: disallow moving memory writes over discard Writes to global memory should not be moved over discard, otherwise we could have unintended side-effects or lack of side-effects where they should be observed. Fixes tests: dEQP-VK.rasterization.frag_side_effects.color_at_beginning.kill dEQP-VK.rasterization.frag_side_effects.color_at_end.kill Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/ir3/ir3_compiler_nir.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 7c06bf34553..9718f148c64 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -1956,6 +1956,9 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr) cond->regs[0]->flags &= ~IR3_REG_SSA; kill = ir3_KILL(b, cond, 0); + /* Side-effects should not be moved on a different side of the kill */ + kill->barrier_class = IR3_BARRIER_IMAGE_W | IR3_BARRIER_BUFFER_W; + kill->barrier_conflict = IR3_BARRIER_IMAGE_W | IR3_BARRIER_BUFFER_W; kill->regs[1]->num = regid(REG_P0, 0); array_insert(ctx->ir, ctx->ir->predicates, kill);