diff --git a/src/intel/compiler/brw_fs_scoreboard.cpp b/src/intel/compiler/brw_fs_scoreboard.cpp index 94b92284373..a0955b92c81 100644 --- a/src/intel/compiler/brw_fs_scoreboard.cpp +++ b/src/intel/compiler/brw_fs_scoreboard.cpp @@ -987,15 +987,27 @@ namespace { exec_all).pipe; const tgl_sbid_mode unordered_mode = baked_unordered_dependency_mode(devinfo, inst, deps, jp); + const tgl_pipe inferred_pipe = inferred_sync_pipe(devinfo, inst); if (!has_ordered) return false; else if (!unordered_mode) return true; - else - return ordered_pipe == inferred_sync_pipe(devinfo, inst) && + else if (devinfo->ver < 20) + return ordered_pipe == inferred_pipe && unordered_mode == (is_unordered(devinfo, inst) ? TGL_SBID_SET : TGL_SBID_DST); + else if (is_send(inst)) + return unordered_mode == TGL_SBID_SET && + (ordered_pipe == TGL_PIPE_FLOAT || + ordered_pipe == TGL_PIPE_INT || + ordered_pipe == TGL_PIPE_ALL); + else if (inst->opcode == BRW_OPCODE_DPAS) + return ordered_pipe == inferred_pipe; + else + return (unordered_mode == TGL_SBID_DST && ordered_pipe == inferred_pipe) || + (unordered_mode == TGL_SBID_SRC && ordered_pipe == inferred_pipe) || + (unordered_mode == TGL_SBID_DST && ordered_pipe == TGL_PIPE_ALL); } /** @} */ diff --git a/src/intel/compiler/test_fs_scoreboard.cpp b/src/intel/compiler/test_fs_scoreboard.cpp index e89788eea95..ba40f175f9b 100644 --- a/src/intel/compiler/test_fs_scoreboard.cpp +++ b/src/intel/compiler/test_fs_scoreboard.cpp @@ -947,7 +947,7 @@ TEST_F(scoreboard_test, gitlab_issue_from_mr_29723) EXPECT_EQ(instruction(block0, 1)->sched, regdist(TGL_PIPE_FLOAT, 1)); } -TEST_F(scoreboard_test, DISABLED_combine_regdist_float_and_int_with_sbid_set) +TEST_F(scoreboard_test, combine_regdist_float_and_int_with_sbid_set) { devinfo->ver = 20; devinfo->verx10 = 200; @@ -982,7 +982,7 @@ TEST_F(scoreboard_test, DISABLED_combine_regdist_float_and_int_with_sbid_set) EXPECT_EQ(instruction(block0, 2)->sched, expected); } -TEST_F(scoreboard_test, DISABLED_combine_regdist_float_with_sbid_set) +TEST_F(scoreboard_test, combine_regdist_float_with_sbid_set) { devinfo->ver = 20; devinfo->verx10 = 200; @@ -1017,7 +1017,7 @@ TEST_F(scoreboard_test, DISABLED_combine_regdist_float_with_sbid_set) EXPECT_EQ(instruction(block0, 2)->sched, expected); } -TEST_F(scoreboard_test, DISABLED_combine_regdist_int_with_sbid_set) +TEST_F(scoreboard_test, combine_regdist_int_with_sbid_set) { devinfo->ver = 20; devinfo->verx10 = 200;