panfrost: Preprocess shaders at CSO create time
Now the only passes that depend on the shader key can run late, so we can preprocess ahead-of-time once and throw away the original shader. This reduces the cost of shader variants, as well as deduplicates some lowering for transform feedback shaders. Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20906>
This commit is contained in:
committed by
Marge Bot
parent
683d1b6078
commit
c65a9be421
@@ -4815,16 +4815,7 @@ bifrost_preprocess_nir(nir_shader *nir, unsigned gpu_id)
|
||||
NIR_PASS_V(nir, pan_lower_sample_pos);
|
||||
NIR_PASS_V(nir, nir_lower_bit_size, bi_lower_bit_size, NULL);
|
||||
NIR_PASS_V(nir, nir_lower_64bit_phis);
|
||||
|
||||
if (nir->xfb_info != NULL && nir->info.has_transform_feedback_varyings) {
|
||||
NIR_PASS_V(nir, nir_io_add_const_offset_to_base,
|
||||
nir_var_shader_in | nir_var_shader_out);
|
||||
NIR_PASS_V(nir, nir_io_add_intrinsic_xfb_info);
|
||||
NIR_PASS_V(nir, pan_lower_xfb);
|
||||
}
|
||||
|
||||
NIR_PASS_V(nir, nir_lower_regs_to_ssa);
|
||||
|
||||
NIR_PASS_V(nir, pan_nir_lower_64bit_intrin);
|
||||
NIR_PASS_V(nir, pan_lower_helper_invocation);
|
||||
NIR_PASS_V(nir, nir_lower_int64);
|
||||
|
||||
@@ -402,14 +402,6 @@ midgard_preprocess_nir(nir_shader *nir, unsigned gpu_id)
|
||||
|
||||
NIR_PASS_V(nir, pan_lower_helper_invocation);
|
||||
NIR_PASS_V(nir, pan_lower_sample_pos);
|
||||
|
||||
if (nir->xfb_info != NULL && nir->info.has_transform_feedback_varyings) {
|
||||
NIR_PASS_V(nir, nir_io_add_const_offset_to_base,
|
||||
nir_var_shader_in | nir_var_shader_out);
|
||||
NIR_PASS_V(nir, nir_io_add_intrinsic_xfb_info);
|
||||
NIR_PASS_V(nir, pan_lower_xfb);
|
||||
}
|
||||
|
||||
NIR_PASS_V(nir, midgard_nir_lower_algebraic_early);
|
||||
NIR_PASS_V(nir, nir_lower_alu_to_scalar, mdg_should_scalarize, NULL);
|
||||
NIR_PASS_V(nir, nir_lower_flrp, 16 | 32 | 64, false /* always_precise */);
|
||||
|
||||
Reference in New Issue
Block a user