From fbedbad0dd97afee7f4397f41f5598d903a60132 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Fri, 3 Mar 2023 19:33:42 +0800 Subject: [PATCH] radeonsi: handle lowered ps in scan_io_usage MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Qiang Yu Part-of: --- src/gallium/drivers/radeonsi/si_shader_info.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index bf073c3..483777e 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -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; } } -- 2.7.4