diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 299d2b1c36b..0899455a1ec 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -2154,7 +2154,7 @@ intrinsic("final_primitive_nv", src_comp=[1]) barrier("copy_fs_outputs_nv") intrinsic("bar_set_nv", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE]) -intrinsic("bar_break_nv", dest_comp=1, bit_sizes=[32], src_comp=[1]) +intrinsic("bar_break_nv", dest_comp=1, bit_sizes=[32], src_comp=[1, 1]) # src[] = { bar, bar_set } intrinsic("bar_sync_nv", src_comp=[1, 1]) diff --git a/src/nouveau/compiler/nak/from_nir.rs b/src/nouveau/compiler/nak/from_nir.rs index 7789899f21f..894a7acfd73 100644 --- a/src/nouveau/compiler/nak/from_nir.rs +++ b/src/nouveau/compiler/nak/from_nir.rs @@ -1919,12 +1919,13 @@ impl<'a> ShaderFromNir<'a> { nir_intrinsic_bar_break_nv => { let src = self.get_src(&srcs[0]); let bar_in = b.bmov_to_bar(src); + let cond = self.get_src(&srcs[1]); let bar_out = b.alloc_ssa(RegFile::Bar, 1); b.push_op(OpBreak { bar_out: bar_out.into(), bar_in: bar_in.into(), - cond: SrcRef::True.into(), + cond: cond.into(), }); self.set_dst(&intrin.def, b.bmov_to_gpr(bar_out.into())); diff --git a/src/nouveau/compiler/nak_nir_add_barriers.c b/src/nouveau/compiler/nak_nir_add_barriers.c index ef4abfebb20..6e2c95395cb 100644 --- a/src/nouveau/compiler/nak_nir_add_barriers.c +++ b/src/nouveau/compiler/nak_nir_add_barriers.c @@ -77,7 +77,7 @@ break_loop_bars(nir_block *block, struct add_barriers_state *state) util_dynarray_element(&state->barriers, struct barrier, idx); if (bar->node == p) { nir_def *bar_val = nir_load_reg(b, bar->bar_reg); - bar_val = nir_bar_break_nv(b, bar_val); + bar_val = nir_bar_break_nv(b, bar_val, nir_imm_true(b)); nir_store_reg(b, bar_val, bar->bar_reg); idx--; }