From ec778a297f004036648d4ca3310facb05297d716 Mon Sep 17 00:00:00 2001 From: Michael Cheng Date: Fri, 15 May 2026 09:31:24 -0700 Subject: [PATCH] brw: Fix ordered dependency exec_all handling on Xe2+ On Xe2+ the Wa_1407528679 NoMask workaround is disabled, so baked_ordered_dependency_mode() should treat all instructions as exec_all, matching the logic in gather_inst_dependencies() and emit_inst_dependencies(). Without this, ordered RegDist dependencies from uniform/WE_all producers (e.g. 'mov s0, imm') are not found during baking and fall through as separate WE_all SYNC NOPs. Real shaders pile up dozens of these in front of masked sends. v2(Caio): Fix existing scalar_register test expectations Signed-off-by: Michael Cheng Fixes: 47a6ef3fef8f ("brw/scoreboard: Use a predicate helper for the nomask workaround") Part-of: --- src/intel/compiler/brw/brw_lower_scoreboard.cpp | 3 ++- src/intel/compiler/brw/test_lower_scoreboard.cpp | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/intel/compiler/brw/brw_lower_scoreboard.cpp b/src/intel/compiler/brw/brw_lower_scoreboard.cpp index db0742cab88..903147fc0cd 100644 --- a/src/intel/compiler/brw/brw_lower_scoreboard.cpp +++ b/src/intel/compiler/brw/brw_lower_scoreboard.cpp @@ -950,7 +950,8 @@ namespace { const std::vector &deps, const ordered_address &jp) { - const bool exec_all = inst->force_writemask_all; + const bool exec_all = inst->force_writemask_all || + !needs_nomask_workaround(devinfo); const bool has_ordered = find_ordered_dependency(deps, jp, exec_all); const tgl_pipe ordered_pipe = ordered_dependency_swsb(deps, jp, exec_all).pipe; diff --git a/src/intel/compiler/brw/test_lower_scoreboard.cpp b/src/intel/compiler/brw/test_lower_scoreboard.cpp index 22d9a60e321..eaaf4199ca6 100644 --- a/src/intel/compiler/brw/test_lower_scoreboard.cpp +++ b/src/intel/compiler/brw/test_lower_scoreboard.cpp @@ -1125,8 +1125,7 @@ TEST_F(scoreboard_test, scalar_register_mov_immediate_is_in_scalar_pipe) EXPECT_PROGRESS(brw_lower_scoreboard, bld); exp.uniform().MOV(scalar, imm); - SYNC_NOP(exp )->sched = SWSB("S@1"); - exp .MOV(r20, scalar); + exp .MOV(r20, scalar)->sched = SWSB("S@1"); EXPECT_SHADERS_MATCH(bld, exp); } @@ -1148,8 +1147,7 @@ TEST_F(scoreboard_test, scalar_register_mov_grf_is_not_in_scalar_pipe) EXPECT_PROGRESS(brw_lower_scoreboard, bld); exp.uniform().MOV (scalar, r10); - SYNC_NOP(exp )->sched = SWSB("I@1"); - exp .MOV (r20, scalar); + exp .MOV (r20, scalar)->sched = SWSB("I@1"); EXPECT_SHADERS_MATCH(bld, exp); } @@ -1287,7 +1285,7 @@ TEST_F(scoreboard_test, implicit_dependency_inside_if) EXPECT_SHADERS_MATCH(bld, exp); } -TEST_F(scoreboard_test, DISABLED_xe2_uniform_writer_baked_into_masked_consumer) +TEST_F(scoreboard_test, xe2_uniform_writer_baked_into_masked_consumer) { set_gfx_verx10(200); @@ -1308,7 +1306,7 @@ TEST_F(scoreboard_test, DISABLED_xe2_uniform_writer_baked_into_masked_consumer) EXPECT_SHADERS_MATCH(bld, exp); } -TEST_F(scoreboard_test, DISABLED_xe2_uniform_writer_baked_into_masked_send) +TEST_F(scoreboard_test, xe2_uniform_writer_baked_into_masked_send) { set_gfx_verx10(200);