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 <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9365>
This commit is contained in:

committed by
Marge Bot

parent
7b3b8524ef
commit
7e25e5b56f
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user