diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 7ef1def6bfe..31eddf5bebe 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -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: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index fbff210259a..3d157d99a0e 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -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]) diff --git a/src/intel/compiler/brw/brw_from_nir.cpp b/src/intel/compiler/brw/brw_from_nir.cpp index 13902d4ad67..2d632077fb8 100644 --- a/src/intel/compiler/brw/brw_from_nir.cpp +++ b/src/intel/compiler/brw/brw_from_nir.cpp @@ -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);