intel/brw: add load_coverage_mask_intel intrinsic

We'll need the raw coverage mask provided to the fragment shader in a
future patch.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Tested-by: Caleb Callaway <caleb.callaway@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38879>
This commit is contained in:
Iván Briano 2025-12-09 16:58:22 -08:00 committed by Marge Bot
parent d8e1409948
commit 3448f3ce4a
3 changed files with 15 additions and 0 deletions

View file

@ -1008,6 +1008,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
case nir_intrinsic_cmat_muladd_amd:
case nir_intrinsic_dpas_intel:
case nir_intrinsic_convert_cmat_intel:
case nir_intrinsic_load_coverage_mask_intel:
case nir_intrinsic_isberd_nv:
case nir_intrinsic_isbewr_nv:
case nir_intrinsic_vild_nv:

View file

@ -2649,6 +2649,10 @@ system_value("simd_width_intel", 1)
# IndirectDataStartAddress
system_value("indirect_address_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)
# Load a relocatable 32-bit value
intrinsic("load_reloc_const_intel", dest_comp=1, bit_sizes=[32],
indices=[PARAM_IDX, BASE], flags=[CAN_ELIMINATE, CAN_REORDER])

View file

@ -3803,6 +3803,16 @@ brw_from_nir_emit_fs_intrinsic(nir_to_brw_state &ntb,
break;
}
case nir_intrinsic_load_coverage_mask_intel: {
struct brw_fs_prog_data *fs_prog_data = brw_fs_prog_data(ntb.s.prog_data);
assert(fs_prog_data->uses_sample_mask);
bld.MOV(retype(dest, BRW_TYPE_UD),
brw_fetch_payload_reg(ntb.bld,
ntb.s.fs_payload().sample_mask_in_reg,
BRW_TYPE_UD));
break;
}
case nir_intrinsic_store_output: {
const brw_reg src = get_nir_src(ntb, instr->src[0], -1);
const nir_io_semantics sem = nir_intrinsic_io_semantics(instr);