ir3, tu: Run optimization loop twice
authorConnor Abbott <cwabbott0@gmail.com>
Mon, 6 Jul 2020 16:26:14 +0000 (18:26 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 29 Sep 2020 16:16:05 +0000 (16:16 +0000)
This call to ir3_optimize_nir() mirrors what st/mesa does for us in
Gallium, and will be necessary for cross-stage linking and the multiview
lowering.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6515>

src/freedreno/ir3/ir3_nir.c
src/freedreno/ir3/ir3_nir.h
src/freedreno/vulkan/tu_shader.c

index f33f048..9b40616 100644 (file)
@@ -153,7 +153,7 @@ ir3_get_compiler_options(struct ir3_compiler *compiler)
 
 #define OPT_V(nir, pass, ...) NIR_PASS_V(nir, pass, ##__VA_ARGS__)
 
-static void
+void
 ir3_optimize_loop(nir_shader *s)
 {
        bool progress;
index 4126d4e..e9fe495 100644 (file)
@@ -52,6 +52,7 @@ void ir3_nir_lower_tess_eval(nir_shader *shader, unsigned topology);
 void ir3_nir_lower_gs(nir_shader *shader);
 
 const nir_shader_compiler_options * ir3_get_compiler_options(struct ir3_compiler *compiler);
+void ir3_optimize_loop(nir_shader *s);
 void ir3_finalize_nir(struct ir3_compiler *compiler, nir_shader *s);
 void ir3_nir_post_finalize(struct ir3_compiler *compiler, nir_shader *s);
 void ir3_nir_lower_variant(struct ir3_shader_variant *so, nir_shader *s);
index 7c671de..f0d2e50 100644 (file)
@@ -175,6 +175,8 @@ tu_spirv_to_nir(struct tu_device *dev,
 
    NIR_PASS_V(nir, nir_lower_frexp);
 
+   ir3_optimize_loop(nir);
+
    return nir;
 }