Re: [Mesa-dev] [PATCH 9/9] [AUTONAK] i965/nir: Call nir_sweep().

2015-03-30 Thread Eric Anholt
Kenneth Graunke kenn...@whitecape.org writes:

 Mostly a proof of concept that it works; we free the memory shortly
 afterwards anyway, so it's kind of dumb to do this.

 The plan is to instead build nir_shaders at link time, rather than when
 compiling each shader specialization, and delete the GLSL IR.

This sounds really interesting -- it might make sense for me, too, if I
had a good way to clone the NIR for doing shader specialization.


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 9/9] [AUTONAK] i965/nir: Call nir_sweep().

2015-03-28 Thread Kenneth Graunke
Mostly a proof of concept that it works; we free the memory shortly
afterwards anyway, so it's kind of dumb to do this.

The plan is to instead build nir_shaders at link time, rather than when
compiling each shader specialization, and delete the GLSL IR.

Signed-off-by: Kenneth Graunke kenn...@whitecape.org
---
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 56 ++--
 1 file changed, 32 insertions(+), 24 deletions(-)

This definitely shouldn't land.  However, I ran full Piglit and shader-db runs 
with
this enabled, and got no crashes or validation failures.  I sent it to the list 
so
people can see how I tested nir_sweep().

diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
index 21e52fe..5218d20 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
@@ -29,33 +29,41 @@
 #include brw_nir.h
 
 static void
+boo(nir_shader *nir)
+{
+   nir_validate_shader(nir);
+   nir_sweep(nir);
+   nir_validate_shader(nir);
+}
+
+static void
 nir_optimize(nir_shader *nir)
 {
bool progress;
do {
   progress = false;
   nir_lower_vars_to_ssa(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   nir_lower_alu_to_scalar(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_copy_prop(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   nir_lower_phis_to_scalar(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_copy_prop(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_dce(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_cse(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_peephole_select(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_algebraic(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_constant_folding(nir);
-  nir_validate_shader(nir);
+  boo(nir);
   progress |= nir_opt_remove_phis(nir);
-  nir_validate_shader(nir);
+  boo(nir);
} while (progress);
 }
 
@@ -96,19 +104,19 @@ fs_visitor::emit_nir_code()
   nir = prog_to_nir(prog, options);
   nir_convert_to_ssa(nir); /* turn registers into SSA */
}
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_lower_global_vars_to_local(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_split_var_copies(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_optimize(nir);
 
/* Lower a bunch of stuff */
nir_lower_var_copies(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
/* Get rid of split copies */
nir_optimize(nir);
@@ -129,31 +137,31 @@ fs_visitor::emit_nir_code()
nir_assign_var_locations_scalar(nir-outputs, nir-num_outputs);
 
nir_lower_io(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_remove_dead_variables(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
if (shader_prog) {
   nir_lower_samplers(nir, shader_prog, shader-base.Program);
-  nir_validate_shader(nir);
+  boo(nir);
}
 
nir_lower_system_values(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_lower_atomics(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_optimize(nir);
 
nir_lower_locals_to_regs(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
nir_lower_to_source_mods(nir);
-   nir_validate_shader(nir);
+   boo(nir);
nir_copy_prop(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
if (unlikely(debug_enabled)) {
   fprintf(stderr, NIR (SSA form) for %s shader:\n, stage_name);
@@ -172,7 +180,7 @@ fs_visitor::emit_nir_code()
}
 
nir_convert_from_ssa(nir);
-   nir_validate_shader(nir);
+   boo(nir);
 
/* This is the last pass we run before we start emitting stuff.  It
 * determines when we need to insert boolean resolves on Gen = 5.  We
-- 
2.3.4

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev