radeonsi: handle lowered ps in scan_io_usage
si_update_shader_binary_info() will call into this function to collect memory usage info after shader has been lowered finally. To avoid assertion failure in nir_instr_as_intrinsic() we have to check instruction type first. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21683>
This commit is contained in:
@@ -226,15 +226,19 @@ static void scan_io_usage(const nir_shader *nir, struct si_shader_info *info,
|
||||
unsigned interp = INTERP_MODE_FLAT; /* load_input uses flat shading */
|
||||
|
||||
if (intr->intrinsic == nir_intrinsic_load_interpolated_input) {
|
||||
nir_intrinsic_instr *baryc = nir_instr_as_intrinsic(intr->src[0].ssa->parent_instr);
|
||||
|
||||
if (baryc) {
|
||||
nir_instr *src_instr = intr->src[0].ssa->parent_instr;
|
||||
if (src_instr->type == nir_instr_type_intrinsic) {
|
||||
nir_intrinsic_instr *baryc = nir_instr_as_intrinsic(src_instr);
|
||||
if (nir_intrinsic_infos[baryc->intrinsic].index_map[NIR_INTRINSIC_INTERP_MODE] > 0)
|
||||
interp = nir_intrinsic_interp_mode(baryc);
|
||||
else
|
||||
unreachable("unknown barycentric intrinsic");
|
||||
} else {
|
||||
unreachable("unknown barycentric expression");
|
||||
/* May get here when si_update_shader_binary_info() after ps lower bc_optimize
|
||||
* which select center and centroid. Set to any value is OK because we don't
|
||||
* care this when si_update_shader_binary_info().
|
||||
*/
|
||||
interp = INTERP_MODE_SMOOTH;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user