radv: gather if the FS uses perspective or linear interpolations

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9515>
This commit is contained in:
Samuel Pitoiset 2021-03-10 16:19:59 +01:00
parent b2c1ed262d
commit abc64caef9
2 changed files with 22 additions and 1 deletions

View File

@ -321,6 +321,7 @@ struct radv_shader_info {
bool post_depth_coverage;
bool reads_sample_mask_in;
uint8_t depth_layout;
bool uses_persp_or_linear_interp;
} ps;
struct {
bool uses_grid_size;

View File

@ -132,8 +132,28 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
struct radv_shader_info *info)
{
switch (instr->intrinsic) {
case nir_intrinsic_load_barycentric_sample:
case nir_intrinsic_load_barycentric_pixel:
case nir_intrinsic_load_barycentric_centroid: {
enum glsl_interp_mode mode = nir_intrinsic_interp_mode(instr);
switch (mode) {
case INTERP_MODE_NONE:
case INTERP_MODE_SMOOTH:
case INTERP_MODE_NOPERSPECTIVE:
info->ps.uses_persp_or_linear_interp = true;
break;
default:
break;
}
break;
}
case nir_intrinsic_load_barycentric_at_offset:
case nir_intrinsic_load_barycentric_at_sample:
info->ps.needs_sample_positions = true;
if (nir_intrinsic_interp_mode(instr) != INTERP_MODE_FLAT)
info->ps.uses_persp_or_linear_interp = true;
if (instr->intrinsic == nir_intrinsic_load_barycentric_at_sample)
info->ps.needs_sample_positions = true;
break;
case nir_intrinsic_load_draw_id:
info->vs.needs_draw_id = true;