diff --git a/src/intel/compiler/brw_compile_mesh.cpp b/src/intel/compiler/brw_compile_mesh.cpp index 0a272ea8d33..6bcc5572d02 100644 --- a/src/intel/compiler/brw_compile_mesh.cpp +++ b/src/intel/compiler/brw_compile_mesh.cpp @@ -25,6 +25,7 @@ #include #include "brw_compiler.h" #include "brw_fs.h" +#include "brw_fs_builder.h" #include "brw_nir.h" #include "brw_private.h" #include "compiler/nir/nir_builder.h" @@ -259,6 +260,25 @@ brw_nir_align_launch_mesh_workgroups(nir_shader *nir) NULL); } +static void +brw_emit_urb_fence(fs_visitor &s) +{ + const fs_builder bld = fs_builder(&s).at_end(); + brw_reg dst = bld.vgrf(BRW_TYPE_UD); + fs_inst *fence = bld.emit(SHADER_OPCODE_MEMORY_FENCE, dst, + brw_vec8_grf(0, 0), + brw_imm_ud(true), + brw_imm_ud(0)); + fence->sfid = BRW_SFID_URB; + fence->desc = lsc_fence_msg_desc(s.devinfo, LSC_FENCE_LOCAL, + LSC_FLUSH_TYPE_NONE, true); + + bld.exec_all().group(1, 0).emit(FS_OPCODE_SCHEDULING_FENCE, + bld.null_reg_ud(), + &dst, + 1); +} + static bool run_task_mesh(fs_visitor &s, bool allow_spilling) { @@ -272,7 +292,7 @@ run_task_mesh(fs_visitor &s, bool allow_spilling) if (s.failed) return false; - s.emit_urb_fence(); + brw_emit_urb_fence(s); s.emit_cs_terminate(); diff --git a/src/intel/compiler/brw_fs.h b/src/intel/compiler/brw_fs.h index 220a92f1923..31d9e76e59a 100644 --- a/src/intel/compiler/brw_fs.h +++ b/src/intel/compiler/brw_fs.h @@ -328,7 +328,6 @@ public: brw_reg gs_urb_channel_mask(const brw_reg &dword_index); brw_reg gs_urb_per_slot_dword_index(const brw_reg &vertex_count); bool mark_last_urb_write_with_eot(); - void emit_urb_fence(); void emit_cs_terminate(); brw_reg interp_reg(const brw::fs_builder &bld, unsigned location, diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp index ac54056dc40..627ce41b2e5 100644 --- a/src/intel/compiler/brw_fs_visitor.cpp +++ b/src/intel/compiler/brw_fs_visitor.cpp @@ -405,25 +405,6 @@ fs_visitor::emit_urb_writes(const brw_reg &gs_vertex_count) } } -void -fs_visitor::emit_urb_fence() -{ - const fs_builder bld = fs_builder(this).at_end(); - brw_reg dst = bld.vgrf(BRW_TYPE_UD); - fs_inst *fence = bld.emit(SHADER_OPCODE_MEMORY_FENCE, dst, - brw_vec8_grf(0, 0), - brw_imm_ud(true), - brw_imm_ud(0)); - fence->sfid = BRW_SFID_URB; - fence->desc = lsc_fence_msg_desc(devinfo, LSC_FENCE_LOCAL, - LSC_FLUSH_TYPE_NONE, true); - - bld.exec_all().group(1, 0).emit(FS_OPCODE_SCHEDULING_FENCE, - bld.null_reg_ud(), - &dst, - 1); -} - void fs_visitor::emit_cs_terminate() {