radeonsi/nir: add interpolate at intrinsics to scan_instruction()

V2: use the uses_*_opcode_interp_* flags

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Timothy Arceri 2018-01-14 19:52:24 +11:00
parent 882eff4d20
commit 580f1aa247

View file

@ -127,6 +127,36 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_ssbo_atomic_comp_swap:
info->writes_memory = true;
break;
case nir_intrinsic_interp_var_at_centroid:
case nir_intrinsic_interp_var_at_sample:
case nir_intrinsic_interp_var_at_offset: {
enum glsl_interp_mode interp =
intr->variables[0]->var->data.interpolation;
switch (interp) {
case INTERP_MODE_SMOOTH:
case INTERP_MODE_NONE:
if (intr->intrinsic == nir_intrinsic_interp_var_at_centroid)
info->uses_persp_opcode_interp_centroid = true;
else if (intr->intrinsic == nir_intrinsic_interp_var_at_sample)
info->uses_persp_opcode_interp_sample = true;
else
info->uses_persp_opcode_interp_offset = true;
break;
case INTERP_MODE_NOPERSPECTIVE:
if (intr->intrinsic == nir_intrinsic_interp_var_at_centroid)
info->uses_linear_opcode_interp_centroid = true;
else if (intr->intrinsic == nir_intrinsic_interp_var_at_sample)
info->uses_linear_opcode_interp_sample = true;
else
info->uses_linear_opcode_interp_offset = true;
break;
case INTERP_MODE_FLAT:
break;
default:
unreachable("Unsupported interpoation type");
}
break;
}
default:
break;
}