From: Marek Olšák Date: Thu, 23 Jul 2020 02:13:16 +0000 (-0400) Subject: nir: get ffma support from NIR options for nir_lower_flrp X-Git-Tag: upstream/21.0.0~5635 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ac55b1a9a6266b5badfee82d81302ffc38faeb42;p=platform%2Fupstream%2Fmesa.git nir: get ffma support from NIR options for nir_lower_flrp This also fixes the inverted last parameter of nir_lower_flrp in most drivers. Reviewed-by: Jason Ekstrand Reviewed-by: Alyssa Rosenzweig Part-of: --- diff --git a/.gitlab-ci/traces-radeonsi.yml b/.gitlab-ci/traces-radeonsi.yml index f35e523..9e8d5db 100644 --- a/.gitlab-ci/traces-radeonsi.yml +++ b/.gitlab-ci/traces-radeonsi.yml @@ -173,7 +173,7 @@ traces: - path: godot/Material Testers.x86_64_2020.04.08_13.38_frame799.rdc expectations: - device: gl-radeonsi-stoney - checksum: 2ddcda6b1c136ce1448714a3ff8432eb + checksum: 5164e238381e7d77a64e3de771cc005f - path: gputest/gimark.trace expectations: - device: gl-radeonsi-stoney diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index c76975c..bce321a 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -261,8 +261,7 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively, shader, nir_lower_flrp, lower_flrp, - false /* always_precise */, - shader->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, shader, nir_opt_constant_folding); diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index e580e75..1c6aeec 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1451,8 +1451,7 @@ v3d_optimize_nir(struct nir_shader *s) NIR_PASS(lower_flrp_progress, s, nir_lower_flrp, lower_flrp, - false /* always_precise */, - s->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, s, nir_opt_constant_folding); progress = true; diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 6857621..bf054e8 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4314,7 +4314,7 @@ void nir_lower_alpha_test(nir_shader *shader, enum compare_func func, bool nir_lower_alu(nir_shader *shader); bool nir_lower_flrp(nir_shader *shader, unsigned lowering_mask, - bool always_precise, bool have_ffma); + bool always_precise); bool nir_lower_alu_to_scalar(nir_shader *shader, nir_instr_filter_cb cb, const void *data); bool nir_lower_bool_to_bitsize(nir_shader *shader); diff --git a/src/compiler/nir/nir_lower_flrp.c b/src/compiler/nir/nir_lower_flrp.c index 38be18e..3b4d23b 100644 --- a/src/compiler/nir/nir_lower_flrp.c +++ b/src/compiler/nir/nir_lower_flrp.c @@ -364,9 +364,10 @@ static void convert_flrp_instruction(nir_builder *bld, struct u_vector *dead_flrp, nir_alu_instr *alu, - bool always_precise, - bool have_ffma) + bool always_precise) { + bool have_ffma = !bld->shader->options->lower_ffma; + bld->cursor = nir_before_instr(&alu->instr); /* There are two methods to implement flrp(x, y, t). The strictly correct @@ -586,8 +587,7 @@ static void lower_flrp_impl(nir_function_impl *impl, struct u_vector *dead_flrp, unsigned lowering_mask, - bool always_precise, - bool have_ffma) + bool always_precise) { nir_builder b; nir_builder_init(&b, impl); @@ -599,8 +599,7 @@ lower_flrp_impl(nir_function_impl *impl, if (alu->op == nir_op_flrp && (alu->dest.dest.ssa.bit_size & lowering_mask)) { - convert_flrp_instruction(&b, dead_flrp, alu, always_precise, - have_ffma); + convert_flrp_instruction(&b, dead_flrp, alu, always_precise); } } } @@ -622,8 +621,7 @@ lower_flrp_impl(nir_function_impl *impl, bool nir_lower_flrp(nir_shader *shader, unsigned lowering_mask, - bool always_precise, - bool have_ffma) + bool always_precise) { struct u_vector dead_flrp; @@ -633,7 +631,7 @@ nir_lower_flrp(nir_shader *shader, nir_foreach_function(function, shader) { if (function->impl) { lower_flrp_impl(function->impl, &dead_flrp, lowering_mask, - always_precise, have_ffma); + always_precise); } } diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index bd73bee..46c1d1c 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -185,8 +185,7 @@ ir3_optimize_loop(nir_shader *s) if (lower_flrp != 0) { if (OPT(s, nir_lower_flrp, lower_flrp, - false /* always_precise */, - s->options->lower_ffma)) { + false /* always_precise */)) { OPT(s, nir_opt_constant_folding); progress = true; } diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 9ac0efa..f58f8cc 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -203,7 +203,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx, NIR_PASS_V(sel->nir, nir_lower_int64); NIR_PASS_V(sel->nir, nir_opt_vectorize, NULL, NULL); } - NIR_PASS_V(sel->nir, nir_lower_flrp, ~0, false, false); + NIR_PASS_V(sel->nir, nir_lower_flrp, ~0, false); } nir_tgsi_scan_shader(sel->nir, &sel->info, true); diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index a2f3af8..02fd6df 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -644,8 +644,7 @@ static void si_nir_opts(struct nir_shader *nir, bool first) assert(lower_flrp); bool lower_flrp_progress = false; - NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp, lower_flrp, false /* always_precise */, - nir->options->lower_ffma); + NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp, lower_flrp, false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, nir, nir_opt_constant_folding); progress = true; diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 0d448fa..4f2956b 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -1546,8 +1546,7 @@ vc4_optimize_nir(struct nir_shader *s) NIR_PASS(lower_flrp_progress, s, nir_lower_flrp, lower_flrp, - false /* always_precise */, - s->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, s, nir_opt_constant_folding); progress = true; diff --git a/src/gallium/frontends/vallium/val_pipeline.c b/src/gallium/frontends/vallium/val_pipeline.c index fb0a88a..a1d8390 100644 --- a/src/gallium/frontends/vallium/val_pipeline.c +++ b/src/gallium/frontends/vallium/val_pipeline.c @@ -590,7 +590,7 @@ val_shader_compile_to_ir(struct val_pipeline *pipeline, do { progress = false; - progress |= OPT(nir_lower_flrp, 32|64, true, false); + progress |= OPT(nir_lower_flrp, 32|64, true); progress |= OPT(nir_split_array_vars, nir_var_function_temp); progress |= OPT(nir_shrink_vec_array_vars, nir_var_function_temp); progress |= OPT(nir_opt_deref); diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index 8cf2131..d7b7551 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -597,8 +597,7 @@ brw_nir_optimize(nir_shader *nir, const struct brw_compiler *compiler, if (lower_flrp != 0) { if (OPT(nir_lower_flrp, lower_flrp, - false /* always_precise */, - compiler->devinfo->gen >= 6)) { + false /* always_precise */)) { OPT(nir_opt_constant_folding); } diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 6e5df53..089a134 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -305,8 +305,7 @@ st_nir_opts(nir_shader *nir) NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp, lower_flrp, - false /* always_precise */, - nir->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, nir, nir_opt_constant_folding); diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index 39f9b65..413c8d3 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -1272,8 +1272,7 @@ bi_optimize_nir(nir_shader *nir) nir, nir_lower_flrp, lower_flrp, - false /* always_precise */, - nir->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, nir, nir_opt_constant_folding); diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index bd13efd..415000b 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -536,8 +536,7 @@ optimise_nir(nir_shader *nir, unsigned quirks, bool is_blend) nir, nir_lower_flrp, lower_flrp, - false /* always_precise */, - nir->options->lower_ffma); + false /* always_precise */); if (lower_flrp_progress) { NIR_PASS(progress, nir, nir_opt_constant_folding);