diff --git a/src/intel/compiler/brw_fs_scoreboard.cpp b/src/intel/compiler/brw_fs_scoreboard.cpp index 34c2f537317..f4e9915fc88 100644 --- a/src/intel/compiler/brw_fs_scoreboard.cpp +++ b/src/intel/compiler/brw_fs_scoreboard.cpp @@ -1003,6 +1003,11 @@ namespace { const ordered_address jp = p ? ordered_address(p, jps[ip].jp[IDX(p)]) : ordered_address(); const bool is_ordered = ordered_unit(devinfo, inst, IDX(TGL_PIPE_ALL)); + const bool uses_math_pipe = + inst->is_math() || + (intel_device_info_is_mtl(devinfo) && + (get_exec_type(inst) == BRW_REGISTER_TYPE_DF || + inst->dst.type == BRW_REGISTER_TYPE_DF)); /* Track any source registers that may be fetched asynchronously by this * instruction, otherwise clear the dependency in order to avoid @@ -1011,7 +1016,7 @@ namespace { for (unsigned i = 0; i < inst->sources; i++) { const dependency rd_dep = (inst->is_payload(i) || - inst->is_math()) ? dependency(TGL_SBID_SRC, ip, exec_all) : + uses_math_pipe) ? dependency(TGL_SBID_SRC, ip, exec_all) : is_ordered ? dependency(TGL_REGDIST_SRC, jp, exec_all) : dependency::done; diff --git a/src/intel/compiler/brw_ir_fs.h b/src/intel/compiler/brw_ir_fs.h index 525e5917821..d6d6d3e25bd 100644 --- a/src/intel/compiler/brw_ir_fs.h +++ b/src/intel/compiler/brw_ir_fs.h @@ -548,7 +548,10 @@ is_send(const fs_inst *inst) static inline bool is_unordered(const intel_device_info *devinfo, const fs_inst *inst) { - return is_send(inst) || inst->is_math(); + return is_send(inst) || inst->is_math() || + (intel_device_info_is_mtl(devinfo) && + (get_exec_type(inst) == BRW_REGISTER_TYPE_DF || + inst->dst.type == BRW_REGISTER_TYPE_DF)); } /**