From 35622f165f4f07fedfd7e47f1a886b3286302f6f Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sun, 17 May 2026 15:19:25 -0700 Subject: [PATCH] jay, nir: Make a dispatch_mask_intel intrinsic jay is trying to use the fragment shader dispatch mask for helper invocation lowering, but it was using load_sample_mask_in for that (now load_coverage_mask_intel). But this isn't the MSAA coverage mask, the two are different payload fields. Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 1 + src/compiler/nir/nir_intrinsics.py | 3 +++ src/intel/compiler/jay/jay_from_nir.c | 2 +- src/intel/compiler/jay/jay_nir.c | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 2ae88f5d06d..8d6dad5f87a 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -1012,6 +1012,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_dpas_intel: case nir_intrinsic_convert_cmat_intel: case nir_intrinsic_load_coverage_mask_intel: + case nir_intrinsic_load_dispatch_mask_intel: case nir_intrinsic_isberd_nv: case nir_intrinsic_isbewr_nv: case nir_intrinsic_vild_nv: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 2bcbcca5a37..bdbc0868edb 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -2646,6 +2646,9 @@ system_value("simd_width_intel", 1) # IndirectDataStartAddress system_value("indirect_address_intel", 1) +# The dispatch mask as provided in the FS payload. +system_value("dispatch_mask_intel", 1) + # The raw coverage mask as provided in the FS payload. # The semantics of it depend on the HW state. system_value("coverage_mask_intel", 1) diff --git a/src/intel/compiler/jay/jay_from_nir.c b/src/intel/compiler/jay/jay_from_nir.c index 7217a8e6410..e3a20d02748 100644 --- a/src/intel/compiler/jay/jay_from_nir.c +++ b/src/intel/compiler/jay/jay_from_nir.c @@ -1327,7 +1327,7 @@ jay_emit_intrinsic(struct nir_to_jay_state *nj, nir_intrinsic_instr *intr) JAY_TYPE_U32; break; - case nir_intrinsic_load_coverage_mask_intel: { + case nir_intrinsic_load_dispatch_mask_intel: { jay_def mask = jay_extract(nj->payload.u0, 15); if (nj->s->dispatch_width == 32) { diff --git a/src/intel/compiler/jay/jay_nir.c b/src/intel/compiler/jay/jay_nir.c index 98e9f2f735a..2f5f3551eb0 100644 --- a/src/intel/compiler/jay/jay_nir.c +++ b/src/intel/compiler/jay/jay_nir.c @@ -51,7 +51,7 @@ lower_helper_invocation(nir_builder *b, nir_intrinsic_instr *intr, void *_) /* TODO: Is this right for multisampling? */ b->cursor = nir_before_instr(&intr->instr); nir_def *active = - nir_inot(b, nir_inverse_ballot(b, nir_load_coverage_mask_intel(b))); + nir_inot(b, nir_inverse_ballot(b, nir_load_dispatch_mask_intel(b))); nir_def_replace(&intr->def, active); return true;