lima/ppir: duplicate intrinsics in nir
Move the duplicate uniform and varying steps to a nir pass, along with some changes in the duplicating strategy. Node duplication is now done per user of the varying/uniform. This is inspired by what the offline shader compiler seems to usually do, and as usual aims to reduce register pressure and better utilize the ld_uni and ld_var instruction slots. It is worth noting that due to a bug/feature, ppir was already duplicating uniforms per successor in ppir_node_add_src even if the comment indicated it was meant to be per-block. Additionally, ppir was duplicating load uniform nodes twice for nodes that use the same uniform in more than one source, resulting in one unnecessary (and unpipelineable) load. This new implementation in nir only creates one load in that case. Signed-off-by: Erico Nunes <nunes.erico@gmail.com> Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4535>
This commit is contained in:
@@ -248,6 +248,9 @@ lima_program_optimize_fs_nir(struct nir_shader *s,
|
||||
NIR_PASS_V(s, nir_move_vec_src_uses_to_dest);
|
||||
NIR_PASS_V(s, nir_lower_vec_to_movs);
|
||||
|
||||
NIR_PASS_V(s, lima_nir_duplicate_load_uniforms);
|
||||
NIR_PASS_V(s, lima_nir_duplicate_load_inputs);
|
||||
|
||||
nir_sweep(s);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user