nir: allow to fine tune unrolling for loops with soft fp64 ops
Lowered fp64 ops can blow up the loop bodies while still being suitable for unrolling. Allow for using different parameters to unroll loops with soft fp64. Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18863>
This commit is contained in:
@@ -111,7 +111,9 @@ gl_nir_opts(nir_shader *nir)
|
||||
|
||||
NIR_PASS(progress, nir, nir_opt_undef);
|
||||
NIR_PASS(progress, nir, nir_opt_conditional_discard);
|
||||
if (nir->options->max_unroll_iterations) {
|
||||
if (nir->options->max_unroll_iterations ||
|
||||
(nir->options->max_unroll_iterations_fp64 &&
|
||||
(nir->options->lower_doubles_options & nir_lower_fp64_full_software))) {
|
||||
NIR_PASS(progress, nir, nir_opt_loop_unroll);
|
||||
}
|
||||
} while (progress);
|
||||
|
@@ -3622,6 +3622,7 @@ typedef struct nir_shader_compiler_options {
|
||||
|
||||
unsigned max_unroll_iterations;
|
||||
unsigned max_unroll_iterations_aggressive;
|
||||
unsigned max_unroll_iterations_fp64;
|
||||
|
||||
bool lower_uniforms_to_ubo;
|
||||
|
||||
|
@@ -875,6 +875,9 @@ check_unrolling_restrictions(nir_shader *shader, nir_loop *loop)
|
||||
/* Unroll much more aggressively if it can hide load latency. */
|
||||
if (shader->options->max_unroll_iterations_aggressive && can_pipeline_loads(loop))
|
||||
max_iter = shader->options->max_unroll_iterations_aggressive;
|
||||
/* Tune differently if the loop has double ops and soft fp64 is in use */
|
||||
else if (shader->options->max_unroll_iterations_fp64 && loop->info->has_soft_fp64)
|
||||
max_iter = shader->options->max_unroll_iterations_fp64;
|
||||
unsigned trip_count =
|
||||
li->max_trip_count ? li->max_trip_count : li->guessed_trip_count;
|
||||
|
||||
|
Reference in New Issue
Block a user