etnaviv: move etna_lower_alu(..) to etnaviv_nir.c
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Mon, 29 Jun 2020 11:22:33 +0000 (13:22 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 2 Jul 2020 17:04:46 +0000 (17:04 +0000)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Acked-by: Jonathan Marek <jonathan@marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5690>

src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c
src/gallium/drivers/etnaviv/etnaviv_nir.c
src/gallium/drivers/etnaviv/etnaviv_nir.h

index 9a4b461d3b039ddf69278f1b256c9e6d65e1d2c6..f04b97b0d4646582213c930038eca995dafe4909 100644 (file)
@@ -111,73 +111,6 @@ etna_alu_to_scalar_filter_cb(const nir_instr *instr, const void *data)
    return false;
 }
 
-static void
-etna_lower_alu_impl(nir_function_impl *impl, bool has_new_transcendentals)
-{
-   nir_shader *shader = impl->function->shader;
-
-   nir_builder b;
-   nir_builder_init(&b, impl);
-
-   /* in a seperate loop so we can apply the multiple-uniform logic to the new fmul */
-   nir_foreach_block(block, impl) {
-      nir_foreach_instr_safe(instr, block) {
-         if (instr->type != nir_instr_type_alu)
-            continue;
-
-         nir_alu_instr *alu = nir_instr_as_alu(instr);
-         /* multiply sin/cos src by constant
-          * TODO: do this earlier (but it breaks const_prop opt)
-          */
-         if (alu->op == nir_op_fsin || alu->op == nir_op_fcos) {
-            b.cursor = nir_before_instr(instr);
-
-            nir_ssa_def *imm = has_new_transcendentals ?
-               nir_imm_float(&b, 1.0 / M_PI) :
-               nir_imm_float(&b, 2.0 / M_PI);
-
-            nir_instr_rewrite_src(instr, &alu->src[0].src,
-               nir_src_for_ssa(nir_fmul(&b, alu->src[0].src.ssa, imm)));
-         }
-
-         /* change transcendental ops to vec2 and insert vec1 mul for the result
-          * TODO: do this earlier (but it breaks with optimizations)
-          */
-         if (has_new_transcendentals && (
-             alu->op == nir_op_fdiv || alu->op == nir_op_flog2 ||
-             alu->op == nir_op_fsin || alu->op == nir_op_fcos)) {
-            nir_ssa_def *ssa = &alu->dest.dest.ssa;
-
-            assert(ssa->num_components == 1);
-
-            nir_alu_instr *mul = nir_alu_instr_create(shader, nir_op_fmul);
-            mul->src[0].src = mul->src[1].src = nir_src_for_ssa(ssa);
-            mul->src[1].swizzle[0] = 1;
-
-            mul->dest.write_mask = 1;
-            nir_ssa_dest_init(&mul->instr, &mul->dest.dest, 1, 32, NULL);
-
-            ssa->num_components = 2;
-
-            mul->dest.saturate = alu->dest.saturate;
-            alu->dest.saturate = 0;
-
-            nir_instr_insert_after(instr, &mul->instr);
-
-            nir_ssa_def_rewrite_uses_after(ssa, nir_src_for_ssa(&mul->dest.dest.ssa), &mul->instr);
-         }
-      }
-   }
-}
-
-static void etna_lower_alu(nir_shader *shader, bool has_new_transcendentals)
-{
-   nir_foreach_function(function, shader) {
-      if (function->impl)
-         etna_lower_alu_impl(function->impl, has_new_transcendentals);
-   }
-}
-
 static void
 emit_inst(struct etna_compile *c, struct etna_inst *inst)
 {
index 5ac5d2837087dbeec0912ba0f18e48edacc50de5..13aa73b083930a377f5176ce3535df7d7b718365 100644 (file)
@@ -192,3 +192,71 @@ etna_lower_io(nir_shader *shader, struct etna_shader_variant *v)
       }
    }
 }
+
+static void
+etna_lower_alu_impl(nir_function_impl *impl, bool has_new_transcendentals)
+{
+   nir_shader *shader = impl->function->shader;
+
+   nir_builder b;
+   nir_builder_init(&b, impl);
+
+   /* in a seperate loop so we can apply the multiple-uniform logic to the new fmul */
+   nir_foreach_block(block, impl) {
+      nir_foreach_instr_safe(instr, block) {
+         if (instr->type != nir_instr_type_alu)
+            continue;
+
+         nir_alu_instr *alu = nir_instr_as_alu(instr);
+         /* multiply sin/cos src by constant
+          * TODO: do this earlier (but it breaks const_prop opt)
+          */
+         if (alu->op == nir_op_fsin || alu->op == nir_op_fcos) {
+            b.cursor = nir_before_instr(instr);
+
+            nir_ssa_def *imm = has_new_transcendentals ?
+               nir_imm_float(&b, 1.0 / M_PI) :
+               nir_imm_float(&b, 2.0 / M_PI);
+
+            nir_instr_rewrite_src(instr, &alu->src[0].src,
+               nir_src_for_ssa(nir_fmul(&b, alu->src[0].src.ssa, imm)));
+         }
+
+         /* change transcendental ops to vec2 and insert vec1 mul for the result
+          * TODO: do this earlier (but it breaks with optimizations)
+          */
+         if (has_new_transcendentals && (
+             alu->op == nir_op_fdiv || alu->op == nir_op_flog2 ||
+             alu->op == nir_op_fsin || alu->op == nir_op_fcos)) {
+            nir_ssa_def *ssa = &alu->dest.dest.ssa;
+
+            assert(ssa->num_components == 1);
+
+            nir_alu_instr *mul = nir_alu_instr_create(shader, nir_op_fmul);
+            mul->src[0].src = mul->src[1].src = nir_src_for_ssa(ssa);
+            mul->src[1].swizzle[0] = 1;
+
+            mul->dest.write_mask = 1;
+            nir_ssa_dest_init(&mul->instr, &mul->dest.dest, 1, 32, NULL);
+
+            ssa->num_components = 2;
+
+            mul->dest.saturate = alu->dest.saturate;
+            alu->dest.saturate = 0;
+
+            nir_instr_insert_after(instr, &mul->instr);
+
+            nir_ssa_def_rewrite_uses_after(ssa, nir_src_for_ssa(&mul->dest.dest.ssa), &mul->instr);
+         }
+      }
+   }
+}
+
+void
+etna_lower_alu(nir_shader *shader, bool has_new_transcendentals)
+{
+   nir_foreach_function(function, shader) {
+      if (function->impl)
+         etna_lower_alu_impl(function->impl, has_new_transcendentals);
+   }
+}
index fc3123053312420287f0590701fc61b4b8f52763..44258a8711aaa37a1ad323d39cefce8ebf6cbb24 100644 (file)
@@ -31,4 +31,7 @@
 void
 etna_lower_io(nir_shader *shader, struct etna_shader_variant *v);
 
+void
+etna_lower_alu(nir_shader *shader, bool has_new_transcendentals);
+
 #endif