From: Marek Olšák Date: Fri, 14 Aug 2020 23:11:37 +0000 (-0400) Subject: radeonsi: remove in/out/uniform variables from NIR after lowering IO X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f4d0565f5261d49e675c55183f77269a736c3e2b;p=mesa.git radeonsi: remove in/out/uniform variables from NIR after lowering IO Acked-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Connor Abbott Part-of: --- diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 00371224368..d9e3ac41868 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -752,6 +752,23 @@ static void si_lower_io(struct nir_shader *nir) NIR_PASS_V(nir, nir_opt_constant_folding); NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in); NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_out); + + /* Remove dead derefs, so that nir_validate doesn't fail. */ + NIR_PASS_V(nir, nir_opt_dce); + + /* Remove input and output nir_variables, because we don't need them + * anymore. Also remove uniforms, because those should have been lowered + * to UBOs already. + */ + unsigned modes = nir_var_shader_in | nir_var_shader_out | nir_var_uniform; + nir_foreach_variable_with_modes_safe(var, nir, modes) { + if (var->data.mode == nir_var_uniform && + (glsl_type_get_image_count(var->type) || + glsl_type_get_sampler_count(var->type))) + continue; + + exec_node_remove(&var->node); + } } /**