diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c index c56326a6342..7fd20509791 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c @@ -2859,22 +2859,20 @@ get_register_type(struct lp_build_nir_context *bld_base, return type; } - -bool lp_build_nir_llvm(struct lp_build_nir_context *bld_base, - struct nir_shader *nir) +void +lp_build_nir_prepasses(struct nir_shader *nir) { - struct nir_function *func; - NIR_PASS_V(nir, nir_convert_to_lcssa, true, true); NIR_PASS_V(nir, nir_convert_from_ssa, true); NIR_PASS_V(nir, nir_lower_locals_to_regs, 32); NIR_PASS_V(nir, nir_remove_dead_derefs); NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL); +} - if (is_aos(bld_base)) { - NIR_PASS_V(nir, nir_move_vec_src_uses_to_dest); - NIR_PASS_V(nir, nir_lower_vec_to_regs, NULL, NULL); - } +bool lp_build_nir_llvm(struct lp_build_nir_context *bld_base, + struct nir_shader *nir) +{ + struct nir_function *func; nir_foreach_shader_out_variable(variable, nir) handle_shader_output_decl(bld_base, nir, variable); diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.h b/src/gallium/auxiliary/gallivm/lp_bld_nir.h index 3427bb23bb7..443a7b4c22a 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.h @@ -295,6 +295,8 @@ struct lp_build_nir_soa_context unsigned gs_vertex_streams; }; +void +lp_build_nir_prepasses(struct nir_shader *nir); bool lp_build_nir_llvm(struct lp_build_nir_context *bld_base, diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_aos.c index 2fb53f1f69e..f1da5b10120 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_aos.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_aos.c @@ -394,5 +394,8 @@ lp_build_nir_aos(struct gallivm_state *gallivm, bld.bld_base.tex = emit_tex; bld.bld_base.emit_var_decl = emit_var_decl; + lp_build_nir_prepasses(shader); + NIR_PASS_V(shader, nir_move_vec_src_uses_to_dest); + NIR_PASS_V(shader, nir_lower_vec_to_regs, NULL, NULL); lp_build_nir_llvm(&bld.bld_base, shader); } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index 0c290ccdeeb..cd4438eaf23 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -2973,6 +2973,7 @@ void lp_build_nir_soa(struct gallivm_state *gallivm, } emit_prologue(&bld); + lp_build_nir_prepasses(shader); lp_build_nir_llvm(&bld.bld_base, shader); if (bld.gs_iface) {