diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index b4f0c42c14f..9a53b40128f 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -496,6 +496,10 @@ struct si_shader_info { * texunit + 1. */ uint8_t writes_1_if_tex_is_1; + + /* frag coord and sample pos per component read mask. */ + uint8_t reads_frag_coord_mask; + uint8_t reads_sample_pos_mask; }; /* A shader selector is a gallium CSO and contains shader variants and diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index 483777e0f22..65e00668143 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -557,6 +557,12 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info if (intr->intrinsic == nir_intrinsic_load_barycentric_at_sample) info->uses_interp_at_sample = true; break; + case nir_intrinsic_load_frag_coord: + info->reads_frag_coord_mask |= nir_ssa_def_components_read(&intr->dest.ssa); + break; + case nir_intrinsic_load_sample_pos: + info->reads_sample_pos_mask |= nir_ssa_def_components_read(&intr->dest.ssa); + break; case nir_intrinsic_load_input: case nir_intrinsic_load_per_vertex_input: case nir_intrinsic_load_input_vertex: