diff --git a/src/intel/compiler/jay/jay_from_nir.c b/src/intel/compiler/jay/jay_from_nir.c index e3a20d02748..1fcf6863eb8 100644 --- a/src/intel/compiler/jay/jay_from_nir.c +++ b/src/intel/compiler/jay/jay_from_nir.c @@ -64,7 +64,7 @@ typedef struct jay_fs_payload { jay_def xy, z, w; } coord; - jay_def pixel_sample_mask; + jay_def coverage_mask; jay_def sample_pos; jay_def deltas[64]; } jay_fs_payload; @@ -1327,6 +1327,10 @@ jay_emit_intrinsic(struct nir_to_jay_state *nj, nir_intrinsic_instr *intr) JAY_TYPE_U32; break; + case nir_intrinsic_load_coverage_mask_intel: + jay_MOV(b, dst, fs->coverage_mask); + break; + case nir_intrinsic_load_dispatch_mask_intel: { jay_def mask = jay_extract(nj->payload.u0, 15); @@ -2602,6 +2606,10 @@ setup_fragment_payload(struct nir_to_jay_state *nj, struct payload_builder *p) fs->coord.w = read_payload(p, GPR); } + if (nj->s->prog_data->fs.uses_sample_mask) { + fs->coverage_mask = read_payload(p, GPR); + } + if (nj->s->prog_data->fs.uses_pos_offset) { fs->sample_pos = read_vector_payload(p, UGPR, jay_ugpr_per_grf(nj->s)); } diff --git a/src/intel/compiler/jay/jay_prog_data.c b/src/intel/compiler/jay/jay_prog_data.c index 21a3f1cb343..b8e40955eff 100644 --- a/src/intel/compiler/jay/jay_prog_data.c +++ b/src/intel/compiler/jay/jay_prog_data.c @@ -88,11 +88,8 @@ gather_fs_info(nir_builder *b, nir_intrinsic_instr *intr, void *data) prog_data->uses_src_w = true; break; - case nir_intrinsic_load_sample_mask_in: - /* TODO: Sample masks are broken and discards are broken and simd32 - * layouts are broken too. XXX. - */ - // prog_data->uses_sample_mask = true; + case nir_intrinsic_load_coverage_mask_intel: + prog_data->uses_sample_mask = true; break; case nir_intrinsic_load_pixel_coord_intel: